summaryrefslogtreecommitdiffstats
path: root/main/main.cpp
diff options
context:
space:
mode:
authorBastiaan Olij <mux213@gmail.com>2021-09-28 12:15:00 +1000
committerBastiaan Olij <mux213@gmail.com>2021-09-28 12:25:15 +1000
commit0623d3676bd86a5eb4319b273642ad0504a49c33 (patch)
tree2a8c7497be42989b5183e5270c64a4ac9df4b646 /main/main.cpp
parent4f4f73b82fe00169f8776f3e41966abdb5c60349 (diff)
downloadredot-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.cpp9
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);