diff options
| -rw-r--r-- | cmds/installd/dexopt.cpp | 6 |
1 files changed, 5 insertions, 1 deletions
diff --git a/cmds/installd/dexopt.cpp b/cmds/installd/dexopt.cpp index 3710e6bcfa..6472a0feee 100644 --- a/cmds/installd/dexopt.cpp +++ b/cmds/installd/dexopt.cpp @@ -1198,7 +1198,11 @@ bool open_vdex_files(const char* apk_path, const char* out_oat_path, int dexopt_ if (dexopt_action == DEX2OAT_FOR_BOOT_IMAGE && in_vdex_wrapper_fd->get() != -1 && in_vdex_path_str == out_vdex_path_str) { - out_vdex_wrapper_fd->reset(in_vdex_wrapper_fd->get()); + // We unlink the file in case the invocation of dex2oat fails, to ensure we don't + // have bogus stale vdex files. + out_vdex_wrapper_fd->reset( + in_vdex_wrapper_fd->get(), + [out_vdex_path_str]() { unlink(out_vdex_path_str.c_str()); }); // Disable auto close for the in wrapper fd (it will be done when destructing the out // wrapper). in_vdex_wrapper_fd->DisableAutoClose(); |