drm_hwcomposer: Introduce main lock
Further development will require more asynchronous processing.
Introduce project-wide single mutex for these purposes.
Use it instead for callback handling instead of callback_lock.
Signed-off-by: Roman Stratiienko <roman.o.stratiienko@globallogic.com>
diff --git a/hwc2_device/hwc2_device.cpp b/hwc2_device/hwc2_device.cpp
index ebf7eeb..6d258e8 100644
--- a/hwc2_device/hwc2_device.cpp
+++ b/hwc2_device/hwc2_device.cpp
@@ -63,15 +63,18 @@
static T DeviceHook(hwc2_device_t *dev, Args... args) {
ALOGV("Device hook: %s", GetFuncName(__PRETTY_FUNCTION__).c_str());
DrmHwcTwo *hwc = ToDrmHwcTwo(dev);
+ const std::lock_guard<std::mutex> lock(hwc->GetResMan().GetMainLock());
return static_cast<T>(((*hwc).*func)(std::forward<Args>(args)...));
}
template <typename HookType, HookType func, typename... Args>
static int32_t DisplayHook(hwc2_device_t *dev, hwc2_display_t display_handle,
Args... args) {
- HwcDisplay *display = DrmHwcTwo::GetDisplay(ToDrmHwcTwo(dev), display_handle);
ALOGV("Display #%" PRIu64 " hook: %s", display_handle,
GetFuncName(__PRETTY_FUNCTION__).c_str());
+ DrmHwcTwo *hwc = ToDrmHwcTwo(dev);
+ const std::lock_guard<std::mutex> lock(hwc->GetResMan().GetMainLock());
+ HwcDisplay *display = DrmHwcTwo::GetDisplay(hwc, display_handle);
if (!display)
return static_cast<int32_t>(HWC2::Error::BadDisplay);
@@ -81,9 +84,11 @@
template <typename HookType, HookType func, typename... Args>
static int32_t LayerHook(hwc2_device_t *dev, hwc2_display_t display_handle,
hwc2_layer_t layer_handle, Args... args) {
- HwcDisplay *display = DrmHwcTwo::GetDisplay(ToDrmHwcTwo(dev), display_handle);
ALOGV("Display #%" PRIu64 " Layer: #%" PRIu64 " hook: %s", display_handle,
layer_handle, GetFuncName(__PRETTY_FUNCTION__).c_str());
+ DrmHwcTwo *hwc = ToDrmHwcTwo(dev);
+ const std::lock_guard<std::mutex> lock(hwc->GetResMan().GetMainLock());
+ HwcDisplay *display = DrmHwcTwo::GetDisplay(hwc, display_handle);
if (!display)
return static_cast<int32_t>(HWC2::Error::BadDisplay);