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
This commit is contained in:
@@ -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;
|
||||
|
||||
Reference in New Issue
Block a user