diff options
author | Sudheer Shanka <sudheersai@google.com> | 2020-02-19 21:36:26 +0000 |
---|---|---|
committer | Android (Google) Code Review <android-gerrit@google.com> | 2020-02-19 21:36:26 +0000 |
commit | f462373a9b68ebf13597cf5afe92770b52fda90a (patch) | |
tree | fe1e985d546e787bf140d8af0ff7c27a02d30532 /apex/blobstore | |
parent | 8f842ae7867aafe262bf865062f46a1eff397a83 (diff) | |
parent | ab4a8ae4dfa2a89cd7c0e5dc0a7ae798d8dd9eab (diff) |
Merge "Don't hold any locks while computing the blob digest."
Diffstat (limited to 'apex/blobstore')
-rw-r--r-- | apex/blobstore/service/java/com/android/server/blob/BlobStoreManagerService.java | 37 |
1 files changed, 21 insertions, 16 deletions
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 7b3764a999f7..1cc1c5fd3bee 100644 --- a/apex/blobstore/service/java/com/android/server/blob/BlobStoreManagerService.java +++ b/apex/blobstore/service/java/com/android/server/blob/BlobStoreManagerService.java @@ -385,24 +385,27 @@ public class BlobStoreManagerService extends SystemService { } private void onStateChangedInternal(@NonNull BlobStoreSession session) { - synchronized (mBlobsLock) { - switch (session.getState()) { - case STATE_ABANDONED: - case STATE_VERIFIED_INVALID: - session.getSessionFile().delete(); + switch (session.getState()) { + case STATE_ABANDONED: + case STATE_VERIFIED_INVALID: + session.getSessionFile().delete(); + synchronized (mBlobsLock) { getUserSessionsLocked(UserHandle.getUserId(session.getOwnerUid())) .remove(session.getSessionId()); mKnownBlobIds.remove(session.getSessionId()); if (LOGV) { Slog.v(TAG, "Session is invalid; deleted " + session); } - break; - case STATE_COMMITTED: - session.verifyBlobData(); - break; - case STATE_VERIFIED_VALID: + } + break; + case STATE_COMMITTED: + session.verifyBlobData(); + break; + case STATE_VERIFIED_VALID: + synchronized (mBlobsLock) { final int userId = UserHandle.getUserId(session.getOwnerUid()); - final ArrayMap<BlobHandle, BlobMetadata> userBlobs = getUserBlobsLocked(userId); + final ArrayMap<BlobHandle, BlobMetadata> userBlobs = getUserBlobsLocked( + userId); BlobMetadata blob = userBlobs.get(session.getBlobHandle()); if (blob == null) { blob = new BlobMetadata(mContext, @@ -425,11 +428,13 @@ public class BlobStoreManagerService extends SystemService { if (LOGV) { Slog.v(TAG, "Successfully committed session " + session); } - break; - default: - Slog.wtf(TAG, "Invalid session state: " - + stateToString(session.getState())); - } + } + break; + default: + Slog.wtf(TAG, "Invalid session state: " + + stateToString(session.getState())); + } + synchronized (mBlobsLock) { try { writeBlobSessionsLocked(); } catch (Exception e) { |