[Bf-blender-cvs] [165c5a52597] soc-2019-openxr: Fix possible OpenXR swapchain leak by using new unique_oxr_ptr

Julian Eisel noreply at git.blender.org
Wed Jul 17 14:05:23 CEST 2019


Commit: 165c5a52597e02ada0505a893fb97b7b724d0298
Author: Julian Eisel
Date:   Wed Jul 17 14:02:59 2019 +0200
Branches: soc-2019-openxr
https://developer.blender.org/rB165c5a52597e02ada0505a893fb97b7b724d0298

Fix possible OpenXR swapchain leak by using new unique_oxr_ptr

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

M	intern/ghost/intern/GHOST_XrSession.cpp

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

diff --git a/intern/ghost/intern/GHOST_XrSession.cpp b/intern/ghost/intern/GHOST_XrSession.cpp
index 986e119ea90..2e85c22faad 100644
--- a/intern/ghost/intern/GHOST_XrSession.cpp
+++ b/intern/ghost/intern/GHOST_XrSession.cpp
@@ -234,12 +234,12 @@ static std::vector<XrSwapchainImageBaseHeader *> swapchain_images_create(
   return images;
 }
 
-static XrSwapchain swapchain_create(const XrSession session,
-                                    GHOST_IXrGraphicsBinding *gpu_binding,
-                                    const XrViewConfigurationView *xr_view)
+static unique_oxr_ptr<XrSwapchain> swapchain_create(const XrSession session,
+                                                    GHOST_IXrGraphicsBinding *gpu_binding,
+                                                    const XrViewConfigurationView *xr_view)
 {
   XrSwapchainCreateInfo create_info{XR_TYPE_SWAPCHAIN_CREATE_INFO};
-  XrSwapchain swapchain;
+  unique_oxr_ptr<XrSwapchain> swapchain(xrDestroySwapchain);
   uint32_t format_count = 0;
   int64_t chosen_format;
 
@@ -264,7 +264,7 @@ static XrSwapchain swapchain_create(const XrSession session,
   create_info.faceCount = 1;
   create_info.arraySize = 1;
   create_info.mipCount = 1;
-  CHECK_XR(xrCreateSwapchain(session, &create_info, &swapchain),
+  CHECK_XR(swapchain.construct(xrCreateSwapchain, session, &create_info),
            "Failed to create OpenXR swapchain.");
 
   return swapchain;
@@ -289,13 +289,16 @@ void GHOST_XrSession::prepareDrawing()
            "Failed to get count of view configurations.");
 
   for (const XrViewConfigurationView &view : view_configs) {
-    XrSwapchain swapchain = swapchain_create(m_oxr->session, m_gpu_binding.get(), &view);
-    auto images = swapchain_images_create(swapchain, m_gpu_binding.get());
+    unique_oxr_ptr<XrSwapchain> swapchain = swapchain_create(
+        m_oxr->session, m_gpu_binding.get(), &view);
+    auto images = swapchain_images_create(swapchain.get(), m_gpu_binding.get());
 
     m_oxr->swapchain_image_width = view.recommendedImageRectWidth;
     m_oxr->swapchain_image_height = view.recommendedImageRectHeight;
-    m_oxr->swapchains.push_back(swapchain);
-    m_oxr->swapchain_images.insert(std::make_pair(swapchain, std::move(images)));
+    m_oxr->swapchains.push_back(swapchain.get());
+    m_oxr->swapchain_images.insert(std::make_pair(swapchain.get(), std::move(images)));
+
+    swapchain.release();
   }
 
   m_oxr->views.resize(view_count, {XR_TYPE_VIEW});



More information about the Bf-blender-cvs mailing list