diff --git a/services/java/com/android/server/am/ActivityManagerService.java b/services/java/com/android/server/am/ActivityManagerService.java index b6064e8160868..a437d9582af5c 100644 --- a/services/java/com/android/server/am/ActivityManagerService.java +++ b/services/java/com/android/server/am/ActivityManagerService.java @@ -3516,7 +3516,7 @@ public final class ActivityManagerService extends ActivityManagerNative implemen if (DEBUG_TASKS) Slog.v(TAG, "Starting new activity " + r + " in new task " + r.task); newTask = true; - addRecentTask(r.task); + addRecentTaskLocked(r.task); } else if (sourceRecord != null) { if (!addingToTask && @@ -3891,7 +3891,7 @@ public final class ActivityManagerService extends ActivityManagerNative implemen } } - private final void addRecentTask(TaskRecord task) { + private final void addRecentTaskLocked(TaskRecord task) { // Remove any existing entries that are the same kind of task. int N = mRecentTasks.size(); for (int i=0; i=0; i--) { - ProviderInfo pi = (ProviderInfo)providers.get(i); - if ((pi.applicationInfo.flags&ApplicationInfo.FLAG_SYSTEM) == 0) { - Slog.w(TAG, "Not installing system proc provider " + pi.name - + ": not system .apk"); - providers.remove(i); + List providers; + synchronized (mSelf) { + ProcessRecord app = mSelf.mProcessNames.get("system", Process.SYSTEM_UID); + providers = mSelf.generateApplicationProvidersLocked(app); + if (providers != null) { + for (int i=providers.size()-1; i>=0; i--) { + ProviderInfo pi = (ProviderInfo)providers.get(i); + if ((pi.applicationInfo.flags&ApplicationInfo.FLAG_SYSTEM) == 0) { + Slog.w(TAG, "Not installing system proc provider " + pi.name + + ": not system .apk"); + providers.remove(i); + } } } } - mSystemThread.installSystemProviders(providers); + if (providers != null) { + mSystemThread.installSystemProviders(providers); + } } // ========================================================= @@ -8297,11 +8304,15 @@ public final class ActivityManagerService extends ActivityManagerNative implemen } public void registerActivityWatcher(IActivityWatcher watcher) { - mWatchers.register(watcher); + synchronized (this) { + mWatchers.register(watcher); + } } public void unregisterActivityWatcher(IActivityWatcher watcher) { - mWatchers.unregister(watcher); + synchronized (this) { + mWatchers.unregister(watcher); + } } public final void enterSafeMode() { @@ -11937,7 +11948,7 @@ public final class ActivityManagerService extends ActivityManagerNative implemen // BROADCASTS // ========================================================= - private final List getStickies(String action, IntentFilter filter, + private final List getStickiesLocked(String action, IntentFilter filter, List cur) { final ContentResolver resolver = mContext.getContentResolver(); final ArrayList list = mStickyBroadcasts.get(action); @@ -11989,10 +12000,10 @@ public final class ActivityManagerService extends ActivityManagerNative implemen if (actions != null) { while (actions.hasNext()) { String action = (String)actions.next(); - allSticky = getStickies(action, filter, allSticky); + allSticky = getStickiesLocked(action, filter, allSticky); } } else { - allSticky = getStickies(null, filter, allSticky); + allSticky = getStickiesLocked(null, filter, allSticky); } // The first sticky in the list is returned directly back to @@ -13840,7 +13851,7 @@ public final class ActivityManagerService extends ActivityManagerNative implemen /** * Returns true if things are idle enough to perform GCs. */ - private final boolean canGcNow() { + private final boolean canGcNowLocked() { return mParallelBroadcasts.size() == 0 && mOrderedBroadcasts.size() == 0 && (mSleeping || (mResumedActivity != null && @@ -13856,7 +13867,7 @@ public final class ActivityManagerService extends ActivityManagerNative implemen if (N <= 0) { return; } - if (canGcNow()) { + if (canGcNowLocked()) { while (mProcessesToGc.size() > 0) { ProcessRecord proc = mProcessesToGc.remove(0); if (proc.curRawAdj > VISIBLE_APP_ADJ || proc.reportLowMemory) { @@ -13884,7 +13895,7 @@ public final class ActivityManagerService extends ActivityManagerNative implemen * If all looks good, perform GCs on all processes waiting for them. */ final void performAppGcsIfAppropriateLocked() { - if (canGcNow()) { + if (canGcNowLocked()) { performAppGcsLocked(); return; }