diff options
| author | Lorenzo Colitti <lorenzo@google.com> | 2013-03-17 03:21:35 +0900 |
|---|---|---|
| committer | Lorenzo Colitti <lorenzo@google.com> | 2013-03-17 03:21:35 +0900 |
| commit | d9b3d55152ca6184caf64667b0d03c08eff02263 (patch) | |
| tree | 79f995232e74bec2ca4fd02cd2fd7c4bbd670e27 /services/java/com/android/server/NetworkManagementService.java | |
| parent | c8a9fdff4b229b129920aecb1d048d1ff36729b4 (diff) | |
Catch RuntimeException in NMService notifications
Currently, NetworkManagementService only catches RemoteExceptions
when calling the BaseNetworkObserver notification methods (e.g.,
interfaceStatusChanged). However, if the observer is in the same
process, unchecked exceptions can occur as well.
When this happens, finishBroadcast does not get called, and no
further notifications can be sent, because any attempt to do so
fails with a "beginBroadcast() called while already in a
broadcast" exception.
Fix this by catching RuntimeException as well.
Bug: 8397534
Bug: 8276725
Change-Id: Icd6f32128707244978943c48a9ea3a2b952a2957
Diffstat (limited to 'services/java/com/android/server/NetworkManagementService.java')
| -rw-r--r-- | services/java/com/android/server/NetworkManagementService.java | 6 |
1 files changed, 6 insertions, 0 deletions
diff --git a/services/java/com/android/server/NetworkManagementService.java b/services/java/com/android/server/NetworkManagementService.java index 768670575baa..2210a180d6d4 100644 --- a/services/java/com/android/server/NetworkManagementService.java +++ b/services/java/com/android/server/NetworkManagementService.java @@ -233,6 +233,7 @@ public class NetworkManagementService extends INetworkManagementService.Stub try { mObservers.getBroadcastItem(i).interfaceStatusChanged(iface, up); } catch (RemoteException e) { + } catch (RuntimeException e) { } } mObservers.finishBroadcast(); @@ -248,6 +249,7 @@ public class NetworkManagementService extends INetworkManagementService.Stub try { mObservers.getBroadcastItem(i).interfaceLinkStateChanged(iface, up); } catch (RemoteException e) { + } catch (RuntimeException e) { } } mObservers.finishBroadcast(); @@ -262,6 +264,7 @@ public class NetworkManagementService extends INetworkManagementService.Stub try { mObservers.getBroadcastItem(i).interfaceAdded(iface); } catch (RemoteException e) { + } catch (RuntimeException e) { } } mObservers.finishBroadcast(); @@ -281,6 +284,7 @@ public class NetworkManagementService extends INetworkManagementService.Stub try { mObservers.getBroadcastItem(i).interfaceRemoved(iface); } catch (RemoteException e) { + } catch (RuntimeException e) { } } mObservers.finishBroadcast(); @@ -295,6 +299,7 @@ public class NetworkManagementService extends INetworkManagementService.Stub try { mObservers.getBroadcastItem(i).limitReached(limitName, iface); } catch (RemoteException e) { + } catch (RuntimeException e) { } } mObservers.finishBroadcast(); @@ -309,6 +314,7 @@ public class NetworkManagementService extends INetworkManagementService.Stub try { mObservers.getBroadcastItem(i).interfaceClassDataActivityChanged(label, active); } catch (RemoteException e) { + } catch (RuntimeException e) { } } mObservers.finishBroadcast(); |
