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

Commit b0022cc4 authored by Marissa Wall's avatar Marissa Wall
Browse files

blast: transaction ordering

This patch fixes two issues.

1) When a pending transactions is not found, don't try to use the iterator.
   This fixes a crash that happens when we are in a bad state.
2) When a transaction doesn't have any callbacks, don't try to send
   callbacks.

Bug: 130643588
Test: SurfaceFlinger_test
Change-Id: I6154c31dbf0b958683324c6b45e1a607691b84e8
parent ab54fb71
Loading
Loading
Loading
Loading
+1 −1
Original line number Diff line number Diff line
@@ -3617,7 +3617,7 @@ void SurfaceFlinger::applyTransactionState(const Vector<ComposerState>& states,
    }

    // If the state doesn't require a traversal and there are callbacks, send them now
    if (!(clientStateFlags & eTraversalNeeded)) {
    if (!(clientStateFlags & eTraversalNeeded) && !listenerCallbacks.empty()) {
        mTransactionCompletedThread.sendCallbacks();
    }
    transactionFlags |= clientStateFlags;
+3 −3
Original line number Diff line number Diff line
@@ -141,12 +141,12 @@ status_t TransactionCompletedThread::addPresentedCallbackHandles(
            } else {
                ALOGW("there are more latched callbacks than there were registered callbacks");
            }
        } else {
            ALOGW("cannot find listener in mPendingTransactions");
        }
            if (listener->second.size() == 0) {
                mPendingTransactions.erase(listener);
            }
        } else {
            ALOGW("cannot find listener in mPendingTransactions");
        }

        status_t err = addCallbackHandle(handle);
        if (err != NO_ERROR) {