diff --git a/services/surfaceflinger/Layer.cpp b/services/surfaceflinger/Layer.cpp
index 4f4a897..5707c67 100644
--- a/services/surfaceflinger/Layer.cpp
+++ b/services/surfaceflinger/Layer.cpp
@@ -179,9 +179,23 @@
     if (mDrawingState.sidebandStream != nullptr) {
         mFlinger->mTunnelModeEnabledReporter->decrementTunnelModeCount();
     }
+
     if (mHadClonedChild) {
         mFlinger->mNumClones--;
     }
+
+    for (auto const& child : mCurrentChildren) {
+        if (child->mCurrentParent == this) child->mCurrentParent = nullptr;
+        if (child->mDrawingParent == this) {
+            child->mDrawingParent = nullptr;
+        }
+    }
+    for (auto const& child : mDrawingChildren) {
+        if (child->mCurrentParent == this) child->mCurrentParent = nullptr;
+        if (child->mDrawingParent == this) {
+            child->mDrawingParent = nullptr;
+        }
+    }
 }
 
 LayerCreationArgs::LayerCreationArgs(SurfaceFlinger* flinger, sp<Client> client, std::string name,
@@ -237,7 +251,7 @@
 }
 
 sp<Layer> Layer::getRootLayer() {
-    sp<Layer> parent = getParent();
+    auto parent = getParent();
     if (parent == nullptr) {
         return this;
     }
@@ -662,7 +676,7 @@
         return true;
     }
 
-    const auto p = mDrawingParent.promote();
+    const auto p = mDrawingParent;
     return (p != nullptr) ? p->isSecure() : false;
 }
 
@@ -845,7 +859,7 @@
     if (getDrawingState().isTrustedOverlay) {
         return true;
     }
-    const auto& p = mDrawingParent.promote();
+    const auto p = mDrawingParent;
     return (p != nullptr) && p->isTrustedOverlay();
 }
 
@@ -1025,7 +1039,7 @@
         return mDrawingState.frameRateSelectionPriority;
     }
     // If not, search whether its parents have it set.
-    sp<Layer> parent = getParent();
+    auto parent = getParent();
     if (parent != nullptr) {
         return parent->getFrameRateSelectionPriority();
     }
@@ -1038,10 +1052,11 @@
 };
 
 ui::LayerStack Layer::getLayerStack() const {
-    if (const auto parent = mDrawingParent.promote()) {
-        return parent->getLayerStack();
+    auto p = mDrawingParent;
+    if (p == nullptr) {
+        return getDrawingState().layerStack;
     }
-    return getDrawingState().layerStack;
+    return mDrawingParent->getLayerStack();
 }
 
 bool Layer::setShadowRadius(float shadowRadius) {
@@ -1086,7 +1101,7 @@
         return mDrawingState.stretchEffect;
     }
 
-    sp<Layer> parent = getParent();
+    auto parent = mDrawingParent;
     if (parent != nullptr) {
         auto effect = parent->getStretchEffect();
         if (effect.hasEffect()) {
@@ -1301,7 +1316,7 @@
 
 bool Layer::isHiddenByPolicy() const {
     const State& s(mDrawingState);
-    const auto& parent = mDrawingParent.promote();
+    auto parent = mDrawingParent;
     if (parent != nullptr && parent->isHiddenByPolicy()) {
         return true;
     }
@@ -1348,7 +1363,7 @@
     LayerDebugInfo info;
     const State& ds = getDrawingState();
     info.mName = getName();
-    sp<Layer> parent = mDrawingParent.promote();
+    auto parent = mDrawingParent;
     info.mParentName = parent ? parent->getName() : "none"s;
     info.mType = getType();
     info.mTransparentRegion = ds.activeTransparentRegion_legacy;
@@ -1580,7 +1595,7 @@
 
 void Layer::setChildrenDrawingParent(const sp<Layer>& newParent) {
     for (const sp<Layer>& child : mDrawingChildren) {
-        child->mDrawingParent = newParent;
+        child->mDrawingParent = newParent.get();
         child->computeBounds(newParent->mBounds, newParent->mEffectiveTransform,
                              newParent->mEffectiveShadowRadius);
     }
@@ -1600,7 +1615,7 @@
         }
     }
 
-    sp<Layer> parent = getParent();
+    auto parent = getParent();
     if (parent != nullptr) {
         parent->removeChild(this);
     }
@@ -1635,7 +1650,7 @@
 
 mat4 Layer::getColorTransform() const {
     mat4 colorTransform = mat4(getDrawingState().colorTransform);
-    if (sp<Layer> parent = mDrawingParent.promote(); parent != nullptr) {
+    if (auto parent = mDrawingParent; parent != nullptr) {
         colorTransform = parent->getColorTransform() * colorTransform;
     }
     return colorTransform;
@@ -1643,7 +1658,7 @@
 
 bool Layer::hasColorTransform() const {
     bool hasColorTransform = getDrawingState().hasColorTransform;
-    if (sp<Layer> parent = mDrawingParent.promote(); parent != nullptr) {
+    if (auto parent = mDrawingParent; parent != nullptr) {
         hasColorTransform = hasColorTransform || parent->hasColorTransform();
     }
     return hasColorTransform;
@@ -1657,7 +1672,7 @@
 }
 
 void Layer::setParent(const sp<Layer>& layer) {
-    mCurrentParent = layer;
+    mCurrentParent = layer.get();
 }
 
 int32_t Layer::getZ(LayerVector::StateSet) const {
@@ -1861,7 +1876,7 @@
 }
 
 half Layer::getAlpha() const {
-    const auto& p = mDrawingParent.promote();
+    auto p = mDrawingParent;
 
     half parentAlpha = (p != nullptr) ? p->getAlpha() : 1.0_hf;
     return parentAlpha * getDrawingState().color.a;
@@ -1872,7 +1887,7 @@
     if (fixedTransformHint != ui::Transform::ROT_INVALID) {
         return fixedTransformHint;
     }
-    const auto& p = mCurrentParent.promote();
+    auto p = mCurrentParent;
     if (!p) return fixedTransformHint;
     return p->getFixedTransformHint();
 }
@@ -1883,7 +1898,7 @@
 }
 
 int32_t Layer::getBackgroundBlurRadius() const {
-    const auto& p = mDrawingParent.promote();
+    auto p = mDrawingParent;
 
     half parentAlpha = (p != nullptr) ? p->getAlpha() : 1.0_hf;
     return parentAlpha * getDrawingState().backgroundBlurRadius;
@@ -1901,9 +1916,8 @@
 Layer::RoundedCornerState Layer::getRoundedCornerState() const {
     // Get parent settings
     RoundedCornerState parentSettings;
-    const auto& parent = mDrawingParent.promote();
-    if (parent != nullptr) {
-        parentSettings = parent->getRoundedCornerState();
+    if (mDrawingParent != nullptr) {
+        parentSettings = mDrawingParent->getRoundedCornerState();
         if (parentSettings.radius > 0) {
             ui::Transform t = getActiveTransform(getDrawingState());
             t = t.inverse();
@@ -2119,7 +2133,7 @@
         LayerProtoHelper::writeToProtoDeprecated(requestedTransform,
                                                  layerInfo->mutable_requested_transform());
 
-        auto parent = useDrawing ? mDrawingParent.promote() : mCurrentParent.promote();
+        auto parent = useDrawing ? mDrawingParent : mCurrentParent;
         if (parent != nullptr) {
             layerInfo->set_parent(parent->sequence);
         } else {
@@ -2266,9 +2280,9 @@
 }
 
 void Layer::fillTouchOcclusionMode(WindowInfo& info) {
-    sp<Layer> p = this;
+    Layer* p = this;
     while (p != nullptr && !p->hasInputInfo()) {
-        p = p->mDrawingParent.promote();
+        p = p->mDrawingParent;
     }
     if (p != nullptr) {
         info.touchOcclusionMode = p->mDrawingState.inputInfo.touchOcclusionMode;
@@ -2280,9 +2294,8 @@
     if (mode == gui::DropInputMode::ALL) {
         return mode;
     }
-    sp<Layer> parent = mDrawingParent.promote();
-    if (parent) {
-        gui::DropInputMode parentMode = parent->getDropInputMode();
+    if (mDrawingParent) {
+        gui::DropInputMode parentMode = mDrawingParent->getDropInputMode();
         if (parentMode != gui::DropInputMode::NONE) {
             return parentMode;
         }
@@ -2309,8 +2322,7 @@
     }
 
     // Check if the parent has set an alpha on the layer
-    sp<Layer> parent = mDrawingParent.promote();
-    if (parent && parent->getAlpha() != 1.0_hf) {
+    if (mDrawingParent && mDrawingParent->getAlpha() != 1.0_hf) {
         info.inputFeatures |= WindowInfo::Feature::DROP_INPUT;
         ALOGV("Dropping input for %s as requested by policy because alpha=%f", getDebugName(),
               static_cast<float>(getAlpha()));
@@ -2408,10 +2420,10 @@
     if (mClonedChild != nullptr) {
         return this;
     }
-    if (mDrawingParent == nullptr || mDrawingParent.promote() == nullptr) {
+    if (mDrawingParent == nullptr) {
         return nullptr;
     }
-    return mDrawingParent.promote()->getClonedRoot();
+    return mDrawingParent->getClonedRoot();
 }
 
 bool Layer::hasInputInfo() const {
@@ -2598,8 +2610,7 @@
         return true;
     }
 
-    sp<Layer> parent = mDrawingParent.promote();
-    return parent && parent->isInternalDisplayOverlay();
+    return mDrawingParent && mDrawingParent->isInternalDisplayOverlay();
 }
 
 void Layer::setClonedChild(const sp<Layer>& clonedChild) {
