From fb11dc74c89f512e0f93e167dfeb2664babdba68 Mon Sep 17 00:00:00 2001 From: Sudheer Shanka Date: Thu, 19 Mar 2020 11:56:50 -0700 Subject: Ensure waitForIdle() waits until pending messages are handled. Fixes: 151960323 Test: atest --test-mapping apex/blobstore Change-Id: If5156ac22e0a5644bc6d931bed8521824095aa2b --- .../java/com/android/server/blob/BlobStoreManagerService.java | 11 +++++++++-- 1 file changed, 9 insertions(+), 2 deletions(-) (limited to 'apex/blobstore') diff --git a/apex/blobstore/service/java/com/android/server/blob/BlobStoreManagerService.java b/apex/blobstore/service/java/com/android/server/blob/BlobStoreManagerService.java index f4b8f0f39e85..334b4b3c43e9 100644 --- a/apex/blobstore/service/java/com/android/server/blob/BlobStoreManagerService.java +++ b/apex/blobstore/service/java/com/android/server/blob/BlobStoreManagerService.java @@ -1330,8 +1330,15 @@ public class BlobStoreManagerService extends SystemService { mContext.enforceCallingOrSelfPermission(android.Manifest.permission.DUMP, "Caller is not allowed to call this; caller=" + Binder.getCallingUid()); - mHandler.post(PooledLambda.obtainRunnable(remoteCallback::sendResult, null) - .recycleOnUse()); + // We post messages back and forth between mHandler thread and mBackgroundHandler + // thread while committing a blob. We need to replicate the same pattern here to + // ensure pending messages have been handled. + mHandler.post(() -> { + mBackgroundHandler.post(() -> { + mHandler.post(PooledLambda.obtainRunnable(remoteCallback::sendResult, null) + .recycleOnUse()); + }); + }); } @Override -- cgit v1.2.3