Revert "composer: Release locks before callbacks"
This reverts commit c1a6cb5ba9c3b5c02c77c77d9ce2d2a74d408ed9.
Change-Id: Id197179a80b09a7f91599b0ceeff94717785a741
diff --git a/composer/hwc_session.cpp b/composer/hwc_session.cpp
index 8f40f99..ae94e25 100644
--- a/composer/hwc_session.cpp
+++ b/composer/hwc_session.cpp
@@ -3060,10 +3060,7 @@
DLOGI("Hotplugging builtin display, sdm id = %d, client id = %d", info.display_id,
UINT32(client_id));
- // Free lock before the callback
- primary_display_lock_.Unlock();
callbacks_.Hotplug(client_id, HWC2::Connection::Connected);
- primary_display_lock_.Lock();
break;
}
}
@@ -3072,37 +3069,34 @@
}
int HWCSession::HandlePluggableDisplays(bool delay_hotplug) {
+ SCOPE_LOCK(pluggable_handler_lock_);
+ if (null_display_mode_) {
+ DLOGW("Skipped pluggable display handling in null-display mode");
+ return 0;
+ }
+
+ hwc2_display_t virtual_display_index = (hwc2_display_t)GetDisplayIndex(qdutils::DISPLAY_VIRTUAL);
+ std::bitset<kSecureMax> secure_sessions = 0;
+
+ hwc2_display_t active_builtin_disp_id = GetActiveBuiltinDisplay();
+ if (active_builtin_disp_id < HWCCallbacks::kNumDisplays) {
+ Locker::ScopeLock lock_a(locker_[active_builtin_disp_id]);
+ hwc_display_[active_builtin_disp_id]->GetActiveSecureSession(&secure_sessions);
+ }
+
+ if (secure_sessions.any() || hwc_display_[virtual_display_index]) {
+ // Defer hotplug handling.
+ DLOGI("Marking hotplug pending...");
+ pending_hotplug_event_ = kHotPlugEvent;
+ return -EAGAIN;
+ }
+
+ DLOGI("Handling hotplug...");
HWDisplaysInfo hw_displays_info = {};
- {
- SCOPE_LOCK(pluggable_handler_lock_);
- if (null_display_mode_) {
- DLOGW("Skipped pluggable display handling in null-display mode");
- return 0;
- }
-
- hwc2_display_t virtual_display_index =
- (hwc2_display_t)GetDisplayIndex(qdutils::DISPLAY_VIRTUAL);
- std::bitset<kSecureMax> secure_sessions = 0;
-
- hwc2_display_t active_builtin_disp_id = GetActiveBuiltinDisplay();
- if (active_builtin_disp_id < HWCCallbacks::kNumDisplays) {
- Locker::ScopeLock lock_a(locker_[active_builtin_disp_id]);
- hwc_display_[active_builtin_disp_id]->GetActiveSecureSession(&secure_sessions);
- }
-
- if (secure_sessions.any() || hwc_display_[virtual_display_index]) {
- // Defer hotplug handling.
- DLOGI("Marking hotplug pending...");
- pending_hotplug_event_ = kHotPlugEvent;
- return -EAGAIN;
- }
-
- DLOGI("Handling hotplug...");
- DisplayError error = core_intf_->GetDisplaysStatus(&hw_displays_info);
- if (error != kErrorNone) {
- DLOGE("Failed to get connected display list. Error = %d", error);
- return -EINVAL;
- }
+ DisplayError error = core_intf_->GetDisplaysStatus(&hw_displays_info);
+ if (error != kErrorNone) {
+ DLOGE("Failed to get connected display list. Error = %d", error);
+ return -EINVAL;
}
int status = HandleDisconnectedDisplays(&hw_displays_info);