From 7bd3a3a5e539d22302ce388f6bcae64f2e78f7c8 Mon Sep 17 00:00:00 2001 From: Ninni Pipping Date: Tue, 11 Jul 2023 12:40:53 +0200 Subject: [PATCH] Prevent crash when accessing `Node` Multiplayer from thread --- scene/main/node.cpp | 10 ++++++++-- 1 file changed, 8 insertions(+), 2 deletions(-) diff --git a/scene/main/node.cpp b/scene/main/node.cpp index 6b18e47f2df4..adc565285a20 100644 --- a/scene/main/node.cpp +++ b/scene/main/node.cpp @@ -645,7 +645,8 @@ int Node::get_multiplayer_authority() const { bool Node::is_multiplayer_authority() const { ERR_FAIL_COND_V(!is_inside_tree(), false); - return get_multiplayer()->get_unique_id() == data.multiplayer_authority; + Ref api = get_multiplayer(); + return api.is_valid() && (api->get_unique_id() == data.multiplayer_authority); } /***** RPC CONFIG ********/ @@ -724,7 +725,12 @@ Error Node::_rpc_id_bind(const Variant **p_args, int p_argcount, Callable::CallE Error Node::rpcp(int p_peer_id, const StringName &p_method, const Variant **p_arg, int p_argcount) { ERR_FAIL_COND_V(!is_inside_tree(), ERR_UNCONFIGURED); - return get_multiplayer()->rpcp(this, p_peer_id, p_method, p_arg, p_argcount); + + Ref api = get_multiplayer(); + if (api.is_null()) { + return ERR_UNCONFIGURED; + } + return api->rpcp(this, p_peer_id, p_method, p_arg, p_argcount); } Ref Node::get_multiplayer() const {