Donate to e Foundation | Murena handsets with /e/OS | Own a part of Murena! Learn more

Commit 1d3df546 authored by Steve Pfetsch's avatar Steve Pfetsch
Browse files

services: surfaceflinger: ASAN fix

Move layer removal to the main thread, while the display is on.

Bug: 30281222
Change-Id: Id9f956c1e626819734868340e7fa12abf257b702
parent f920891b
Loading
Loading
Loading
Loading
+8 −9
Original line number Diff line number Diff line
@@ -1768,9 +1768,12 @@ void SurfaceFlinger::updateCursorAsync()

void SurfaceFlinger::commitTransaction()
{
    if (!mLayersPendingRemoval.isEmpty()) {
    sp<const DisplayDevice> hw = getDefaultDisplayDevice();

    if (!mLayersPendingRemoval.isEmpty() && hw->isDisplayOn()) {
        // Notify removed layers now that they can't be drawn from
        for (size_t i = 0; i < mLayersPendingRemoval.size(); i++) {
            mCurrentState.layersSortedByZ.remove(mLayersPendingRemoval[i]);
            recordBufferingStats(mLayersPendingRemoval[i]->getName().string(),
                    mLayersPendingRemoval[i]->getOccupancyHistory(true));
            mLayersPendingRemoval[i]->onRemoved();
@@ -2217,15 +2220,11 @@ status_t SurfaceFlinger::removeLayer(const wp<Layer>& weakLayer) {
        return NO_ERROR;
    }

    ssize_t index = mCurrentState.layersSortedByZ.remove(layer);
    if (index >= 0) {
    mLayersPendingRemoval.push(layer);
    mLayersRemoved = true;
    setTransactionFlags(eTransactionNeeded);
    return NO_ERROR;
}
    return status_t(index);
}

uint32_t SurfaceFlinger::peekTransactionFlags(uint32_t /* flags */) {
    return android_atomic_release_load(&mTransactionFlags);