[Bf-blender-cvs] [69bfe4b4c3a] vr_scene_inspection: Fix memory leak when closing Blender with running VR session

Julian Eisel noreply at git.blender.org
Wed Dec 11 19:07:42 CET 2019


Commit: 69bfe4b4c3a2fe3f9d9df330f82d7f731f7022fb
Author: Julian Eisel
Date:   Wed Dec 11 19:06:24 2019 +0100
Branches: vr_scene_inspection
https://developer.blender.org/rB69bfe4b4c3a2fe3f9d9df330f82d7f731f7022fb

Fix memory leak when closing Blender with running VR session

===================================================================

M	source/blender/windowmanager/intern/wm.c
M	source/blender/windowmanager/intern/wm_xr.c
M	source/blender/windowmanager/wm.h

===================================================================

diff --git a/source/blender/windowmanager/intern/wm.c b/source/blender/windowmanager/intern/wm.c
index 4e7d7eead6f..8cf08bf42bb 100644
--- a/source/blender/windowmanager/intern/wm.c
+++ b/source/blender/windowmanager/intern/wm.c
@@ -375,7 +375,7 @@ void wm_close_and_free(bContext *C, wmWindowManager *wm)
   }
 
 #ifdef WITH_OPENXR
-  wm_xr_context_destroy(wm);
+  wm_xr_data_destroy(wm);
 #endif
 
   BLI_freelistN(&wm->paintcursors);
diff --git a/source/blender/windowmanager/intern/wm_xr.c b/source/blender/windowmanager/intern/wm_xr.c
index 8888863ccff..9b7d616b6f9 100644
--- a/source/blender/windowmanager/intern/wm_xr.c
+++ b/source/blender/windowmanager/intern/wm_xr.c
@@ -59,6 +59,7 @@
 #include "wm_surface.h"
 #include "wm_window.h"
 
+void wm_xr_runtime_session_state_free(struct bXrRuntimeSessionState *state);
 void wm_xr_draw_view(const GHOST_XrDrawViewInfo *, void *);
 void *wm_xr_session_gpu_binding_context_create(GHOST_TXrGraphicsBinding);
 void wm_xr_session_gpu_binding_context_destroy(GHOST_TXrGraphicsBinding, void *);
@@ -169,11 +170,14 @@ bool wm_xr_context_ensure(bContext *C, wmWindowManager *wm)
   return true;
 }
 
-void wm_xr_context_destroy(wmWindowManager *wm)
+void wm_xr_data_destroy(wmWindowManager *wm)
 {
   if (wm->xr.context != NULL) {
     GHOST_XrContextDestroy(wm->xr.context);
   }
+  if (wm->xr.session_state != NULL) {
+    wm_xr_runtime_session_state_free(wm->xr.session_state);
+  }
 }
 
 /** \} */ /* XR-Context */
@@ -200,7 +204,7 @@ static bXrRuntimeSessionState *wm_xr_runtime_session_state_create(const Scene *s
   return state;
 }
 
-static void wm_xr_runtime_session_state_free(bXrRuntimeSessionState *state)
+void wm_xr_runtime_session_state_free(bXrRuntimeSessionState *state)
 {
   MEM_SAFE_FREE(state);
 }
diff --git a/source/blender/windowmanager/wm.h b/source/blender/windowmanager/wm.h
index 931ac58d50e..bfcfda6fabe 100644
--- a/source/blender/windowmanager/wm.h
+++ b/source/blender/windowmanager/wm.h
@@ -105,7 +105,7 @@ void wm_draw_offscreen_texture_parameters(struct GPUOffScreen *offscreen);
 #ifdef WITH_OPENXR
 /* wm_xr.c */
 bool wm_xr_context_ensure(bContext *C, wmWindowManager *wm);
-void wm_xr_context_destroy(wmWindowManager *wm);
+void wm_xr_data_destroy(wmWindowManager *wm);
 void wm_xr_session_toggle(bContext *C, void *xr_context);
 #endif



More information about the Bf-blender-cvs mailing list