OSDN Git Service

drm_hwcomposer: Free resources in HookDevClose()
authorRoman Stratiienko <roman.o.stratiienko@globallogic.com>
Thu, 23 Dec 2021 10:59:20 +0000 (12:59 +0200)
committerRoman Stratiienko <roman.o.stratiienko@globallogic.com>
Wed, 12 Jan 2022 08:33:55 +0000 (10:33 +0200)
Composer service won't free memory for us, see [1].

[1]: https://cs.android.com/android/platform/superproject/+/master:hardware/interfaces/graphics/composer/2.1/utils/passthrough/include/composer-passthrough/2.1/HwcHal.h;l=83;drc=7ae8af54b32a7eb827dbf9f2aedb647c9525a3d9
Signed-off-by: Roman Stratiienko <roman.o.stratiienko@globallogic.com>
DrmHwcTwo.cpp

index 291bbdd..45fb958 100644 (file)
@@ -1285,7 +1285,10 @@ void DrmHwcTwo::HandleHotplugUEvent() {
 }
 
 // static
-int DrmHwcTwo::HookDevClose(hw_device_t * /*dev*/) {
+int DrmHwcTwo::HookDevClose(hw_device_t *dev) {
+  // NOLINTNEXTLINE (cppcoreguidelines-pro-type-reinterpret-cast): Safe
+  auto *hwc2_dev = reinterpret_cast<hwc2_device_t *>(dev);
+  std::unique_ptr<DrmHwcTwo> ctx(toDrmHwcTwo(hwc2_dev));
   return 0;
 }
 
@@ -1576,8 +1579,8 @@ int DrmHwcTwo::HookDevOpen(const struct hw_module_t *module, const char *name,
   }
 
   ctx->common.module = (hw_module_t *)module;
-  *dev = &ctx->common;
-  ctx.release();  // NOLINT(bugprone-unused-return-value)
+  *dev = &ctx.release()->common;
+
   return 0;
 }
 }  // namespace android