Donate to e Foundation | Murena handsets with /e/OS | Own a part of Murena! Learn more

Commit c0fd05cf authored by Remi NGUYEN VAN's avatar Remi NGUYEN VAN
Browse files

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
Merged-In: Ie73481e8d91ce43e4939f8c31a9ce431e382c6d9
(cherry picked from commit fe1ad3d0)

Change-Id: Ia80761cb42dc62b14128fc60009be82ae9a008da
parent d701e951
Loading
Loading
Loading
Loading
+11 −0
Original line number Diff line number Diff line
@@ -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;
        }