Skip to content
Commit 6dabda8d authored by Hui Yu's avatar Hui Yu
Browse files

Clean up ProcessRecord when reuse a pid.

When Zygote starts a process with a pid, system_server may have this
pid associate with a old process which is killed by the OS but
system_server has not finished cleanup. In this case, clean up the old
ProcessRecord so the new process can use the pid.

This problem is exposed because the asynchronous process start change.
attachApplicationLocked() may happen before handleProcessStartedLocked() and
the mPidsSelfLocked may still have the old ProcessRecord associate with
the new process's pid.

Pid alone can not uniquely identify the process in mPidsSelfLocked.
In addition to pid, use the startSeq to uniquely identify the ProcessRecord. Refactor
PidMap.put() and PidMap.remove() to take a ProcessRecord as parameter.
In PidMap.remove(), check startSeq before removing ProcessRecord from
the map.

Bug: 131105245
Test: Using the POC test steps in b/131105245. Without the fix, the issue
can be reproduced in few attempts. With the fix, the issue can not be reproduced
any more.

Change-Id: I5d421f6c68f6b3437d51c94f4aef77e08a7bf002
parent 9d89fd9f
Loading
Loading
Loading
Loading
0% Loading or .
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment