summaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorPedro J. Estébanez <pedrojrulez@gmail.com>2024-05-27 13:20:45 +0200
committerPedro J. Estébanez <pedrojrulez@gmail.com>2024-05-31 09:42:37 +0200
commitf61c63e3a1d525ccc204f64ad813c4ba77077468 (patch)
tree9f438a95385b0ebc8e2e2141444e2a55fe1d83c7
parente7dd6f11ed1ed4d72186d3a90d5f4ef42e79c4d0 (diff)
downloadredot-engine-f61c63e3a1d525ccc204f64ad813c4ba77077468.tar.gz
Avoid editor error reporting using resource loader thread's call queues
-rw-r--r--core/io/resource_loader.h4
-rw-r--r--core/object/message_queue.h1
-rw-r--r--editor/gui/editor_toaster.cpp2
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 df6c494392..a662ebbfaf 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;
}