Ensure TetheringService binder is alive after system_server crash
servicemanager does not restart on a system_server crash, so mConnectorSupplier might temporarily return a stale version of TetheringService. Any operation on the stale binder causes a DeadObjectException. This change adds a check to ensure the binder is alive before use and falls back to polling servicemanager. Bug: 353920381 Bug: 271276384 Change-Id: I549d5a07966ebaed7e4a4ebe96e831dcac3b05bd Signed-off-by: charid <dhoddeti.brahmachari@oppo.com>
This commit is contained in:
parent
6ac23bd155
commit
d236106983
1 changed files with 4 additions and 3 deletions
|
|
@ -321,7 +321,9 @@ public class TetheringManager {
|
|||
// up and be sent from a worker thread; later, they are always sent from the caller thread.
|
||||
// Considering that it's just oneway binder calls, and ordering is preserved, this seems
|
||||
// better than inconsistent behavior persisting after boot.
|
||||
if (connector != null) {
|
||||
// If system server restarted, mConnectorSupplier might temporarily return a stale (i.e.
|
||||
// dead) version of TetheringService.
|
||||
if (connector != null && connector.isBinderAlive()) {
|
||||
mConnector = ITetheringConnector.Stub.asInterface(connector);
|
||||
} else {
|
||||
startPollingForConnector();
|
||||
|
|
@ -356,9 +358,8 @@ public class TetheringManager {
|
|||
} catch (InterruptedException e) {
|
||||
// Not much to do here, the system needs to wait for the connector
|
||||
}
|
||||
|
||||
final IBinder connector = mConnectorSupplier.get();
|
||||
if (connector != null) {
|
||||
if (connector != null && connector.isBinderAlive()) {
|
||||
onTetheringConnected(ITetheringConnector.Stub.asInterface(connector));
|
||||
return;
|
||||
}
|
||||
|
|
|
|||
Loading…
Reference in a new issue