diff options
author | Robert Greenwalt <rgreenwalt@google.com> | 2011-11-02 21:28:33 +0000 |
---|---|---|
committer | Android Git Automerger <android-git-automerger@android.com> | 2011-11-02 21:28:33 +0000 |
commit | 4a113251078ad028d1a071ebf5562185275c7039 (patch) | |
tree | 2dc3bfa51057b599ace65f15d9d58d97427d34ac /services | |
parent | 42774decd903d0bbd1c57c9aa829719f2a683231 (diff) | |
parent | 451fa13e82ea1226895b41282fdb33bf9fea5d19 (diff) | |
download | frameworks_base-4a113251078ad028d1a071ebf5562185275c7039.zip frameworks_base-4a113251078ad028d1a071ebf5562185275c7039.tar.gz frameworks_base-4a113251078ad028d1a071ebf5562185275c7039.tar.bz2 |
am 451fa13e: Merge "Ignore errors when untethering" into ics-mr0
* commit '451fa13e82ea1226895b41282fdb33bf9fea5d19':
Ignore errors when untethering
Diffstat (limited to 'services')
-rw-r--r-- | services/java/com/android/server/connectivity/Tethering.java | 79 |
1 files changed, 27 insertions, 52 deletions
diff --git a/services/java/com/android/server/connectivity/Tethering.java b/services/java/com/android/server/connectivity/Tethering.java index 1107fe9..7bd29d9 100644 --- a/services/java/com/android/server/connectivity/Tethering.java +++ b/services/java/com/android/server/connectivity/Tethering.java @@ -73,7 +73,7 @@ public class Tethering extends INetworkManagementEventObserver.Stub { private Context mContext; private final static String TAG = "Tethering"; private final static boolean DBG = true; - private final static boolean VDBG = false; + private final static boolean VDBG = true; // TODO - remove both of these - should be part of interface inspection/selection stuff private String[] mTetherableUsbRegexs; @@ -920,6 +920,29 @@ public class Tethering extends INetworkManagementEventObserver.Stub { setTethered(true); sendTetherStateChangedBroadcast(); } + + void cleanupUpstream() { + if (mMyUpstreamIfaceName != null) { + // note that we don't care about errors here. + // sometimes interfaces are gone before we get + // to remove their rules, which generates errors. + // just do the best we can. + try { + // about to tear down NAT; gather remaining statistics + mStatsService.forceUpdate(); + } catch (Exception e) { + if (VDBG) Log.e(TAG, "Exception in forceUpdate: " + e.toString()); + } + try { + mNMService.disableNat(mIfaceName, mMyUpstreamIfaceName); + } catch (Exception e) { + if (VDBG) Log.e(TAG, "Exception in disableNat: " + e.toString()); + } + mMyUpstreamIfaceName = null; + } + return; + } + @Override public boolean processMessage(Message message) { if (VDBG) Log.d(TAG, "TetheredState.processMessage what=" + message.what); @@ -928,23 +951,7 @@ public class Tethering extends INetworkManagementEventObserver.Stub { switch (message.what) { case CMD_TETHER_UNREQUESTED: case CMD_INTERFACE_DOWN: - if (mMyUpstreamIfaceName != null) { - try { - // about to tear down NAT; gather remaining statistics - mStatsService.forceUpdate(); - - mNMService.disableNat(mIfaceName, mMyUpstreamIfaceName); - mMyUpstreamIfaceName = null; - } catch (Exception e) { - try { - mNMService.untetherInterface(mIfaceName); - } catch (Exception ee) {} - - setLastErrorAndTransitionToInitialState( - ConnectivityManager.TETHER_ERROR_DISABLE_NAT_ERROR); - break; - } - } + cleanupUpstream(); try { mNMService.untetherInterface(mIfaceName); } catch (Exception e) { @@ -975,23 +982,7 @@ public class Tethering extends INetworkManagementEventObserver.Stub { if (VDBG) Log.d(TAG, "Connection changed noop - dropping"); break; } - if (mMyUpstreamIfaceName != null) { - try { - // about to tear down NAT; gather remaining statistics - mStatsService.forceUpdate(); - - mNMService.disableNat(mIfaceName, mMyUpstreamIfaceName); - mMyUpstreamIfaceName = null; - } catch (Exception e) { - try { - mNMService.untetherInterface(mIfaceName); - } catch (Exception ee) {} - - setLastErrorAndTransitionToInitialState( - ConnectivityManager.TETHER_ERROR_DISABLE_NAT_ERROR); - break; - } - } + cleanupUpstream(); if (newUpstreamIfaceName != null) { try { mNMService.enableNat(mIfaceName, newUpstreamIfaceName); @@ -1016,23 +1007,7 @@ public class Tethering extends INetworkManagementEventObserver.Stub { error = true; // fall through case CMD_TETHER_MODE_DEAD: - if (mMyUpstreamIfaceName != null) { - try { - // about to tear down NAT; gather remaining statistics - mStatsService.forceUpdate(); - - mNMService.disableNat(mIfaceName, mMyUpstreamIfaceName); - mMyUpstreamIfaceName = null; - } catch (Exception e) { - try { - mNMService.untetherInterface(mIfaceName); - } catch (Exception ee) {} - - setLastErrorAndTransitionToInitialState( - ConnectivityManager.TETHER_ERROR_DISABLE_NAT_ERROR); - break; - } - } + cleanupUpstream(); try { mNMService.untetherInterface(mIfaceName); } catch (Exception e) { |