fix: cancel first before deleting task

This commit is contained in:
BuildTools 2024-08-11 18:45:40 -07:00
parent 7e61f6b3d3
commit f089aa264d
No known key found for this signature in database
GPG Key ID: 3270C066C15D530B
1 changed files with 10 additions and 14 deletions

View File

@ -1355,17 +1355,25 @@ def toggle_gpu_offload_auto(self, state):
self.gpu_offload_slider.setEnabled(not is_auto) self.gpu_offload_slider.setEnabled(not is_auto)
self.gpu_offload_spinbox.setEnabled(not is_auto) self.gpu_offload_spinbox.setEnabled(not is_auto)
def cancel_task(self, item): def cancel_task_by_item(self, item):
self.logger.info(CANCELLING_TASK.format(item.text()))
task_item = self.task_list.itemWidget(item) task_item = self.task_list.itemWidget(item)
for thread in self.quant_threads: for thread in self.quant_threads:
if thread.log_file == task_item.log_file: if thread.log_file == task_item.log_file:
thread.terminate() thread.terminate()
task_item.update_status(CANCELED) task_item.update_status(CANCELED)
self.quant_threads.remove(thread)
break break
def cancel_task(self, item):
self.logger.info(CANCELLING_TASK.format(item.text()))
self.cancel_task_by_item(item)
def delete_task(self, item): def delete_task(self, item):
self.logger.info(DELETING_TASK.format(item.text())) self.logger.info(DELETING_TASK.format(item.text()))
# Cancel the task first
self.cancel_task_by_item(item)
reply = QMessageBox.question( reply = QMessageBox.question(
self, self,
CONFIRM_DELETION_TITLE, CONFIRM_DELETION_TITLE,
@ -1374,22 +1382,10 @@ def delete_task(self, item):
QMessageBox.StandardButton.No, QMessageBox.StandardButton.No,
) )
if reply == QMessageBox.StandardButton.Yes: if reply == QMessageBox.StandardButton.Yes:
# Retrieve the task_item before removing it from the list
task_item = self.task_list.itemWidget(item) task_item = self.task_list.itemWidget(item)
# Remove the item from the list
row = self.task_list.row(item) row = self.task_list.row(item)
self.task_list.takeItem(row) self.task_list.takeItem(row)
# If the task is still running, terminate it
if task_item and task_item.log_file:
for thread in self.quant_threads:
if thread.log_file == task_item.log_file:
thread.terminate()
self.quant_threads.remove(thread)
break
# Delete the task_item widget
if task_item: if task_item:
task_item.deleteLater() task_item.deleteLater()