diff options
author | Rémi Verschelde <remi@verschelde.fr> | 2024-06-03 11:20:50 +0200 |
---|---|---|
committer | GitHub <noreply@github.com> | 2024-06-03 11:20:50 +0200 |
commit | ef886b0a415ecb1fda3338230b270d62e1d086e5 (patch) | |
tree | 3a1892f99888354f6cd8ee01c1d826145d0da15d | |
parent | 482e45c62bf6d68978bbd871d262a972f6818698 (diff) | |
parent | f61c63e3a1d525ccc204f64ad813c4ba77077468 (diff) | |
download | redot-engine-ef886b0a415ecb1fda3338230b270d62e1d086e5.tar.gz |
Merge pull request #92426 from RandomShaper/fix_ed_toast_mt
Avoid editor error reporting using resource loader thread's call queues
-rw-r--r-- | core/io/resource_loader.h | 4 | ||||
-rw-r--r-- | core/object/message_queue.h | 1 | ||||
-rw-r--r-- | editor/gui/editor_toaster.cpp | 2 |
3 files changed, 4 insertions, 3 deletions
diff --git a/core/io/resource_loader.h b/core/io/resource_loader.h index 486f7bbf37..11abb4dc18 100644 --- a/core/io/resource_loader.h +++ b/core/io/resource_loader.h @@ -226,7 +226,7 @@ public: // Loaders can safely use this regardless which thread they are running on. static void notify_load_error(const String &p_err) { if (err_notify) { - callable_mp_static(err_notify).call_deferred(p_err); + MessageQueue::get_main_singleton()->push_callable(callable_mp_static(err_notify).bind(p_err)); } } static void set_error_notify_func(ResourceLoadErrorNotify p_err_notify) { @@ -239,7 +239,7 @@ public: if (Thread::get_caller_id() == Thread::get_main_id()) { dep_err_notify(p_path, p_dependency, p_type); } else { - callable_mp_static(dep_err_notify).call_deferred(p_path, p_dependency, p_type); + MessageQueue::get_main_singleton()->push_callable(callable_mp_static(dep_err_notify).bind(p_path, p_dependency, p_type)); } } } diff --git a/core/object/message_queue.h b/core/object/message_queue.h index 9f567e4dd0..673eb3845b 100644 --- a/core/object/message_queue.h +++ b/core/object/message_queue.h @@ -164,6 +164,7 @@ class MessageQueue : public CallQueue { public: _FORCE_INLINE_ static CallQueue *get_singleton() { return thread_singleton ? thread_singleton : main_singleton; } + _FORCE_INLINE_ static CallQueue *get_main_singleton() { return main_singleton; } static void set_thread_singleton_override(CallQueue *p_thread_singleton); diff --git a/editor/gui/editor_toaster.cpp b/editor/gui/editor_toaster.cpp index 9be58326ac..24f19db578 100644 --- a/editor/gui/editor_toaster.cpp +++ b/editor/gui/editor_toaster.cpp @@ -406,7 +406,7 @@ void EditorToaster::popup_str(const String &p_message, Severity p_severity, cons // Since "_popup_str" adds nodes to the tree, and since the "add_child" method is not // thread-safe, it's better to defer the call to the next cycle to be thread-safe. is_processing_error = true; - callable_mp(this, &EditorToaster::_popup_str).call_deferred(p_message, p_severity, p_tooltip); + MessageQueue::get_main_singleton()->push_callable(callable_mp(this, &EditorToaster::_popup_str).bind(p_message, p_severity, p_tooltip)); is_processing_error = false; } |