diff options
| author | Treehugger Robot <treehugger-gerrit@google.com> | 2018-03-30 20:52:42 +0000 |
|---|---|---|
| committer | Gerrit Code Review <noreply-gerritcodereview@google.com> | 2018-03-30 20:52:42 +0000 |
| commit | 34ce11f2bd34a6296268bc6bcf49122a4b2db710 (patch) | |
| tree | eb7467d16062f5628ce52ee25c4eacf3128f56bb /core/java | |
| parent | 786150bc0924e6effbddb8d11592d18f1372498e (diff) | |
| parent | f72f5b30afccd0a6f46a6493059c3b274fdd1c22 (diff) | |
Merge "Fix socket leaks in various android.net.Network methods."
Diffstat (limited to 'core/java')
| -rw-r--r-- | core/java/android/net/Network.java | 40 |
1 files changed, 33 insertions, 7 deletions
diff --git a/core/java/android/net/Network.java b/core/java/android/net/Network.java index 3683d3450b41..f14847f59ed7 100644 --- a/core/java/android/net/Network.java +++ b/core/java/android/net/Network.java @@ -25,6 +25,8 @@ import android.system.OsConstants; import com.android.okhttp.internalandroidapi.Dns; import com.android.okhttp.internalandroidapi.HttpURLConnectionFactory; +import libcore.io.IoUtils; + import java.io.FileDescriptor; import java.io.IOException; import java.net.DatagramSocket; @@ -136,9 +138,15 @@ public class Network implements Parcelable { for (int i = 0; i < hostAddresses.length; i++) { try { Socket socket = createSocket(); - if (localAddress != null) socket.bind(localAddress); - socket.connect(new InetSocketAddress(hostAddresses[i], port)); - return socket; + boolean failed = true; + try { + if (localAddress != null) socket.bind(localAddress); + socket.connect(new InetSocketAddress(hostAddresses[i], port)); + failed = false; + return socket; + } finally { + if (failed) IoUtils.closeQuietly(socket); + } } catch (IOException e) { if (i == (hostAddresses.length - 1)) throw e; } @@ -155,15 +163,27 @@ public class Network implements Parcelable { public Socket createSocket(InetAddress address, int port, InetAddress localAddress, int localPort) throws IOException { Socket socket = createSocket(); - socket.bind(new InetSocketAddress(localAddress, localPort)); - socket.connect(new InetSocketAddress(address, port)); + boolean failed = true; + try { + socket.bind(new InetSocketAddress(localAddress, localPort)); + socket.connect(new InetSocketAddress(address, port)); + failed = false; + } finally { + if (failed) IoUtils.closeQuietly(socket); + } return socket; } @Override public Socket createSocket(InetAddress host, int port) throws IOException { Socket socket = createSocket(); - socket.connect(new InetSocketAddress(host, port)); + boolean failed = true; + try { + socket.connect(new InetSocketAddress(host, port)); + failed = false; + } finally { + if (failed) IoUtils.closeQuietly(socket); + } return socket; } @@ -175,7 +195,13 @@ public class Network implements Parcelable { @Override public Socket createSocket() throws IOException { Socket socket = new Socket(); - bindSocket(socket); + boolean failed = true; + try { + bindSocket(socket); + failed = false; + } finally { + if (failed) IoUtils.closeQuietly(socket); + } return socket; } } |
