Merge "Attempt to unlink session file if hardlink fails" into udc-dev
This commit is contained in:
committed by
Android (Google) Code Review
commit
7fbed032f6
@@ -1645,13 +1645,14 @@ public class PackageInstallerSession extends IPackageInstallerSession.Stub {
|
|||||||
throw new SecurityException("link() can only be run by the system");
|
throw new SecurityException("link() can only be run by the system");
|
||||||
}
|
}
|
||||||
|
|
||||||
try {
|
|
||||||
final File target = new File(path);
|
final File target = new File(path);
|
||||||
final File source = new File(stageDir, target.getName());
|
final File source = new File(stageDir, target.getName());
|
||||||
|
var sourcePath = source.getAbsolutePath();
|
||||||
try {
|
try {
|
||||||
Os.link(path, source.getAbsolutePath());
|
try {
|
||||||
|
Os.link(path, sourcePath);
|
||||||
// Grant READ access for APK to be read successfully
|
// Grant READ access for APK to be read successfully
|
||||||
Os.chmod(source.getAbsolutePath(), 0644);
|
Os.chmod(sourcePath, 0644);
|
||||||
} catch (ErrnoException e) {
|
} catch (ErrnoException e) {
|
||||||
e.rethrowAsIOException();
|
e.rethrowAsIOException();
|
||||||
}
|
}
|
||||||
@@ -1659,6 +1660,12 @@ public class PackageInstallerSession extends IPackageInstallerSession.Stub {
|
|||||||
throw new IOException("Can't relabel file: " + source);
|
throw new IOException("Can't relabel file: " + source);
|
||||||
}
|
}
|
||||||
} catch (IOException e) {
|
} catch (IOException e) {
|
||||||
|
try {
|
||||||
|
Os.unlink(sourcePath);
|
||||||
|
} catch (Exception ignored) {
|
||||||
|
Slog.d(TAG, "Failed to unlink session file: " + sourcePath);
|
||||||
|
}
|
||||||
|
|
||||||
throw ExceptionUtils.wrap(e);
|
throw ExceptionUtils.wrap(e);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|||||||
Reference in New Issue
Block a user