Skip to content

Commit e49e73e

Browse files
committed
Merge pull request #110868 from brycehutchings/openxr_late_destruction_crash_fix
Fix late destruction access violation with OpenXRAPIExtension object
2 parents 121b1b7 + cd198f7 commit e49e73e

File tree

2 files changed

+11
-6
lines changed

2 files changed

+11
-6
lines changed

modules/openxr/extensions/openxr_extension_wrapper.cpp

Lines changed: 7 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -360,13 +360,16 @@ void *OpenXRExtensionWrapper::set_android_surface_swapchain_create_info_and_get_
360360
}
361361

362362
Ref<OpenXRAPIExtension> OpenXRExtensionWrapper::_gdextension_get_openxr_api() {
363-
static Ref<OpenXRAPIExtension> openxr_api_extension;
364-
if (unlikely(openxr_api_extension.is_null())) {
365-
openxr_api_extension.instantiate();
366-
}
367363
return openxr_api_extension;
368364
}
369365

370366
void OpenXRExtensionWrapper::_gdextension_register_extension_wrapper() {
371367
OpenXRAPI::register_extension_wrapper(this);
372368
}
369+
370+
OpenXRExtensionWrapper::OpenXRExtensionWrapper() {
371+
openxr_api_extension.instantiate();
372+
}
373+
374+
OpenXRExtensionWrapper::~OpenXRExtensionWrapper() {
375+
}

modules/openxr/extensions/openxr_extension_wrapper.h

Lines changed: 4 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -56,6 +56,8 @@ class OpenXRExtensionWrapper : public Object {
5656
protected:
5757
static void _bind_methods();
5858

59+
Ref<OpenXRAPIExtension> openxr_api_extension;
60+
5961
public:
6062
// `get_requested_extensions` should return a list of OpenXR extensions related to this extension.
6163
// If the bool * is a nullptr this extension is mandatory
@@ -180,8 +182,8 @@ class OpenXRExtensionWrapper : public Object {
180182

181183
GDVIRTUAL1R(bool, _on_event_polled, GDExtensionConstPtr<void>);
182184

183-
OpenXRExtensionWrapper() = default;
184-
virtual ~OpenXRExtensionWrapper() = default;
185+
OpenXRExtensionWrapper();
186+
virtual ~OpenXRExtensionWrapper() override;
185187
};
186188

187189
// `OpenXRGraphicsExtensionWrapper` implements specific logic for each supported graphics API.

0 commit comments

Comments
 (0)