From 70ef29b04ee4ef7d7acfec79041dbe800961195e Mon Sep 17 00:00:00 2001 From: Dave Platt Date: Thu, 12 Dec 2013 15:45:49 -0800 Subject: [PATCH] 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 Change-Id: I8c9fb073924ac33d594bd3bd0eb11d3d1d402506 --- core/java/com/android/internal/os/ZygoteInit.java | 6 ++++++ 1 file changed, 6 insertions(+) diff --git a/core/java/com/android/internal/os/ZygoteInit.java b/core/java/com/android/internal/os/ZygoteInit.java index 48092f6be230c..9dc91164c1d87 100644 --- a/core/java/com/android/internal/os/ZygoteInit.java +++ b/core/java/com/android/internal/os/ZygoteInit.java @@ -192,10 +192,16 @@ public class ZygoteInit { static void closeServerSocket() { try { if (sServerSocket != null) { + FileDescriptor fd = sServerSocket.getFileDescriptor(); sServerSocket.close(); + if (fd != null) { + Libcore.os.close(fd); + } } } catch (IOException ex) { Log.e(TAG, "Zygote: error closing sockets", ex); + } catch (libcore.io.ErrnoException ex) { + Log.e(TAG, "Zygote: error closing descriptor", ex); } sServerSocket = null;