diff --git a/services/java/com/android/server/MountService.java b/services/java/com/android/server/MountService.java index 39ee31486b260..2dc12f6e53479 100644 --- a/services/java/com/android/server/MountService.java +++ b/services/java/com/android/server/MountService.java @@ -1003,7 +1003,11 @@ class MountService extends IMountService.Stub warnOnNotMounted(); synchronized (mAsecMountSet) { - if (mAsecMountSet.contains(oldId)) { + /* + * Because a mounted container has active internal state which cannot be + * changed while active, we must ensure both ids are not currently mounted. + */ + if (mAsecMountSet.contains(oldId) || mAsecMountSet.contains(newId)) { return StorageResultCode.OperationFailedStorageMounted; } } diff --git a/tests/AndroidTests/src/com/android/unit_tests/AsecTests.java b/tests/AndroidTests/src/com/android/unit_tests/AsecTests.java index 3bbb4477b3340..d5d23266d70a3 100755 --- a/tests/AndroidTests/src/com/android/unit_tests/AsecTests.java +++ b/tests/AndroidTests/src/com/android/unit_tests/AsecTests.java @@ -300,7 +300,7 @@ public class AsecTests extends AndroidTestCase { } } - public void testRenameMountedContainer() { + public void testRenameSrcMountedContainer() { try { Assert.assertEquals(StorageResultCode.OperationSucceeded, createContainer("testRenameContainer.1", 4, "none")); @@ -312,11 +312,14 @@ public class AsecTests extends AndroidTestCase { } } - public void testRenameToExistingContainer() { + public void testRenameDstMountedContainer() { try { Assert.assertEquals(StorageResultCode.OperationSucceeded, createContainer("testRenameContainer.1", 4, "none")); + Assert.assertEquals(StorageResultCode.OperationSucceeded, + unmountContainer("testRenameContainer.1", false)); + Assert.assertEquals(StorageResultCode.OperationSucceeded, createContainer("testRenameContainer.2", 4, "none"));