fixup! [WebRTC] Make VideoCalls work in multiprocess architecture 20/295920/2
authorMichal Jurkiewicz <m.jurkiewicz@samsung.com>
Fri, 14 Jul 2023 07:51:08 +0000 (09:51 +0200)
committerm.jurkiewicz <m.jurkiewicz@samsung.com>
Mon, 17 Jul 2023 07:54:56 +0000 (09:54 +0200)
Use RAII to automatically decrease reference count of `tbm_bo` after
exporting fd to it.

Bug: https://cam.sprc.samsung.pl/browse/VDGAME-291
Change-Id: Ia55e61a9d2723e4ebc6888e4f7e8e3daf38328fc

tizen_src/chromium_impl/content/browser/media/tizen/browser_media_player_manager_efl_mojo_adapter.cc

index beaab8eda54894b0259557f04a3eb495315314ca..ab8ec51654084086961b3101c7e0eea89c17dc94 100644 (file)
 
 namespace content {
 
+namespace {
+struct TbmBODeleter {
+  void operator()(tbm_bo bo) { tbm_bo_unref(bo); }
+};
+using TbmBOType =
+    std::unique_ptr<std::remove_pointer<tbm_bo>::type, TbmBODeleter>;
+}  // namespace
+
 BrowserMediaPlayerManagerMojoAdapter::BrowserMediaPlayerManagerMojoAdapter()
     : buffer_mgr_(TbmMgrType(tbm_bufmgr_init(-1))) {}
 
@@ -69,8 +77,9 @@ bool BrowserMediaPlayerManagerMojoAdapter::OnNewTbmBufferAvailable(
   strides.reserve(tbm_handle.key_num);
 
   for (int i = 0; i < tbm_handle.key_num; ++i) {
-    fds.emplace_back(base::ScopedFD(
-        tbm_bo_export_fd(tbm_bo_import(buffer_mgr_.get(), tbm_handle.key[i]))));
+    auto tbm_bo =
+        TbmBOType(tbm_bo_import(buffer_mgr_.get(), tbm_handle.key[i]));
+    fds.emplace_back(base::ScopedFD(tbm_bo_export_fd(tbm_bo.get())));
     strides.push_back(static_cast<uint64_t>(tbm_handle.strides[i]));
   }
   handle->fds = std::move(fds);