diff options
| author | Treehugger Robot <treehugger-gerrit@google.com> | 2021-10-20 08:40:08 +0000 |
|---|---|---|
| committer | Gerrit Code Review <noreply-gerritcodereview@google.com> | 2021-10-20 08:40:08 +0000 |
| commit | f8d1f3d1cd83abf7caa756d0dbc863468ee11c75 (patch) | |
| tree | 1d3f94496aa1e9859a69033f1df10aaf055d9031 /Tethering/common/TetheringLib/src/android/net/TetheringManager.java | |
| parent | 9d0c5419c9255153cdfb51f7c7bc9284a30b4a43 (diff) | |
| parent | 819e19ea2ab4c8c9570715ccdd2bb6aee1875513 (diff) | |
Merge "Unregister the tethering internal callback in finalize"
Diffstat (limited to 'Tethering/common/TetheringLib/src/android/net/TetheringManager.java')
| -rw-r--r-- | Tethering/common/TetheringLib/src/android/net/TetheringManager.java | 17 |
1 files changed, 17 insertions, 0 deletions
diff --git a/Tethering/common/TetheringLib/src/android/net/TetheringManager.java b/Tethering/common/TetheringLib/src/android/net/TetheringManager.java index c137b4924d..9e6e34ee69 100644 --- a/Tethering/common/TetheringLib/src/android/net/TetheringManager.java +++ b/Tethering/common/TetheringLib/src/android/net/TetheringManager.java @@ -290,6 +290,23 @@ public class TetheringManager { getConnector(c -> c.registerTetheringEventCallback(mCallback, pkgName)); } + /** @hide */ + @Override + protected void finalize() throws Throwable { + final String pkgName = mContext.getOpPackageName(); + Log.i(TAG, "unregisterTetheringEventCallback:" + pkgName); + // 1. It's generally not recommended to perform long operations in finalize, but while + // unregisterTetheringEventCallback does an IPC, it's a oneway IPC so should not block. + // 2. If the connector is not yet connected, TetheringManager is impossible to finalize + // because the connector polling thread strong reference the TetheringManager object. So + // it's guaranteed that registerTetheringEventCallback was already called before calling + // unregisterTetheringEventCallback in finalize. + if (mConnector == null) Log.wtf(TAG, "null connector in finalize!"); + getConnector(c -> c.unregisterTetheringEventCallback(mCallback, pkgName)); + + super.finalize(); + } + private void startPollingForConnector() { new Thread(() -> { while (true) { |
