Pass in the correct binder token when calling AMS.finishReceiver().

Bug: 278795140
Test: atest services/tests/mockingservicestests/src/com/android/server/am/BroadcastQueueTest.java
Test: atest services/tests/mockingservicestests/src/com/android/server/am/BroadcastQueueModernImplTest.java
Change-Id: I51e2933411e15b9dd78cae2b4ad7234b96dc9122
This commit is contained in:
Sudheer Shanka
2023-04-18 18:56:20 -07:00
parent 67b4d4bbea
commit 02124666e2

View File

@@ -1668,10 +1668,13 @@ public final class LoadedApk {
static final class ReceiverDispatcher {
final static class InnerReceiver extends IIntentReceiver.Stub {
final IApplicationThread mApplicationThread;
final WeakReference<LoadedApk.ReceiverDispatcher> mDispatcher;
final LoadedApk.ReceiverDispatcher mStrongRef;
InnerReceiver(LoadedApk.ReceiverDispatcher rd, boolean strong) {
InnerReceiver(IApplicationThread thread, LoadedApk.ReceiverDispatcher rd,
boolean strong) {
mApplicationThread = thread;
mDispatcher = new WeakReference<LoadedApk.ReceiverDispatcher>(rd);
mStrongRef = strong ? rd : null;
}
@@ -1718,7 +1721,8 @@ public final class LoadedApk {
if (extras != null) {
extras.setAllowFds(false);
}
mgr.finishReceiver(this, resultCode, data, extras, false, intent.getFlags());
mgr.finishReceiver(mApplicationThread.asBinder(), resultCode, data,
extras, false, intent.getFlags());
} catch (RemoteException e) {
throw e.rethrowFromSystemServer();
}
@@ -1825,7 +1829,7 @@ public final class LoadedApk {
}
mAppThread = appThread;
mIIntentReceiver = new InnerReceiver(this, !registered);
mIIntentReceiver = new InnerReceiver(mAppThread, this, !registered);
mReceiver = receiver;
mContext = context;
mActivityThread = activityThread;