diff options
| author | 2020-05-19 22:18:18 -0700 | |
|---|---|---|
| committer | 2020-05-20 10:36:58 -0700 | |
| commit | 221cd08deb2f937907334f04e202cc0317ad1276 (patch) | |
| tree | 8c898ab5b115aac37a77d5a98590ac30d3b63d95 | |
| parent | 2d2b7250f6d399e949421c253303a30b06eef689 (diff) | |
Using the lock to obtain mRemoteStatusReceiver.
Bug: 156287164
Test: atest IncrementalInstallerTest
Change-Id: I4e1af0435fe7a66d8eec40db588630098fd7ac69
| -rw-r--r-- | services/core/java/com/android/server/pm/PackageInstallerSession.java | 21 |
1 files changed, 14 insertions, 7 deletions
diff --git a/services/core/java/com/android/server/pm/PackageInstallerSession.java b/services/core/java/com/android/server/pm/PackageInstallerSession.java index 1741aa74e9bc..f8278de1531d 100644 --- a/services/core/java/com/android/server/pm/PackageInstallerSession.java +++ b/services/core/java/com/android/server/pm/PackageInstallerSession.java @@ -2822,8 +2822,7 @@ public class PackageInstallerSession extends IPackageInstallerSession.Stub { } case IDataLoaderStatusListener.DATA_LOADER_UNAVAILABLE: { // Don't fail or commit the session. Allow caller to commit again. - sendPendingStreaming(mContext, mRemoteStatusReceiver, sessionId, - "DataLoader unavailable"); + sendPendingStreaming("DataLoader unavailable"); break; } case IDataLoaderStatusListener.DATA_LOADER_UNRECOVERABLE: @@ -2835,8 +2834,7 @@ public class PackageInstallerSession extends IPackageInstallerSession.Stub { } catch (RemoteException e) { // In case of streaming failure we don't want to fail or commit the session. // Just return from this method and allow caller to commit again. - sendPendingStreaming(mContext, mRemoteStatusReceiver, sessionId, - e.getMessage()); + sendPendingStreaming(e.getMessage()); } } }; @@ -3196,8 +3194,17 @@ public class PackageInstallerSession extends IPackageInstallerSession.Stub { } } - private static void sendPendingStreaming(Context context, IntentSender target, int sessionId, - @Nullable String cause) { + private void sendPendingStreaming(@Nullable String cause) { + final IntentSender statusReceiver; + synchronized (mLock) { + statusReceiver = mRemoteStatusReceiver; + } + + if (statusReceiver == null) { + Slog.e(TAG, "Missing receiver for pending streaming status."); + return; + } + final Intent intent = new Intent(); intent.putExtra(PackageInstaller.EXTRA_SESSION_ID, sessionId); intent.putExtra(PackageInstaller.EXTRA_STATUS, PackageInstaller.STATUS_PENDING_STREAMING); @@ -3208,7 +3215,7 @@ public class PackageInstallerSession extends IPackageInstallerSession.Stub { intent.putExtra(PackageInstaller.EXTRA_STATUS_MESSAGE, "Staging Image Not Ready"); } try { - target.sendIntent(context, 0, intent, null, null); + statusReceiver.sendIntent(mContext, 0, intent, null, null); } catch (IntentSender.SendIntentException ignored) { } } |