Merge "Fix system crash due to mismatching begin/finishBroadcast()" into nyc-mr1-dev
This commit is contained in:
@@ -288,6 +288,7 @@ public class RemoteCallbackList<E extends IInterface> {
|
|||||||
* @see #beginBroadcast
|
* @see #beginBroadcast
|
||||||
*/
|
*/
|
||||||
public void finishBroadcast() {
|
public void finishBroadcast() {
|
||||||
|
synchronized (mCallbacks) {
|
||||||
if (mBroadcastCount < 0) {
|
if (mBroadcastCount < 0) {
|
||||||
throw new IllegalStateException(
|
throw new IllegalStateException(
|
||||||
"finishBroadcast() called outside of a broadcast");
|
"finishBroadcast() called outside of a broadcast");
|
||||||
@@ -303,6 +304,7 @@ public class RemoteCallbackList<E extends IInterface> {
|
|||||||
|
|
||||||
mBroadcastCount = -1;
|
mBroadcastCount = -1;
|
||||||
}
|
}
|
||||||
|
}
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* Returns the number of registered callbacks. Note that the number of registered
|
* Returns the number of registered callbacks. Note that the number of registered
|
||||||
|
|||||||
@@ -631,6 +631,7 @@ public class LauncherAppsService extends SystemService {
|
|||||||
public void onPackageAdded(String packageName, int uid) {
|
public void onPackageAdded(String packageName, int uid) {
|
||||||
UserHandle user = new UserHandle(getChangingUserId());
|
UserHandle user = new UserHandle(getChangingUserId());
|
||||||
final int n = mListeners.beginBroadcast();
|
final int n = mListeners.beginBroadcast();
|
||||||
|
try {
|
||||||
for (int i = 0; i < n; i++) {
|
for (int i = 0; i < n; i++) {
|
||||||
IOnAppsChangedListener listener = mListeners.getBroadcastItem(i);
|
IOnAppsChangedListener listener = mListeners.getBroadcastItem(i);
|
||||||
BroadcastCookie cookie = (BroadcastCookie) mListeners.getBroadcastCookie(i);
|
BroadcastCookie cookie = (BroadcastCookie) mListeners.getBroadcastCookie(i);
|
||||||
@@ -641,7 +642,9 @@ public class LauncherAppsService extends SystemService {
|
|||||||
Slog.d(TAG, "Callback failed ", re);
|
Slog.d(TAG, "Callback failed ", re);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
} finally {
|
||||||
mListeners.finishBroadcast();
|
mListeners.finishBroadcast();
|
||||||
|
}
|
||||||
|
|
||||||
super.onPackageAdded(packageName, uid);
|
super.onPackageAdded(packageName, uid);
|
||||||
}
|
}
|
||||||
@@ -650,6 +653,7 @@ public class LauncherAppsService extends SystemService {
|
|||||||
public void onPackageRemoved(String packageName, int uid) {
|
public void onPackageRemoved(String packageName, int uid) {
|
||||||
UserHandle user = new UserHandle(getChangingUserId());
|
UserHandle user = new UserHandle(getChangingUserId());
|
||||||
final int n = mListeners.beginBroadcast();
|
final int n = mListeners.beginBroadcast();
|
||||||
|
try {
|
||||||
for (int i = 0; i < n; i++) {
|
for (int i = 0; i < n; i++) {
|
||||||
IOnAppsChangedListener listener = mListeners.getBroadcastItem(i);
|
IOnAppsChangedListener listener = mListeners.getBroadcastItem(i);
|
||||||
BroadcastCookie cookie = (BroadcastCookie) mListeners.getBroadcastCookie(i);
|
BroadcastCookie cookie = (BroadcastCookie) mListeners.getBroadcastCookie(i);
|
||||||
@@ -660,7 +664,9 @@ public class LauncherAppsService extends SystemService {
|
|||||||
Slog.d(TAG, "Callback failed ", re);
|
Slog.d(TAG, "Callback failed ", re);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
} finally {
|
||||||
mListeners.finishBroadcast();
|
mListeners.finishBroadcast();
|
||||||
|
}
|
||||||
|
|
||||||
super.onPackageRemoved(packageName, uid);
|
super.onPackageRemoved(packageName, uid);
|
||||||
}
|
}
|
||||||
@@ -669,6 +675,7 @@ public class LauncherAppsService extends SystemService {
|
|||||||
public void onPackageModified(String packageName) {
|
public void onPackageModified(String packageName) {
|
||||||
UserHandle user = new UserHandle(getChangingUserId());
|
UserHandle user = new UserHandle(getChangingUserId());
|
||||||
final int n = mListeners.beginBroadcast();
|
final int n = mListeners.beginBroadcast();
|
||||||
|
try {
|
||||||
for (int i = 0; i < n; i++) {
|
for (int i = 0; i < n; i++) {
|
||||||
IOnAppsChangedListener listener = mListeners.getBroadcastItem(i);
|
IOnAppsChangedListener listener = mListeners.getBroadcastItem(i);
|
||||||
BroadcastCookie cookie = (BroadcastCookie) mListeners.getBroadcastCookie(i);
|
BroadcastCookie cookie = (BroadcastCookie) mListeners.getBroadcastCookie(i);
|
||||||
@@ -679,7 +686,9 @@ public class LauncherAppsService extends SystemService {
|
|||||||
Slog.d(TAG, "Callback failed ", re);
|
Slog.d(TAG, "Callback failed ", re);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
} finally {
|
||||||
mListeners.finishBroadcast();
|
mListeners.finishBroadcast();
|
||||||
|
}
|
||||||
|
|
||||||
super.onPackageModified(packageName);
|
super.onPackageModified(packageName);
|
||||||
}
|
}
|
||||||
@@ -688,6 +697,7 @@ public class LauncherAppsService extends SystemService {
|
|||||||
public void onPackagesAvailable(String[] packages) {
|
public void onPackagesAvailable(String[] packages) {
|
||||||
UserHandle user = new UserHandle(getChangingUserId());
|
UserHandle user = new UserHandle(getChangingUserId());
|
||||||
final int n = mListeners.beginBroadcast();
|
final int n = mListeners.beginBroadcast();
|
||||||
|
try {
|
||||||
for (int i = 0; i < n; i++) {
|
for (int i = 0; i < n; i++) {
|
||||||
IOnAppsChangedListener listener = mListeners.getBroadcastItem(i);
|
IOnAppsChangedListener listener = mListeners.getBroadcastItem(i);
|
||||||
BroadcastCookie cookie = (BroadcastCookie) mListeners.getBroadcastCookie(i);
|
BroadcastCookie cookie = (BroadcastCookie) mListeners.getBroadcastCookie(i);
|
||||||
@@ -698,7 +708,9 @@ public class LauncherAppsService extends SystemService {
|
|||||||
Slog.d(TAG, "Callback failed ", re);
|
Slog.d(TAG, "Callback failed ", re);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
} finally {
|
||||||
mListeners.finishBroadcast();
|
mListeners.finishBroadcast();
|
||||||
|
}
|
||||||
|
|
||||||
super.onPackagesAvailable(packages);
|
super.onPackagesAvailable(packages);
|
||||||
}
|
}
|
||||||
@@ -707,6 +719,7 @@ public class LauncherAppsService extends SystemService {
|
|||||||
public void onPackagesUnavailable(String[] packages) {
|
public void onPackagesUnavailable(String[] packages) {
|
||||||
UserHandle user = new UserHandle(getChangingUserId());
|
UserHandle user = new UserHandle(getChangingUserId());
|
||||||
final int n = mListeners.beginBroadcast();
|
final int n = mListeners.beginBroadcast();
|
||||||
|
try {
|
||||||
for (int i = 0; i < n; i++) {
|
for (int i = 0; i < n; i++) {
|
||||||
IOnAppsChangedListener listener = mListeners.getBroadcastItem(i);
|
IOnAppsChangedListener listener = mListeners.getBroadcastItem(i);
|
||||||
BroadcastCookie cookie = (BroadcastCookie) mListeners.getBroadcastCookie(i);
|
BroadcastCookie cookie = (BroadcastCookie) mListeners.getBroadcastCookie(i);
|
||||||
@@ -717,7 +730,9 @@ public class LauncherAppsService extends SystemService {
|
|||||||
Slog.d(TAG, "Callback failed ", re);
|
Slog.d(TAG, "Callback failed ", re);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
} finally {
|
||||||
mListeners.finishBroadcast();
|
mListeners.finishBroadcast();
|
||||||
|
}
|
||||||
|
|
||||||
super.onPackagesUnavailable(packages);
|
super.onPackagesUnavailable(packages);
|
||||||
}
|
}
|
||||||
@@ -726,6 +741,7 @@ public class LauncherAppsService extends SystemService {
|
|||||||
public void onPackagesSuspended(String[] packages) {
|
public void onPackagesSuspended(String[] packages) {
|
||||||
UserHandle user = new UserHandle(getChangingUserId());
|
UserHandle user = new UserHandle(getChangingUserId());
|
||||||
final int n = mListeners.beginBroadcast();
|
final int n = mListeners.beginBroadcast();
|
||||||
|
try {
|
||||||
for (int i = 0; i < n; i++) {
|
for (int i = 0; i < n; i++) {
|
||||||
IOnAppsChangedListener listener = mListeners.getBroadcastItem(i);
|
IOnAppsChangedListener listener = mListeners.getBroadcastItem(i);
|
||||||
BroadcastCookie cookie = (BroadcastCookie) mListeners.getBroadcastCookie(i);
|
BroadcastCookie cookie = (BroadcastCookie) mListeners.getBroadcastCookie(i);
|
||||||
@@ -736,7 +752,9 @@ public class LauncherAppsService extends SystemService {
|
|||||||
Slog.d(TAG, "Callback failed ", re);
|
Slog.d(TAG, "Callback failed ", re);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
} finally {
|
||||||
mListeners.finishBroadcast();
|
mListeners.finishBroadcast();
|
||||||
|
}
|
||||||
|
|
||||||
super.onPackagesSuspended(packages);
|
super.onPackagesSuspended(packages);
|
||||||
}
|
}
|
||||||
@@ -745,6 +763,7 @@ public class LauncherAppsService extends SystemService {
|
|||||||
public void onPackagesUnsuspended(String[] packages) {
|
public void onPackagesUnsuspended(String[] packages) {
|
||||||
UserHandle user = new UserHandle(getChangingUserId());
|
UserHandle user = new UserHandle(getChangingUserId());
|
||||||
final int n = mListeners.beginBroadcast();
|
final int n = mListeners.beginBroadcast();
|
||||||
|
try {
|
||||||
for (int i = 0; i < n; i++) {
|
for (int i = 0; i < n; i++) {
|
||||||
IOnAppsChangedListener listener = mListeners.getBroadcastItem(i);
|
IOnAppsChangedListener listener = mListeners.getBroadcastItem(i);
|
||||||
BroadcastCookie cookie = (BroadcastCookie) mListeners.getBroadcastCookie(i);
|
BroadcastCookie cookie = (BroadcastCookie) mListeners.getBroadcastCookie(i);
|
||||||
@@ -755,7 +774,9 @@ public class LauncherAppsService extends SystemService {
|
|||||||
Slog.d(TAG, "Callback failed ", re);
|
Slog.d(TAG, "Callback failed ", re);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
} finally {
|
||||||
mListeners.finishBroadcast();
|
mListeners.finishBroadcast();
|
||||||
|
}
|
||||||
|
|
||||||
super.onPackagesUnsuspended(packages);
|
super.onPackagesUnsuspended(packages);
|
||||||
}
|
}
|
||||||
@@ -768,10 +789,10 @@ public class LauncherAppsService extends SystemService {
|
|||||||
|
|
||||||
private void onShortcutChangedInner(@NonNull String packageName,
|
private void onShortcutChangedInner(@NonNull String packageName,
|
||||||
@UserIdInt int userId) {
|
@UserIdInt int userId) {
|
||||||
|
final int n = mListeners.beginBroadcast();
|
||||||
try {
|
try {
|
||||||
final UserHandle user = UserHandle.of(userId);
|
final UserHandle user = UserHandle.of(userId);
|
||||||
|
|
||||||
final int n = mListeners.beginBroadcast();
|
|
||||||
for (int i = 0; i < n; i++) {
|
for (int i = 0; i < n; i++) {
|
||||||
IOnAppsChangedListener listener = mListeners.getBroadcastItem(i);
|
IOnAppsChangedListener listener = mListeners.getBroadcastItem(i);
|
||||||
BroadcastCookie cookie = (BroadcastCookie) mListeners.getBroadcastCookie(i);
|
BroadcastCookie cookie = (BroadcastCookie) mListeners.getBroadcastCookie(i);
|
||||||
@@ -803,10 +824,11 @@ public class LauncherAppsService extends SystemService {
|
|||||||
Slog.d(TAG, "Callback failed ", re);
|
Slog.d(TAG, "Callback failed ", re);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
mListeners.finishBroadcast();
|
|
||||||
} catch (RuntimeException e) {
|
} catch (RuntimeException e) {
|
||||||
// When the user is locked we get IllegalState, so just catch all.
|
// When the user is locked we get IllegalState, so just catch all.
|
||||||
Log.w(TAG, e.getMessage(), e);
|
Log.w(TAG, e.getMessage(), e);
|
||||||
|
} finally {
|
||||||
|
mListeners.finishBroadcast();
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|||||||
Reference in New Issue
Block a user