diff options
author | 2019-12-17 08:50:33 -0800 | |
---|---|---|
committer | 2019-12-17 08:56:59 -0800 | |
commit | dfca3ecce2a0c045aa943fc4dfd6d2d33d43a1e0 (patch) | |
tree | 90d1f5881a4b8047afd88373add504e0dd1c77bf | |
parent | d0d28e3183d55c4a23d87b59681ceac3e3cf133d (diff) |
Fix callback drop
callbacks can be registered on any thread at any time. Do not clear
mCompletedTransactions unless there are no associated stats
Bug: 146345307, 141706317
Test: build, boot, libsurfaceflinger_unittest, SurfaceFlinger_test
Change-Id: I659604c6be578417ebac7baf125510cddfbfd794
-rw-r--r-- | services/surfaceflinger/TransactionCompletedThread.cpp | 10 |
1 files changed, 9 insertions, 1 deletions
diff --git a/services/surfaceflinger/TransactionCompletedThread.cpp b/services/surfaceflinger/TransactionCompletedThread.cpp index c15355d338..1e0719159e 100644 --- a/services/surfaceflinger/TransactionCompletedThread.cpp +++ b/services/surfaceflinger/TransactionCompletedThread.cpp @@ -320,8 +320,16 @@ void TransactionCompletedThread::threadMain() { interface_cast<ITransactionCompletedListener>(listenerStats.listener) ->onTransactionCompleted(listenerStats); listener->unlinkToDeath(mDeathRecipient); + if (transactionStatsDeque.empty()) { + completedTransactionsItr = + mCompletedTransactions.erase(completedTransactionsItr); + } else { + completedTransactionsItr++; + } + } else { + completedTransactionsItr = + mCompletedTransactions.erase(completedTransactionsItr); } - completedTransactionsItr = mCompletedTransactions.erase(completedTransactionsItr); } else { completedTransactionsItr++; } |