summaryrefslogtreecommitdiff
path: root/core/java
diff options
context:
space:
mode:
authorAlex Buynytskyy <alexbuy@google.com>2020-03-17 18:12:23 -0700
committerAlex Buynytskyy <alexbuy@google.com>2020-03-18 09:01:36 -0700
commitb6e02f7b0978a2c0b4ae4aaafc7d9907267410be (patch)
treeab5856ee5eeee8b622e959c7280ff9badc9f21c9 /core/java
parent8ad736720c5dd583ae3e8bcb33dc35099f9b3c92 (diff)
Removing race condition accessing shared binder object.
Test: incrementally installing two apks at the same time Bug: b/150411019 Change-Id: I81231edf7a32470542ec529aa305b4f9fb2b80e3
Diffstat (limited to 'core/java')
-rw-r--r--core/java/android/content/pm/IDataLoader.aidl8
-rw-r--r--core/java/android/service/dataloader/DataLoaderService.java34
2 files changed, 20 insertions, 22 deletions
diff --git a/core/java/android/content/pm/IDataLoader.aidl b/core/java/android/content/pm/IDataLoader.aidl
index 6a2658d72e41..5ec63415d3d3 100644
--- a/core/java/android/content/pm/IDataLoader.aidl
+++ b/core/java/android/content/pm/IDataLoader.aidl
@@ -29,9 +29,9 @@ oneway interface IDataLoader {
void create(int id, in DataLoaderParamsParcel params,
in FileSystemControlParcel control,
IDataLoaderStatusListener listener);
- void start();
- void stop();
- void destroy();
+ void start(int id);
+ void stop(int id);
+ void destroy(int id);
- void prepareImage(in InstallationFileParcel[] addedFiles, in @utf8InCpp String[] removedFiles);
+ void prepareImage(int id, in InstallationFileParcel[] addedFiles, in @utf8InCpp String[] removedFiles);
}
diff --git a/core/java/android/service/dataloader/DataLoaderService.java b/core/java/android/service/dataloader/DataLoaderService.java
index d4db79eda762..0170726b31d6 100644
--- a/core/java/android/service/dataloader/DataLoaderService.java
+++ b/core/java/android/service/dataloader/DataLoaderService.java
@@ -102,21 +102,18 @@ public abstract class DataLoaderService extends Service {
}
private class DataLoaderBinderService extends IDataLoader.Stub {
- private int mId;
-
@Override
public void create(int id, @NonNull DataLoaderParamsParcel params,
@NonNull FileSystemControlParcel control,
@NonNull IDataLoaderStatusListener listener)
throws RuntimeException {
- mId = id;
try {
if (!nativeCreateDataLoader(id, control, params, listener)) {
- Slog.e(TAG, "Failed to create native loader for " + mId);
+ Slog.e(TAG, "Failed to create native loader for " + id);
}
} catch (Exception ex) {
- Slog.e(TAG, "Failed to create native loader for " + mId, ex);
- destroy();
+ Slog.e(TAG, "Failed to create native loader for " + id, ex);
+ destroy(id);
throw new RuntimeException(ex);
} finally {
// Closing FDs.
@@ -150,30 +147,31 @@ public abstract class DataLoaderService extends Service {
}
@Override
- public void start() {
- if (!nativeStartDataLoader(mId)) {
- Slog.e(TAG, "Failed to start loader: " + mId);
+ public void start(int id) {
+ if (!nativeStartDataLoader(id)) {
+ Slog.e(TAG, "Failed to start loader: " + id);
}
}
@Override
- public void stop() {
- if (!nativeStopDataLoader(mId)) {
- Slog.w(TAG, "Failed to stop loader: " + mId);
+ public void stop(int id) {
+ if (!nativeStopDataLoader(id)) {
+ Slog.w(TAG, "Failed to stop loader: " + id);
}
}
@Override
- public void destroy() {
- if (!nativeDestroyDataLoader(mId)) {
- Slog.w(TAG, "Failed to destroy loader: " + mId);
+ public void destroy(int id) {
+ if (!nativeDestroyDataLoader(id)) {
+ Slog.w(TAG, "Failed to destroy loader: " + id);
}
}
@Override
- public void prepareImage(InstallationFileParcel[] addedFiles, String[] removedFiles) {
- if (!nativePrepareImage(mId, addedFiles, removedFiles)) {
- Slog.w(TAG, "Failed to prepare image for data loader: " + mId);
+ public void prepareImage(int id, InstallationFileParcel[] addedFiles,
+ String[] removedFiles) {
+ if (!nativePrepareImage(id, addedFiles, removedFiles)) {
+ Slog.w(TAG, "Failed to prepare image for data loader: " + id);
}
}
}