summaryrefslogtreecommitdiff
path: root/services/net/java
diff options
context:
space:
mode:
authorRemi NGUYEN VAN <reminv@google.com>2019-06-24 19:57:11 +0900
committerRemi NGUYEN VAN <reminv@google.com>2019-06-24 23:28:06 +0900
commit6dcffa0c771120fe3f08e7ac3545252f89cffe95 (patch)
tree669c333c3e20f19f57202b426fc93c5aa66aa615 /services/net/java
parentff32698f0fc04303006143efc4d31966c968b50e (diff)
Fix leak of DhcpServer on tethering stop error
Tactical, minimal fix to make sure the DhcpServer is stopped when disabling tethering. The current code may throw if the interface is gone when calling mNMService.setInterfaceConfig() on teardown. Make sure DHCP is stopped regardless of what happens. A longer term fix will be to figure out the right flow to teardown the interface and avoid errors on setInterfaceConfig(). Bug: 124520692 Test: Manual: no more socket leaked when stopping USB tethering Change-Id: Ib87d89a2e5fdb64b8f3dfae48d82c970f3ae6161
Diffstat (limited to 'services/net/java')
-rw-r--r--services/net/java/android/net/ip/IpServer.java11
1 files changed, 11 insertions, 0 deletions
diff --git a/services/net/java/android/net/ip/IpServer.java b/services/net/java/android/net/ip/IpServer.java
index 66884c60b0bc..6a6a1307723e 100644
--- a/services/net/java/android/net/ip/IpServer.java
+++ b/services/net/java/android/net/ip/IpServer.java
@@ -433,6 +433,9 @@ public class IpServer extends StateMachine {
}
}
ifcg.clearFlag("running");
+
+ // TODO: this may throw if the interface is already gone. Do proper handling and
+ // simplify the DHCP server start/stop.
mNMService.setInterfaceConfig(mIfaceName, ifcg);
if (!configureDhcp(enabled, (Inet4Address) addr, prefixLen)) {
@@ -440,6 +443,14 @@ public class IpServer extends StateMachine {
}
} catch (Exception e) {
mLog.e("Error configuring interface " + e);
+ if (!enabled) {
+ try {
+ // Calling stopDhcp several times is fine
+ stopDhcp();
+ } catch (Exception dhcpError) {
+ mLog.e("Error stopping DHCP", dhcpError);
+ }
+ }
return false;
}