Fix socket descriptor leak from Zygote to child app
Due to an API change in LocalSocket, Zygote must now
manually close the FileDescriptor it created when it
registered a LocalServerSocket. The LocalSocket.close()
routine will no longer do so.
Bug: 12114500
(cherry picked from commit 70ef29b04e
)
Change-Id: Ief23a3c99e007dc4aa6f94dfb47a1b2b6c854dad
This commit is contained in:
@ -192,10 +192,16 @@ public class ZygoteInit {
|
|||||||
static void closeServerSocket() {
|
static void closeServerSocket() {
|
||||||
try {
|
try {
|
||||||
if (sServerSocket != null) {
|
if (sServerSocket != null) {
|
||||||
|
FileDescriptor fd = sServerSocket.getFileDescriptor();
|
||||||
sServerSocket.close();
|
sServerSocket.close();
|
||||||
|
if (fd != null) {
|
||||||
|
Libcore.os.close(fd);
|
||||||
|
}
|
||||||
}
|
}
|
||||||
} catch (IOException ex) {
|
} catch (IOException ex) {
|
||||||
Log.e(TAG, "Zygote: error closing sockets", ex);
|
Log.e(TAG, "Zygote: error closing sockets", ex);
|
||||||
|
} catch (libcore.io.ErrnoException ex) {
|
||||||
|
Log.e(TAG, "Zygote: error closing descriptor", ex);
|
||||||
}
|
}
|
||||||
|
|
||||||
sServerSocket = null;
|
sServerSocket = null;
|
||||||
|
Reference in New Issue
Block a user