OSDN Git Service

Solve the composer service NULL pointer crash
authorRandy Xu <randy.xu@intel.com>
Wed, 5 Jul 2017 06:18:38 +0000 (14:18 +0800)
committerGaurav Sarode <sgaurav@google.com>
Tue, 3 Oct 2017 22:48:52 +0000 (15:48 -0700)
The callback functions are set nullptr in ComposerClient::~ComposerClient()
./composer/2.1/default/ComposerClient.cpp:160:    mHal.enableCallback(false)

However, the callbacks are still used in hwc2on1adaptor, it will cause segment fault.

Bug: 64650599

Test: adb shell stop

Change-Id: I92e6a6b42418e987a7ead041f2d95c194b6a16e8
Signed-off-by: Randy Xu <randy.xu@intel.com>
Signed-off-by: Qiming Shi <qiming.shi@intel.com>
Signed-off-by: Yong Yao <yong.yao@intel.com>
Signed-off-by: Gaurav Sarode <sgaurav@google.com>
libs/hwc2on1adapter/HWC2On1Adapter.cpp

index e1b9a8a..77f06bb 100644 (file)
@@ -426,7 +426,13 @@ Error HWC2On1Adapter::registerCallback(Callback descriptor,
 
     std::unique_lock<std::recursive_timed_mutex> lock(mStateMutex);
 
-    mCallbacks[descriptor] = {callbackData, pointer};
+    if (pointer != nullptr) {
+        mCallbacks[descriptor] = {callbackData, pointer};
+    } else {
+        ALOGI("unregisterCallback(%s)", to_string(descriptor).c_str());
+        mCallbacks.erase(descriptor);
+        return Error::None;
+    }
 
     bool hasPendingInvalidate = false;
     std::vector<hwc2_display_t> displayIds;