Check caller status precisely when registering receiver.

Fine tune commit 9ac9609f.
Because process may reuse same process record to restart.
It is better to check below conditions to skip:
1. Simple dead and has been cleaned.
 => .thread will be null
2.The process has restarted with new pid but has not attached yet.
 => .thread will be null
3.The process has restarted and attached.
 => The IBinder will be different

Change-Id: Ic052f5025558ca93e1a6ab11bca61fe995126bb9
This commit is contained in:
riddle_hsu
2015-02-04 20:52:03 +08:00
committed by Riddle Hsu
parent 53e8d6f934
commit b15506f95e

View File

@@ -15262,8 +15262,9 @@ public final class ActivityManagerService extends ActivityManagerNative
}
synchronized (this) {
if (callerApp != null && callerApp.pid == 0) {
// Caller already died
if (callerApp != null && (callerApp.thread == null
|| callerApp.thread.asBinder() != caller.asBinder())) {
// Original caller already died
return null;
}
ReceiverList rl