From 5647312a16c016390e501c4ff0139e41d70fbfcb Mon Sep 17 00:00:00 2001 From: "xin.zhang" Date: Fri, 25 Apr 2025 12:21:35 +0800 Subject: [PATCH] FIX: fix crash and blank page while cancel printing at 75 percent jira: [STUDIO-11861] Change-Id: I142df41ade73558849183fd245163cb5a7367f9c (cherry picked from commit ddf4e9bc9f73b5cf7c50e74b66a98716d0f81d16) --- src/slic3r/GUI/DeviceManager.cpp | 39 ++++++++++++++++++++------------ src/slic3r/GUI/DeviceManager.hpp | 4 +++- src/slic3r/GUI/StatusPanel.cpp | 2 +- 3 files changed, 28 insertions(+), 17 deletions(-) diff --git a/src/slic3r/GUI/DeviceManager.cpp b/src/slic3r/GUI/DeviceManager.cpp index d78292bd8e..415662f65d 100644 --- a/src/slic3r/GUI/DeviceManager.cpp +++ b/src/slic3r/GUI/DeviceManager.cpp @@ -722,17 +722,7 @@ MachineObject::~MachineObject() model_task = nullptr; } - if (get_slice_info_thread) { - if (get_slice_info_thread->joinable()) { - get_slice_info_thread->join(); - get_slice_info_thread = nullptr; - } - } - - if (slice_info) { - delete slice_info; - slice_info = nullptr; - } + free_slice_info(); for (auto it = amsList.begin(); it != amsList.end(); it++) { for (auto tray_it = it->second->trayList.begin(); tray_it != it->second->trayList.end(); tray_it++) { @@ -5437,10 +5427,6 @@ void MachineObject::set_modeltask(BBLModelTask* task) model_task = task; } -void MachineObject::set_slice_info(BBLSliceInfo *info) { - slice_info = info; -} - void MachineObject::update_model_task() { if (request_model_result > 10) return; @@ -5538,6 +5524,27 @@ void MachineObject::update_model_task() }); } +void MachineObject::free_slice_info() +{ + if (get_slice_info_thread) + { + if (get_slice_info_thread->joinable()) + { + get_slice_info_thread->interrupt(); + get_slice_info_thread->join(); + } + + delete get_slice_info_thread; + get_slice_info_thread = nullptr; + } + + if (slice_info) + { + delete slice_info; + slice_info = nullptr; + } +} + void MachineObject::update_slice_info(std::string project_id, std::string profile_id, std::string subtask_id, int plate_idx) { if (!m_agent) return; @@ -5563,6 +5570,8 @@ void MachineObject::update_slice_info(std::string project_id, std::string profil int plate_index = -1; if (!m_agent) return; + if (!slice_info) return; + if (get_slice_info_thread->interruption_requested()) { return;} if (plate_idx >= 0) { plate_index = plate_idx; diff --git a/src/slic3r/GUI/DeviceManager.hpp b/src/slic3r/GUI/DeviceManager.hpp index 5b23c923d6..99521405e3 100644 --- a/src/slic3r/GUI/DeviceManager.hpp +++ b/src/slic3r/GUI/DeviceManager.hpp @@ -1302,8 +1302,10 @@ public: BBLSubTask* get_subtask(); BBLModelTask* get_modeltask(); void set_modeltask(BBLModelTask* task); - void set_slice_info(BBLSliceInfo *info); + void update_model_task(); + + void free_slice_info(); void update_slice_info(std::string project_id, std::string profile_id, std::string subtask_id, int plate_idx); bool m_firmware_valid { false }; diff --git a/src/slic3r/GUI/StatusPanel.cpp b/src/slic3r/GUI/StatusPanel.cpp index 2c04349a88..5371c109f6 100644 --- a/src/slic3r/GUI/StatusPanel.cpp +++ b/src/slic3r/GUI/StatusPanel.cpp @@ -3815,7 +3815,7 @@ void StatusPanel::update_cloud_subtask(MachineObject *obj) if (is_task_changed(obj)) { obj->set_modeltask(nullptr); - obj->set_slice_info(nullptr); + obj->free_slice_info(); reset_printing_values(); BOOST_LOG_TRIVIAL(info) << "monitor: change to sub task id = " << obj->subtask_->task_id; if (web_request.IsOk() && web_request.GetState() == wxWebRequest::State_Active) {