diff options
author | Android Build Coastguard Worker <android-build-coastguard-worker@google.com> | 2021-07-03 03:09:11 +0000 |
---|---|---|
committer | Android Build Coastguard Worker <android-build-coastguard-worker@google.com> | 2021-07-03 03:09:11 +0000 |
commit | d9830e0b3a0e477a341c4c39b48222165583214a (patch) | |
tree | 11ba5b0193f52c7dd07f5d0fb1a312870388fe90 | |
parent | fb1737dbaecfbd1f59fbd1f334652dc2a7325f03 (diff) | |
parent | 0871e916ef27a7cc7c5ac5f125ffd61d7f5f5400 (diff) | |
download | incremental_delivery-d9830e0b3a0e477a341c4c39b48222165583214a.tar.gz |
Snap for 7519874 from 0871e916ef27a7cc7c5ac5f125ffd61d7f5f5400 to sc-d1-release
Change-Id: Ia7a5903c91ba1ee2745fa84db995c5f374ddcb2f
-rw-r--r-- | libdataloader/DataLoaderConnector.cpp | 25 |
1 files changed, 13 insertions, 12 deletions
diff --git a/libdataloader/DataLoaderConnector.cpp b/libdataloader/DataLoaderConnector.cpp index d58bbb3..91ff74e 100644 --- a/libdataloader/DataLoaderConnector.cpp +++ b/libdataloader/DataLoaderConnector.cpp @@ -318,8 +318,17 @@ public: DataLoaderConnector(const DataLoaderConnector&) = delete; DataLoaderConnector(const DataLoaderConnector&&) = delete; virtual ~DataLoaderConnector() { + CHECK(mDataLoader); + if (mDataLoader->onDestroy) { + mDataLoader->onDestroy(mDataLoader); + } + checkAndClearJavaException(__func__); + JNIEnv* env = GetOrAttachJNIEnvironment(mJvm); + const auto& jni = jniIds(env); + reportStatusViaCallback(env, mListener, mStorageId, jni.constants.DATA_LOADER_DESTROYED); + env->DeleteGlobalRef(mService); env->DeleteGlobalRef(mServiceConnector); env->DeleteGlobalRef(mCallbackControl); @@ -400,13 +409,6 @@ public: } checkAndClearJavaException(__func__); } - void onDestroy() { - CHECK(mDataLoader); - if (mDataLoader->onDestroy) { - mDataLoader->onDestroy(mDataLoader); - } - checkAndClearJavaException(__func__); - } bool onPrepareImage(const android::dataloader::DataLoaderInstallationFiles& addedFiles) { CHECK(mDataLoader); @@ -933,14 +935,13 @@ bool DataLoaderService_OnDestroy(JNIEnv* env, jint storageId) { globals().dataLoaderConnectors.erase(dlIt); } const UniqueControl* control = &(dataLoaderConnector->control()); - jobject listener = dataLoaderConnector->getListenerLocalRef(env); // Stop/destroy. DataLoaderService_OnStop_NoStatus(control, dataLoaderConnector); - dataLoaderConnector->onDestroy(); - - const auto& jni = jniIds(env); - reportStatusViaCallback(env, listener, storageId, jni.constants.DATA_LOADER_DESTROYED); + // This will destroy the last instance of the DataLoaderConnectorPtr and should trigger the + // destruction of the DataLoader. However if there are any hanging instances, the destruction + // will be postponed. E.g. OnPrepareImage in progress at the same time we call OnDestroy. + dataLoaderConnector = {}; return true; } |