summaryrefslogtreecommitdiff
path: root/core/java/android/app/ActivityThread.java
diff options
context:
space:
mode:
authorMartijn Coenen <maco@google.com>2020-03-11 13:38:19 +0100
committerMartijn Coenen <maco@google.com>2020-03-11 13:40:48 +0100
commit13885b73dd26bb04884b315534b0da9d82253f8e (patch)
tree8ee3f93b4f0b2263c9fce51242ca3a69642961b2 /core/java/android/app/ActivityThread.java
parenta8c6c8b1f6595cfc68ed0ae3e2ba4bd0de50cce8 (diff)
Use REPLACE_EXISTING for rename(2) workaround.
We implement a workaround for Os.rename() failing with EXDEV, by using Files.move() instead. However, since we didn't pass in REPLACE_EXISTING as an option, Files.move() would fail if the destination file already existed. Since the semantics of rename(2) are to replace a file if it already exists, the work-around should do the same; so pass the flag. Also, log if the workaround throws an exception; that would have made this easier to debug. Bug: 151078664 Test: atest com.android.tests.fused.host.FuseDaemonHostTest#testRenameAndReplaceFile Change-Id: Ie84e89f857c2cc71e3b373db2032f700d066cf6b
Diffstat (limited to 'core/java/android/app/ActivityThread.java')
-rw-r--r--core/java/android/app/ActivityThread.java5
1 files changed, 4 insertions, 1 deletions
diff --git a/core/java/android/app/ActivityThread.java b/core/java/android/app/ActivityThread.java
index a62f0a6807bb..bd3fee2d1fc7 100644
--- a/core/java/android/app/ActivityThread.java
+++ b/core/java/android/app/ActivityThread.java
@@ -201,6 +201,7 @@ import java.lang.reflect.Method;
import java.net.InetAddress;
import java.nio.file.Files;
import java.nio.file.Path;
+import java.nio.file.StandardCopyOption;
import java.text.DateFormat;
import java.util.ArrayList;
import java.util.Arrays;
@@ -7413,8 +7414,10 @@ public final class ActivityThread extends ClientTransactionHandler {
if (e.errno == OsConstants.EXDEV && oldPath.startsWith("/storage/")) {
Log.v(TAG, "Recovering failed rename " + oldPath + " to " + newPath);
try {
- Files.move(new File(oldPath).toPath(), new File(newPath).toPath());
+ Files.move(new File(oldPath).toPath(), new File(newPath).toPath(),
+ StandardCopyOption.REPLACE_EXISTING);
} catch (IOException e2) {
+ Log.e(TAG, "Rename recovery failed ", e);
throw e;
}
} else {