am 8bd04b20: Merge change Iea48361d into eclair
Merge commit '8bd04b2000f418c8c6f4f628abc215bb5a688244' into eclair-mr2 * commit '8bd04b2000f418c8c6f4f628abc215bb5a688244': fix an NPE on a race condition that occurs when unbinding from an authenticator at the samer time that its process dies: bug 2171204
This commit is contained in:
@@ -146,7 +146,7 @@ public class AuthenticatorBindHelper {
|
|||||||
Log.v(TAG, "there are no more callbacks for service "
|
Log.v(TAG, "there are no more callbacks for service "
|
||||||
+ authenticatorType + ", unbinding service");
|
+ authenticatorType + ", unbinding service");
|
||||||
}
|
}
|
||||||
unbindFromService(authenticatorType);
|
unbindFromServiceLocked(authenticatorType);
|
||||||
} else {
|
} else {
|
||||||
if (Log.isLoggable(TAG, Log.VERBOSE)) {
|
if (Log.isLoggable(TAG, Log.VERBOSE)) {
|
||||||
Log.v(TAG, "leaving service " + authenticatorType
|
Log.v(TAG, "leaving service " + authenticatorType
|
||||||
@@ -161,7 +161,10 @@ public class AuthenticatorBindHelper {
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
private void unbindFromService(String authenticatorType) {
|
/**
|
||||||
|
* You must synchronized on mServiceConnections before calling this
|
||||||
|
*/
|
||||||
|
private void unbindFromServiceLocked(String authenticatorType) {
|
||||||
if (Log.isLoggable(TAG, Log.VERBOSE)) {
|
if (Log.isLoggable(TAG, Log.VERBOSE)) {
|
||||||
Log.v(TAG, "unbindService from " + authenticatorType);
|
Log.v(TAG, "unbindService from " + authenticatorType);
|
||||||
}
|
}
|
||||||
@@ -217,7 +220,9 @@ public class AuthenticatorBindHelper {
|
|||||||
// post a message for each service user to tell them that the service is disconnected,
|
// post a message for each service user to tell them that the service is disconnected,
|
||||||
// and unbind from the service.
|
// and unbind from the service.
|
||||||
synchronized (mServiceConnections) {
|
synchronized (mServiceConnections) {
|
||||||
for (Callback callback : mServiceUsers.get(mAuthenticatorType)) {
|
final ArrayList<Callback> callbackList = mServiceUsers.get(mAuthenticatorType);
|
||||||
|
if (callbackList != null) {
|
||||||
|
for (Callback callback : callbackList) {
|
||||||
if (Log.isLoggable(TAG, Log.VERBOSE)) {
|
if (Log.isLoggable(TAG, Log.VERBOSE)) {
|
||||||
Log.v(TAG, "the service became disconnected, scheduling a "
|
Log.v(TAG, "the service became disconnected, scheduling a "
|
||||||
+ "disconnected message for "
|
+ "disconnected message for "
|
||||||
@@ -225,7 +230,8 @@ public class AuthenticatorBindHelper {
|
|||||||
}
|
}
|
||||||
mHandler.obtainMessage(mMessageWhatDisconnected, callback).sendToTarget();
|
mHandler.obtainMessage(mMessageWhatDisconnected, callback).sendToTarget();
|
||||||
}
|
}
|
||||||
unbindFromService(mAuthenticatorType);
|
unbindFromServiceLocked(mAuthenticatorType);
|
||||||
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|||||||
Reference in New Issue
Block a user