Prevent crash when accessing `Node` Multiplayer from thread

(cherry picked from commit 7bd3a3a5e5)
This commit is contained in:
Ninni Pipping 2023-07-11 12:40:53 +02:00 committed by Yuri Sizov
parent 8f32e968b8
commit f54cbe6b76
1 changed files with 8 additions and 2 deletions

View File

@ -645,7 +645,8 @@ int Node::get_multiplayer_authority() const {
bool Node::is_multiplayer_authority() const { bool Node::is_multiplayer_authority() const {
ERR_FAIL_COND_V(!is_inside_tree(), false); ERR_FAIL_COND_V(!is_inside_tree(), false);
return get_multiplayer()->get_unique_id() == data.multiplayer_authority; Ref<MultiplayerAPI> api = get_multiplayer();
return api.is_valid() && (api->get_unique_id() == data.multiplayer_authority);
} }
/***** RPC CONFIG ********/ /***** 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) { 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); ERR_FAIL_COND_V(!is_inside_tree(), ERR_UNCONFIGURED);
return get_multiplayer()->rpcp(this, p_peer_id, p_method, p_arg, p_argcount);
Ref<MultiplayerAPI> api = get_multiplayer();
if (api.is_null()) {
return ERR_UNCONFIGURED;
}
return api->rpcp(this, p_peer_id, p_method, p_arg, p_argcount);
} }
Ref<MultiplayerAPI> Node::get_multiplayer() const { Ref<MultiplayerAPI> Node::get_multiplayer() const {