diff options
author | Bastiaan Olij <mux213@gmail.com> | 2021-09-28 12:15:00 +1000 |
---|---|---|
committer | Bastiaan Olij <mux213@gmail.com> | 2021-09-28 12:25:15 +1000 |
commit | 0623d3676bd86a5eb4319b273642ad0504a49c33 (patch) | |
tree | 2a8c7497be42989b5183e5270c64a4ac9df4b646 /main/main.cpp | |
parent | 4f4f73b82fe00169f8776f3e41966abdb5c60349 (diff) | |
download | redot-engine-0623d3676bd86a5eb4319b273642ad0504a49c33.tar.gz |
Improve unregistering XR interfaces so we don't get crashes in GDExtensions by destroying the XRServer too early
Diffstat (limited to 'main/main.cpp')
-rw-r--r-- | main/main.cpp | 9 |
1 files changed, 7 insertions, 2 deletions
diff --git a/main/main.cpp b/main/main.cpp index fc24010e7b..d512c41e7a 100644 --- a/main/main.cpp +++ b/main/main.cpp @@ -2689,8 +2689,9 @@ void Main::cleanup(bool p_force) { rendering_server->global_variables_clear(); if (xr_server) { - // cleanup now before we pull the rug from underneath... - memdelete(xr_server); + // Now that we're unregistering properly in plugins we need to keep access to xr_server for a little longer + // We do however unset our primary interface + xr_server->set_primary_interface(Ref<XRInterface>()); } unregister_driver_types(); @@ -2706,6 +2707,10 @@ void Main::cleanup(bool p_force) { unregister_scene_types(); unregister_server_types(); + if (xr_server) { + memdelete(xr_server); + } + if (audio_server) { audio_server->finish(); memdelete(audio_server); |