diff options
Diffstat (limited to 'services/surfaceflinger/Client.cpp')
| -rw-r--r-- | services/surfaceflinger/Client.cpp | 11 |
1 files changed, 10 insertions, 1 deletions
diff --git a/services/surfaceflinger/Client.cpp b/services/surfaceflinger/Client.cpp index 508be13c81..e54b4605a4 100644 --- a/services/surfaceflinger/Client.cpp +++ b/services/surfaceflinger/Client.cpp @@ -76,9 +76,18 @@ status_t Client::createSurface(const String8& name, uint32_t w, uint32_t h, Pixe uint32_t flags, const sp<IBinder>& parentHandle, LayerMetadata metadata, sp<IBinder>* handle, sp<IGraphicBufferProducer>* gbp) { + sp<Layer> parent = nullptr; + if (parentHandle != nullptr) { + auto layerHandle = reinterpret_cast<Layer::Handle*>(parentHandle.get()); + parent = layerHandle->owner.promote(); + if (parent == nullptr) { + return NAME_NOT_FOUND; + } + } + // We rely on createLayer to check permissions. return mFlinger->createLayer(name, this, w, h, format, flags, std::move(metadata), handle, gbp, - parentHandle); + &parent); } status_t Client::createWithSurfaceParent(const String8& name, uint32_t w, uint32_t h, |