Merge "blast: transaction ordering" into qt-dev
diff --git a/services/surfaceflinger/SurfaceFlinger.cpp b/services/surfaceflinger/SurfaceFlinger.cpp
index 42ea363..ad58717 100644
--- a/services/surfaceflinger/SurfaceFlinger.cpp
+++ b/services/surfaceflinger/SurfaceFlinger.cpp
@@ -3620,7 +3620,7 @@
     }
 
     // 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;
diff --git a/services/surfaceflinger/TransactionCompletedThread.cpp b/services/surfaceflinger/TransactionCompletedThread.cpp
index 34df606..b1bf4e2 100644
--- a/services/surfaceflinger/TransactionCompletedThread.cpp
+++ b/services/surfaceflinger/TransactionCompletedThread.cpp
@@ -141,12 +141,12 @@
             } else {
                 ALOGW("there are more latched callbacks than there were registered callbacks");
             }
+            if (listener->second.size() == 0) {
+                mPendingTransactions.erase(listener);
+            }
         } else {
             ALOGW("cannot find listener in mPendingTransactions");
         }
-        if (listener->second.size() == 0) {
-            mPendingTransactions.erase(listener);
-        }
 
         status_t err = addCallbackHandle(handle);
         if (err != NO_ERROR) {