diff options
| -rw-r--r-- | services/surfaceflinger/Client.cpp | 9 | ||||
| -rw-r--r-- | services/surfaceflinger/Client.h | 2 | ||||
| -rw-r--r-- | services/surfaceflinger/Layer.cpp | 4 |
3 files changed, 10 insertions, 5 deletions
diff --git a/services/surfaceflinger/Client.cpp b/services/surfaceflinger/Client.cpp index c90024b863..077469b5e1 100644 --- a/services/surfaceflinger/Client.cpp +++ b/services/surfaceflinger/Client.cpp @@ -65,9 +65,14 @@ Client::~Client() } } -void Client::setParentLayer(const sp<Layer>& parentLayer) { +void Client::updateParent(const sp<Layer>& parentLayer) { Mutex::Autolock _l(mLock); - mParentLayer = parentLayer; + + // If we didn't ever have a parent, then we must instead be + // relying on permissions and we never need a parent. + if (mParentLayer != nullptr) { + mParentLayer = parentLayer; + } } sp<Layer> Client::getParentLayer(bool* outParentDied) const { diff --git a/services/surfaceflinger/Client.h b/services/surfaceflinger/Client.h index c7df9f780f..49437ed7fd 100644 --- a/services/surfaceflinger/Client.h +++ b/services/surfaceflinger/Client.h @@ -51,7 +51,7 @@ public: sp<Layer> getLayerUser(const sp<IBinder>& handle) const; - void setParentLayer(const sp<Layer>& parentLayer); + void updateParent(const sp<Layer>& parentLayer); private: // ISurfaceComposerClient interface diff --git a/services/surfaceflinger/Layer.cpp b/services/surfaceflinger/Layer.cpp index 66ad2f60a6..bbc974de2f 100644 --- a/services/surfaceflinger/Layer.cpp +++ b/services/surfaceflinger/Layer.cpp @@ -1589,7 +1589,7 @@ bool Layer::reparentChildren(const sp<IBinder>& newParentHandle) { sp<Client> client(child->mClientRef.promote()); if (client != nullptr) { - client->setParentLayer(newParent); + client->updateParent(newParent); } } mCurrentChildren.clear(); @@ -1625,7 +1625,7 @@ bool Layer::reparent(const sp<IBinder>& newParentHandle) { sp<Client> newParentClient(newParent->mClientRef.promote()); if (client != newParentClient) { - client->setParentLayer(newParent); + client->updateParent(newParent); } return true; |