Loading graphics/composer/2.1/default/ComposerClient.cpp +14 −4 Original line number Original line Diff line number Diff line Loading @@ -299,10 +299,17 @@ Return<void> ComposerClient::createLayer(Display display, Error err = mHal.createLayer(display, &layer); Error err = mHal.createLayer(display, &layer); if (err == Error::NONE) { if (err == Error::NONE) { std::lock_guard<std::mutex> lock(mDisplayDataMutex); std::lock_guard<std::mutex> lock(mDisplayDataMutex); auto dpy = mDisplayData.find(display); auto dpy = mDisplayData.find(display); // The display entry may have already been removed by onHotplug. if (dpy != mDisplayData.end()) { auto ly = dpy->second.Layers.emplace(layer, LayerBuffers()).first; auto ly = dpy->second.Layers.emplace(layer, LayerBuffers()).first; ly->second.Buffers.resize(bufferSlotCount); ly->second.Buffers.resize(bufferSlotCount); } else { err = Error::BAD_DISPLAY; // Note: We do not destroy the layer on this error as the hotplug // disconnect invalidates the display id. The implementation should // ensure all layers for the display are destroyed. } } } hidl_cb(err, layer); hidl_cb(err, layer); Loading @@ -316,8 +323,11 @@ Return<Error> ComposerClient::destroyLayer(Display display, Layer layer) std::lock_guard<std::mutex> lock(mDisplayDataMutex); std::lock_guard<std::mutex> lock(mDisplayDataMutex); auto dpy = mDisplayData.find(display); auto dpy = mDisplayData.find(display); // The display entry may have already been removed by onHotplug. if (dpy != mDisplayData.end()) { dpy->second.Layers.erase(layer); dpy->second.Layers.erase(layer); } } } return err; return err; } } Loading Loading
graphics/composer/2.1/default/ComposerClient.cpp +14 −4 Original line number Original line Diff line number Diff line Loading @@ -299,10 +299,17 @@ Return<void> ComposerClient::createLayer(Display display, Error err = mHal.createLayer(display, &layer); Error err = mHal.createLayer(display, &layer); if (err == Error::NONE) { if (err == Error::NONE) { std::lock_guard<std::mutex> lock(mDisplayDataMutex); std::lock_guard<std::mutex> lock(mDisplayDataMutex); auto dpy = mDisplayData.find(display); auto dpy = mDisplayData.find(display); // The display entry may have already been removed by onHotplug. if (dpy != mDisplayData.end()) { auto ly = dpy->second.Layers.emplace(layer, LayerBuffers()).first; auto ly = dpy->second.Layers.emplace(layer, LayerBuffers()).first; ly->second.Buffers.resize(bufferSlotCount); ly->second.Buffers.resize(bufferSlotCount); } else { err = Error::BAD_DISPLAY; // Note: We do not destroy the layer on this error as the hotplug // disconnect invalidates the display id. The implementation should // ensure all layers for the display are destroyed. } } } hidl_cb(err, layer); hidl_cb(err, layer); Loading @@ -316,8 +323,11 @@ Return<Error> ComposerClient::destroyLayer(Display display, Layer layer) std::lock_guard<std::mutex> lock(mDisplayDataMutex); std::lock_guard<std::mutex> lock(mDisplayDataMutex); auto dpy = mDisplayData.find(display); auto dpy = mDisplayData.find(display); // The display entry may have already been removed by onHotplug. if (dpy != mDisplayData.end()) { dpy->second.Layers.erase(layer); dpy->second.Layers.erase(layer); } } } return err; return err; } } Loading