diff options
| author | 2021-03-02 18:39:54 +0000 | |
|---|---|---|
| committer | 2021-03-02 18:39:54 +0000 | |
| commit | 2190aed87a1aae5b859a4fb20a5ffbbb0528b2b5 (patch) | |
| tree | cdce2e3fed00a55806f1acd506cce828ccb80511 | |
| parent | 90b5c66337c68ef5b14eca6d3b9e3484041bc063 (diff) | |
| parent | e98e2cbdca8889275b5d2707407d38659083e506 (diff) | |
Merge "Correct rebind to DataLoader after crash/death." into sc-dev
| -rw-r--r-- | services/core/java/com/android/server/pm/DataLoaderManagerService.java | 28 |
1 files changed, 18 insertions, 10 deletions
diff --git a/services/core/java/com/android/server/pm/DataLoaderManagerService.java b/services/core/java/com/android/server/pm/DataLoaderManagerService.java index 9a9b14c31314..b34611b9cd6f 100644 --- a/services/core/java/com/android/server/pm/DataLoaderManagerService.java +++ b/services/core/java/com/android/server/pm/DataLoaderManagerService.java @@ -207,35 +207,37 @@ public class DataLoaderManagerService extends SystemService { @Override public void onServiceDisconnected(ComponentName arg0) { Slog.i(TAG, "DataLoader " + mId + " disconnected, but will try to recover"); - callListener(IDataLoaderStatusListener.DATA_LOADER_DESTROYED); - destroy(); + unbindAndReportDestroyed(); } @Override public void onBindingDied(ComponentName name) { Slog.i(TAG, "DataLoader " + mId + " died"); - callListener(IDataLoaderStatusListener.DATA_LOADER_DESTROYED); - destroy(); + unbindAndReportDestroyed(); } @Override public void onNullBinding(ComponentName name) { Slog.i(TAG, "DataLoader " + mId + " failed to start"); - callListener(IDataLoaderStatusListener.DATA_LOADER_DESTROYED); - destroy(); + unbindAndReportDestroyed(); } @Override public void binderDied() { Slog.i(TAG, "DataLoader " + mId + " died"); - callListener(IDataLoaderStatusListener.DATA_LOADER_DESTROYED); - destroy(); + unbindAndReportDestroyed(); } IDataLoader getDataLoader() { return mDataLoader; } + private void unbindAndReportDestroyed() { + if (unbind()) { + callListener(IDataLoaderStatusListener.DATA_LOADER_DESTROYED); + } + } + void destroy() { if (mDataLoader != null) { try { @@ -244,11 +246,15 @@ public class DataLoaderManagerService extends SystemService { } mDataLoader = null; } + unbind(); + } + + boolean unbind() { try { mContext.unbindService(this); } catch (Exception ignored) { } - remove(); + return remove(); } private boolean append() { @@ -266,12 +272,14 @@ public class DataLoaderManagerService extends SystemService { } } - private void remove() { + private boolean remove() { synchronized (mServiceConnections) { if (mServiceConnections.get(mId) == this) { mServiceConnections.remove(mId); + return true; } } + return false; } private void callListener(int status) { |