mirror of
https://github.com/SoftFever/OrcaSlicer.git
synced 2026-02-19 19:12:23 -07:00
FIX: fix the crash issue #1944 caused by wronog thread name in some
corner cases this patch is cherry-picked from PrusaSlicer's 84722876012ca310e29b291e10fef9d18ae26cea thanks to 'Vojtech Bubnik' for the fix Implementing a test whether the current thread is the main (UI) thread and using it on AppConfig::save() to assert if save is called from a worker thread. The old assert was using thread names, which did not always work on Windows. Fixes #7839 #9178 #9370 #9420
This commit is contained in:
parent
12eec78d1d
commit
153c9517ce
4 changed files with 33 additions and 14 deletions
|
|
@ -187,6 +187,26 @@ std::optional<std::string> get_current_thread_name()
|
|||
|
||||
#endif // _WIN32
|
||||
|
||||
// To be called at the start of the application to save the current thread ID as the main (UI) thread ID.
|
||||
static boost::thread::id g_main_thread_id;
|
||||
|
||||
void save_main_thread_id()
|
||||
{
|
||||
g_main_thread_id = boost::this_thread::get_id();
|
||||
}
|
||||
|
||||
// Retrieve the cached main (UI) thread ID.
|
||||
boost::thread::id get_main_thread_id()
|
||||
{
|
||||
return g_main_thread_id;
|
||||
}
|
||||
|
||||
// Checks whether the main (UI) thread is active.
|
||||
bool is_main_thread_active()
|
||||
{
|
||||
return get_main_thread_id() == boost::this_thread::get_id();
|
||||
}
|
||||
|
||||
// Spawn (n - 1) worker threads on Intel TBB thread pool and name them by an index and a system thread ID.
|
||||
// Also it sets locale of the worker threads to "C" for the G-code generator to produce "." as a decimal separator.
|
||||
void name_tbb_thread_pool_threads_set_locale()
|
||||
|
|
|
|||
Loading…
Add table
Add a link
Reference in a new issue