diff options
author | Sudheer Shanka <sudheersai@google.com> | 2020-03-25 11:54:16 -0700 |
---|---|---|
committer | Sudheer Shanka <sudheersai@google.com> | 2020-03-25 12:50:52 -0700 |
commit | 0d34826d06abb82a6b8d67a97184211d9345ce8a (patch) | |
tree | a5c8b89c642395f467d184f73fd57f3a2383432c /apex/blobstore | |
parent | 09b95708628b34df20b219c15c1e60f4bcca481b (diff) |
Restore existing committer info correctly when a new commit fails.
Fixes: 152425652
Test: atest --test-mapping apex/blobstore
Change-Id: Ife0cd417cedce603a907efd5ca261408ef599e9f
Diffstat (limited to 'apex/blobstore')
-rw-r--r-- | apex/blobstore/service/java/com/android/server/blob/BlobMetadata.java | 10 | ||||
-rw-r--r-- | apex/blobstore/service/java/com/android/server/blob/BlobStoreManagerService.java | 10 |
2 files changed, 15 insertions, 5 deletions
diff --git a/apex/blobstore/service/java/com/android/server/blob/BlobMetadata.java b/apex/blobstore/service/java/com/android/server/blob/BlobMetadata.java index e5a685f15df8..c8ca44b6ef74 100644 --- a/apex/blobstore/service/java/com/android/server/blob/BlobMetadata.java +++ b/apex/blobstore/service/java/com/android/server/blob/BlobMetadata.java @@ -116,7 +116,7 @@ class BlobMetadata { return mUserId; } - void addCommitter(@NonNull Committer committer) { + void addOrReplaceCommitter(@NonNull Committer committer) { synchronized (mMetadataLock) { // We need to override the committer data, so first remove any existing // committer before adding the new one. @@ -139,6 +139,12 @@ class BlobMetadata { } } + void removeCommitter(@NonNull Committer committer) { + synchronized (mMetadataLock) { + mCommitters.remove(committer); + } + } + void removeInvalidCommitters(SparseArray<String> packages) { synchronized (mMetadataLock) { mCommitters.removeIf(committer -> @@ -154,7 +160,7 @@ class BlobMetadata { } } - void addLeasee(String callingPackage, int callingUid, int descriptionResId, + void addOrReplaceLeasee(String callingPackage, int callingUid, int descriptionResId, CharSequence description, long leaseExpiryTimeMillis) { synchronized (mMetadataLock) { // We need to override the leasee data, so first remove any existing 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 65ccb997343b..6c48511a12cc 100644 --- a/apex/blobstore/service/java/com/android/server/blob/BlobStoreManagerService.java +++ b/apex/blobstore/service/java/com/android/server/blob/BlobStoreManagerService.java @@ -401,7 +401,7 @@ public class BlobStoreManagerService extends SystemService { throw new LimitExceededException("Total amount of data with an active lease" + " is exceeding the max limit"); } - blobMetadata.addLeasee(callingPackage, callingUid, + blobMetadata.addOrReplaceLeasee(callingPackage, callingUid, descriptionResId, description, leaseExpiryTimeMillis); if (LOGV) { Slog.v(TAG, "Acquired lease on " + blobHandle @@ -573,12 +573,16 @@ public class BlobStoreManagerService extends SystemService { final Committer newCommitter = new Committer(session.getOwnerPackageName(), session.getOwnerUid(), session.getBlobAccessMode()); final Committer existingCommitter = blob.getExistingCommitter(newCommitter); - blob.addCommitter(newCommitter); + blob.addOrReplaceCommitter(newCommitter); try { writeBlobsInfoLocked(); session.sendCommitCallbackResult(COMMIT_RESULT_SUCCESS); } catch (Exception e) { - blob.addCommitter(existingCommitter); + if (existingCommitter == null) { + blob.removeCommitter(newCommitter); + } else { + blob.addOrReplaceCommitter(existingCommitter); + } session.sendCommitCallbackResult(COMMIT_RESULT_ERROR); } getUserSessionsLocked(UserHandle.getUserId(session.getOwnerUid())) |