From f61c63e3a1d525ccc204f64ad813c4ba77077468 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Pedro=20J=2E=20Est=C3=A9banez?= Date: Mon, 27 May 2024 13:20:45 +0200 Subject: [PATCH] Avoid editor error reporting using resource loader thread's call queues --- core/io/resource_loader.h | 4 ++-- core/object/message_queue.h | 1 + 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 486f7bbf377f..11abb4dc184b 100644 --- a/core/io/resource_loader.h +++ b/core/io/resource_loader.h @@ -226,7 +226,7 @@ class ResourceLoader { // 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 @@ class ResourceLoader { 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 9f567e4dd045..673eb3845b55 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 df6c494392d3..a662ebbfafa1 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; }