From 41c81248e8b55d2281a9cc7011247369fe829958 Mon Sep 17 00:00:00 2001 From: Treehugger Robot Date: Thu, 19 Mar 2020 15:23:45 +0000 Subject: [PATCH] Release the interface request when Ethernet tethering is stopped. When the Ethernet interface becomes unavailable (e.g., because the cable was unplugged or the interface was removed), or when setEthernetTethering(false) is called, release the Ethernet interface request. This ensures that: - The Ethernet interface immediately becomes available for use in client mode. - If an interface later becomes available, tethering is not automatically started. This is consistent with what happens for other downstream types such as wifi and USB. Evey time one of those downstreams goes down, tethering is stopped and will not be restarted. Test: manual Bug: 148824036 Change-Id: Iaf85e800569f2e08c39f7ebb96f8aa34f6e53133 Merged-In: Iaf85e800569f2e08c39f7ebb96f8aa34f6e53133 (cherry picked from commit e54c92e5657abe2ce5da9dcba76b89c5e540cc44) --- .../connectivity/tethering/Tethering.java | 18 +++++++++--------- 1 file changed, 9 insertions(+), 9 deletions(-) diff --git a/packages/Tethering/src/com/android/server/connectivity/tethering/Tethering.java b/packages/Tethering/src/com/android/server/connectivity/tethering/Tethering.java index 8e2d4f430889f..039143df64fe9 100644 --- a/packages/Tethering/src/com/android/server/connectivity/tethering/Tethering.java +++ b/packages/Tethering/src/com/android/server/connectivity/tethering/Tethering.java @@ -641,21 +641,21 @@ public class Tethering { mEthernetIfaceRequest = em.requestTetheredInterface(mExecutor, mEthernetCallback); } else { stopEthernetTetheringLocked(); - if (mEthernetCallback != null) { - mEthernetIfaceRequest.release(); - mEthernetCallback = null; - mEthernetIfaceRequest = null; - } } } return TETHER_ERROR_NO_ERROR; } private void stopEthernetTetheringLocked() { - if (mConfiguredEthernetIface == null) return; - changeInterfaceState(mConfiguredEthernetIface, IpServer.STATE_AVAILABLE); - stopTrackingInterfaceLocked(mConfiguredEthernetIface); - mConfiguredEthernetIface = null; + if (mConfiguredEthernetIface != null) { + stopTrackingInterfaceLocked(mConfiguredEthernetIface); + mConfiguredEthernetIface = null; + } + if (mEthernetCallback != null) { + mEthernetIfaceRequest.release(); + mEthernetCallback = null; + mEthernetIfaceRequest = null; + } } private class EthernetCallback implements EthernetManager.TetheredInterfaceCallback {