Fix of a crash when using active_step_add_warning on PrintObjects

PrintObjectBase::status_update_warnings called PrintBase::status_update_warnings, which in turn set
SlicingStatus flag to UPDATE_PRINT_STEP_WARNINGS (instead of UPDATE_PRINT_OBEJCT_STEP_WARNINGS) and
saved its own ObjectID. This led to spurious and hard to read thread-unsafe crashes.
This commit is contained in:
Lukas Matena 2021-02-26 07:57:48 +01:00
parent a53de51b22
commit 19cfeb1a78
2 changed files with 10 additions and 8 deletions

View file

@ -94,12 +94,14 @@ std::string PrintBase::output_filepath(const std::string &path, const std::strin
return path;
}
void PrintBase::status_update_warnings(ObjectID object_id, int step, PrintStateBase::WarningLevel /* warning_level */, const std::string &message)
void PrintBase::status_update_warnings(int step, PrintStateBase::WarningLevel /* warning_level */, const std::string &message, const PrintObjectBase* print_object)
{
if (this->m_status_callback)
m_status_callback(SlicingStatus(*this, step));
if (this->m_status_callback) {
auto status = print_object ? SlicingStatus(*print_object, step) : SlicingStatus(*this, step);
m_status_callback(status);
}
else if (! message.empty())
printf("%s warning: %s\n", (object_id == this->id()) ? "print" : "print object", message.c_str());
printf("%s warning: %s\n", print_object ? "print_object" : "print", message.c_str());
}
tbb::mutex& PrintObjectBase::state_mutex(PrintBase *print)
@ -114,7 +116,7 @@ std::function<void()> PrintObjectBase::cancel_callback(PrintBase *print)
void PrintObjectBase::status_update_warnings(PrintBase *print, int step, PrintStateBase::WarningLevel warning_level, const std::string &message)
{
print->status_update_warnings(this->id(), step, warning_level, message);
print->status_update_warnings(step, warning_level, message, this);
}
} // namespace Slic3r