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:
Adam Lesinski
2014-11-21 02:36:57 +00:00
committed by android-build-merger

View File

@@ -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,