diff options
| author | 2018-01-26 14:26:53 -0500 | |
|---|---|---|
| committer | 2018-02-08 14:55:33 -0500 | |
| commit | 335e9c56a2ad6d1fa0df63744c3b3a207ccef6d6 (patch) | |
| tree | 270543e343ddb30dba085ee5466e0c62f28f40c8 | |
| parent | edace1cc159480afc571be85a7e72f651d71b4bd (diff) | |
Refactor ZygoteProcess to deal in LocalSocketAddress.
Currently ZygoteProcess only uses String names in the RESERVED socket
namespace. This CL reworks the class to use LocalSocketAddress, so that
other socket namespaces can be used to communicate with zygotes.
Bug: 63749735
Test: m (no functional change)
Change-Id: I4146f684bfcd78b16500829d02ff54590a8b48f5
| -rw-r--r-- | core/java/android/os/ZygoteProcess.java | 36 |
1 files changed, 27 insertions, 9 deletions
diff --git a/core/java/android/os/ZygoteProcess.java b/core/java/android/os/ZygoteProcess.java index 670f7949dd19..4a976403e7a8 100644 --- a/core/java/android/os/ZygoteProcess.java +++ b/core/java/android/os/ZygoteProcess.java @@ -61,18 +61,27 @@ public class ZygoteProcess { /** * The name of the socket used to communicate with the primary zygote. */ - private final String mSocket; + private final LocalSocketAddress mSocket; /** * The name of the secondary (alternate ABI) zygote socket. */ - private final String mSecondarySocket; + private final LocalSocketAddress mSecondarySocket; public ZygoteProcess(String primarySocket, String secondarySocket) { + this(new LocalSocketAddress(primarySocket, LocalSocketAddress.Namespace.RESERVED), + new LocalSocketAddress(secondarySocket, LocalSocketAddress.Namespace.RESERVED)); + } + + public ZygoteProcess(LocalSocketAddress primarySocket, LocalSocketAddress secondarySocket) { mSocket = primarySocket; mSecondarySocket = secondarySocket; } + public LocalSocketAddress getPrimarySocketAddress() { + return mSocket; + } + /** * State for communicating with the zygote process. */ @@ -92,14 +101,13 @@ public class ZygoteProcess { this.abiList = abiList; } - public static ZygoteState connect(String socketAddress) throws IOException { + public static ZygoteState connect(LocalSocketAddress address) throws IOException { DataInputStream zygoteInputStream = null; BufferedWriter zygoteWriter = null; final LocalSocket zygoteSocket = new LocalSocket(); try { - zygoteSocket.connect(new LocalSocketAddress(socketAddress, - LocalSocketAddress.Namespace.RESERVED)); + zygoteSocket.connect(address); zygoteInputStream = new DataInputStream(zygoteSocket.getInputStream()); @@ -115,8 +123,8 @@ public class ZygoteProcess { } String abiListString = getAbiList(zygoteWriter, zygoteInputStream); - Log.i("Zygote", "Process: zygote socket " + socketAddress + " opened, supported ABIS: " - + abiListString); + Log.i("Zygote", "Process: zygote socket " + address.getNamespace() + "/" + + address.getName() + " opened, supported ABIS: " + abiListString); return new ZygoteState(zygoteSocket, zygoteInputStream, zygoteWriter, Arrays.asList(abiListString.split(","))); @@ -514,9 +522,19 @@ public class ZygoteProcess { * @param socketName The name of the socket to connect to. */ public static void waitForConnectionToZygote(String socketName) { + final LocalSocketAddress address = + new LocalSocketAddress(socketName, LocalSocketAddress.Namespace.RESERVED); + waitForConnectionToZygote(address); + } + + /** + * Try connecting to the Zygote over and over again until we hit a time-out. + * @param address The name of the socket to connect to. + */ + public static void waitForConnectionToZygote(LocalSocketAddress address) { for (int n = 20; n >= 0; n--) { try { - final ZygoteState zs = ZygoteState.connect(socketName); + final ZygoteState zs = ZygoteState.connect(address); zs.close(); return; } catch (IOException ioe) { @@ -529,6 +547,6 @@ public class ZygoteProcess { } catch (InterruptedException ie) { } } - Slog.wtf(LOG_TAG, "Failed to connect to Zygote through socket " + socketName); + Slog.wtf(LOG_TAG, "Failed to connect to Zygote through socket " + address.getName()); } } |