am 825e0da2: Merge "Fix race when cleaning up receivers/services in Context" into lmp-mr1-dev
automerge: b7ce6d6
* commit 'b7ce6d6db1409ec785d2d7146cbcc897fd02d85b':
Fix race when cleaning up receivers/services in Context
This commit is contained in:
@@ -632,10 +632,11 @@ public final class LoadedApk {
|
|||||||
public void removeContextRegistrations(Context context,
|
public void removeContextRegistrations(Context context,
|
||||||
String who, String what) {
|
String who, String what) {
|
||||||
final boolean reportRegistrationLeaks = StrictMode.vmRegistrationLeaksEnabled();
|
final boolean reportRegistrationLeaks = StrictMode.vmRegistrationLeaksEnabled();
|
||||||
|
synchronized (mReceivers) {
|
||||||
ArrayMap<BroadcastReceiver, LoadedApk.ReceiverDispatcher> rmap =
|
ArrayMap<BroadcastReceiver, LoadedApk.ReceiverDispatcher> rmap =
|
||||||
mReceivers.remove(context);
|
mReceivers.remove(context);
|
||||||
if (rmap != null) {
|
if (rmap != null) {
|
||||||
for (int i=0; i<rmap.size(); i++) {
|
for (int i = 0; i < rmap.size(); i++) {
|
||||||
LoadedApk.ReceiverDispatcher rd = rmap.valueAt(i);
|
LoadedApk.ReceiverDispatcher rd = rmap.valueAt(i);
|
||||||
IntentReceiverLeaked leak = new IntentReceiverLeaked(
|
IntentReceiverLeaked leak = new IntentReceiverLeaked(
|
||||||
what + " " + who + " has leaked IntentReceiver "
|
what + " " + who + " has leaked IntentReceiver "
|
||||||
@@ -656,11 +657,14 @@ public final class LoadedApk {
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
mUnregisteredReceivers.remove(context);
|
mUnregisteredReceivers.remove(context);
|
||||||
|
}
|
||||||
|
|
||||||
|
synchronized (mServices) {
|
||||||
//Slog.i(TAG, "Receiver registrations: " + mReceivers);
|
//Slog.i(TAG, "Receiver registrations: " + mReceivers);
|
||||||
ArrayMap<ServiceConnection, LoadedApk.ServiceDispatcher> smap =
|
ArrayMap<ServiceConnection, LoadedApk.ServiceDispatcher> smap =
|
||||||
mServices.remove(context);
|
mServices.remove(context);
|
||||||
if (smap != null) {
|
if (smap != null) {
|
||||||
for (int i=0; i<smap.size(); i++) {
|
for (int i = 0; i < smap.size(); i++) {
|
||||||
LoadedApk.ServiceDispatcher sd = smap.valueAt(i);
|
LoadedApk.ServiceDispatcher sd = smap.valueAt(i);
|
||||||
ServiceConnectionLeaked leak = new ServiceConnectionLeaked(
|
ServiceConnectionLeaked leak = new ServiceConnectionLeaked(
|
||||||
what + " " + who + " has leaked ServiceConnection "
|
what + " " + who + " has leaked ServiceConnection "
|
||||||
@@ -682,6 +686,7 @@ public final class LoadedApk {
|
|||||||
mUnboundServices.remove(context);
|
mUnboundServices.remove(context);
|
||||||
//Slog.i(TAG, "Service registrations: " + mServices);
|
//Slog.i(TAG, "Service registrations: " + mServices);
|
||||||
}
|
}
|
||||||
|
}
|
||||||
|
|
||||||
public IIntentReceiver getReceiverDispatcher(BroadcastReceiver r,
|
public IIntentReceiver getReceiverDispatcher(BroadcastReceiver r,
|
||||||
Context context, Handler handler,
|
Context context, Handler handler,
|
||||||
|
|||||||
Reference in New Issue
Block a user