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

Commit 80b3bc15 authored by Ruoyao Liu (刘若尧)'s avatar Ruoyao Liu (刘若尧) Committed by Denis Hsu
Browse files

Fix FD leak in NetworkStack

FD leak happened in IpClientLinkObserver, MyNetlinkMonitor never stop
and socket never been closed. Socket should be close properly when
IpClient shutdown.

Bug: 161330494
Change-Id: I398314218a11fea2724cd77a91497440ee309c69
parent 2b0d8046
Loading
Loading
Loading
Loading
+1 −0
Original line number Diff line number Diff line
@@ -777,6 +777,7 @@ public class IpClient extends StateMachine {

    private void stopStateMachineUpdaters() {
        mObserverRegistry.unregisterObserver(mLinkObserver);
        mLinkObserver.shutdown();
    }

    @Override
+7 −1
Original line number Diff line number Diff line
@@ -114,6 +114,7 @@ public class IpClientLinkObserver implements NetworkObserver {
    private DnsServerRepository mDnsServerRepository;
    private final AlarmManager mAlarmManager;
    private final Configuration mConfig;
    private final Handler mHandler;

    private final MyNetlinkMonitor mNetlinkMonitor;

@@ -127,11 +128,16 @@ public class IpClientLinkObserver implements NetworkObserver {
        mLinkProperties = new LinkProperties();
        mLinkProperties.setInterfaceName(mInterfaceName);
        mConfig = config;
        mHandler = h;
        mInterfaceLinkState = true; // Assume up by default
        mDnsServerRepository = new DnsServerRepository(config.minRdnssLifetime);
        mAlarmManager = (AlarmManager) context.getSystemService(Context.ALARM_SERVICE);
        mNetlinkMonitor = new MyNetlinkMonitor(h, log, mTag);
        h.post(mNetlinkMonitor::start);
        mHandler.post(mNetlinkMonitor::start);
    }

    public void shutdown() {
        mHandler.post(mNetlinkMonitor::stop);
    }

    private void maybeLog(String operation, String iface, LinkAddress address) {