diff options
| author | Alex Buynytskyy <alexbuy@google.com> | 2020-03-17 18:12:23 -0700 |
|---|---|---|
| committer | Alex Buynytskyy <alexbuy@google.com> | 2020-03-18 09:01:36 -0700 |
| commit | b6e02f7b0978a2c0b4ae4aaafc7d9907267410be (patch) | |
| tree | ab5856ee5eeee8b622e959c7280ff9badc9f21c9 /core/java | |
| parent | 8ad736720c5dd583ae3e8bcb33dc35099f9b3c92 (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.aidl | 8 | ||||
| -rw-r--r-- | core/java/android/service/dataloader/DataLoaderService.java | 34 |
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); } } } |
