From 93e59ee7260eb2fdd89e89e8eea8e63da73f3bb5 Mon Sep 17 00:00:00 2001 From: Lorenzo Colitti Date: Thu, 18 Jun 2020 16:36:32 +0000 Subject: [PATCH 1/2] Memory leak due to no stop for IpNeighborMonitor. 1. When Wi-Fi enabled, ap0 interface is added and IpNeighborMonitor's start() is invoked in IpServer's constructor. 2. There's no stop for IpNeighborMonitor when IpServer stop. 3. During overnight test for Wi-Fi, networkstack is too slow to process request due to memory leak in IpNeighborMonitor and binder buffer is blocked causing exception. Solution: Invoke IpNeighborMonitor.stop() in UnavailableState.enter(). Bug: 159097215 Test: automatic, turn on and off Wi-Fi every 6 seconds overnight Original-Change: https://android-review.googlesource.com/1343440 Merged-In: I8f60c13706f05306e8f25a15f7861d7ecabbc10e Change-Id: I8f60c13706f05306e8f25a15f7861d7ecabbc10e --- Tethering/src/android/net/ip/IpServer.java | 1 + 1 file changed, 1 insertion(+) diff --git a/Tethering/src/android/net/ip/IpServer.java b/Tethering/src/android/net/ip/IpServer.java index 5239947403..c436be2e9b 100644 --- a/Tethering/src/android/net/ip/IpServer.java +++ b/Tethering/src/android/net/ip/IpServer.java @@ -1322,6 +1322,7 @@ public class IpServer extends StateMachine { class UnavailableState extends State { @Override public void enter() { + mIpNeighborMonitor.stop(); mLastError = TetheringManager.TETHER_ERROR_NO_ERROR; sendInterfaceState(STATE_UNAVAILABLE); } From 9644bc01dddfe5d801ca722a3f9fcdda4036e420 Mon Sep 17 00:00:00 2001 From: Treehugger Robot Date: Fri, 19 Jun 2020 03:04:46 +0000 Subject: [PATCH 2/2] Test that IpNeighborMonitor is stopped when IpServer stops. Bug: 159097215 Test: test-only change Original-Change: https://android-review.googlesource.com/1343441 Merged-In: I2292c1cbff06a304f70191b88d833b19af2b8b92 Change-Id: I2292c1cbff06a304f70191b88d833b19af2b8b92 --- Tethering/tests/unit/src/android/net/ip/IpServerTest.java | 1 + 1 file changed, 1 insertion(+) diff --git a/Tethering/tests/unit/src/android/net/ip/IpServerTest.java b/Tethering/tests/unit/src/android/net/ip/IpServerTest.java index c65069c544..30a9d2252e 100644 --- a/Tethering/tests/unit/src/android/net/ip/IpServerTest.java +++ b/Tethering/tests/unit/src/android/net/ip/IpServerTest.java @@ -860,6 +860,7 @@ public class IpServerTest { verify(mBpfCoordinator).tetherOffloadRuleClear(mIpServer); verify(mNetd).tetherOffloadRuleRemove(matches(UPSTREAM_IFINDEX, neighA, macA)); verify(mNetd).tetherOffloadRuleRemove(matches(UPSTREAM_IFINDEX, neighB, macB)); + verify(mIpNeighborMonitor).stop(); resetNetdAndBpfCoordinator(); }