From 2ed20f87684a892d640a91f1961f369bbbc7d05e Mon Sep 17 00:00:00 2001 From: Nick Kralevich Date: Mon, 13 Dec 2010 14:32:17 -0800 Subject: [PATCH] Avoid leaking sockets. When a DNS lookup fails, we end up creating a datagram socket but never properly close it. This wastes limited valuable file descriptors and causes CTS test failures. Generally, we should ensure that sockets or files are opened in a try block, and closed in a finally block. Bug: 3276283 Change-Id: I3432f3bc061268c7367948230f6edbdfcec55892 --- core/java/android/net/SntpClient.java | 8 ++++++-- 1 file changed, 6 insertions(+), 2 deletions(-) diff --git a/core/java/android/net/SntpClient.java b/core/java/android/net/SntpClient.java index f607ee916a4c4..3e21e2dbdaa9d 100644 --- a/core/java/android/net/SntpClient.java +++ b/core/java/android/net/SntpClient.java @@ -72,8 +72,9 @@ public class SntpClient * @return true if the transaction was successful. */ public boolean requestTime(String host, int timeout) { + DatagramSocket socket = null; try { - DatagramSocket socket = new DatagramSocket(); + socket = new DatagramSocket(); socket.setSoTimeout(timeout); InetAddress address = InetAddress.getByName(host); byte[] buffer = new byte[NTP_PACKET_SIZE]; @@ -96,7 +97,6 @@ public class SntpClient socket.receive(response); long responseTicks = SystemClock.elapsedRealtime(); long responseTime = requestTime + (responseTicks - requestTicks); - socket.close(); // extract the results long originateTime = readTimeStamp(buffer, ORIGINATE_TIME_OFFSET); @@ -123,6 +123,10 @@ public class SntpClient } catch (Exception e) { if (Config.LOGD) Log.d(TAG, "request time failed: " + e); return false; + } finally { + if (socket != null) { + socket.close(); + } } return true;