* commit 'bfd15fa00557ea78567a30fe260dea62c37bd5a0': Two REMOVE_PROVIDER messages caused by race condition.
This commit is contained in:
@@ -4533,6 +4533,8 @@ public final class ActivityThread {
|
||||
+ "snatched provider from the jaws of death");
|
||||
}
|
||||
prc.removePending = false;
|
||||
// There is a race! It fails to remove the message, which
|
||||
// will be handled in completeRemoveProvider().
|
||||
mH.removeMessages(H.REMOVE_PROVIDER, prc);
|
||||
} else {
|
||||
unstableDelta = 0;
|
||||
@@ -4712,6 +4714,11 @@ public final class ActivityThread {
|
||||
return;
|
||||
}
|
||||
|
||||
// More complicated race!! Some client managed to acquire the
|
||||
// provider and release it before the removal was completed.
|
||||
// Continue the removal, and abort the next remove message.
|
||||
prc.removePending = false;
|
||||
|
||||
final IBinder jBinder = prc.holder.provider.asBinder();
|
||||
ProviderRefCount existingPrc = mProviderRefCountMap.get(jBinder);
|
||||
if (existingPrc == prc) {
|
||||
|
||||
Reference in New Issue
Block a user