summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
author Valerie Hau <vhau@google.com> 2019-12-17 08:50:33 -0800
committer Valerie Hau <vhau@google.com> 2019-12-17 08:56:59 -0800
commitdfca3ecce2a0c045aa943fc4dfd6d2d33d43a1e0 (patch)
tree90d1f5881a4b8047afd88373add504e0dd1c77bf
parentd0d28e3183d55c4a23d87b59681ceac3e3cf133d (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.cpp10
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++;
}