summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorAndroid Build Coastguard Worker <android-build-coastguard-worker@google.com>2021-07-03 03:09:11 +0000
committerAndroid Build Coastguard Worker <android-build-coastguard-worker@google.com>2021-07-03 03:09:11 +0000
commitd9830e0b3a0e477a341c4c39b48222165583214a (patch)
tree11ba5b0193f52c7dd07f5d0fb1a312870388fe90
parentfb1737dbaecfbd1f59fbd1f334652dc2a7325f03 (diff)
parent0871e916ef27a7cc7c5ac5f125ffd61d7f5f5400 (diff)
downloadincremental_delivery-d9830e0b3a0e477a341c4c39b48222165583214a.tar.gz
Snap for 7519874 from 0871e916ef27a7cc7c5ac5f125ffd61d7f5f5400 to sc-d1-release
Change-Id: Ia7a5903c91ba1ee2745fa84db995c5f374ddcb2f
-rw-r--r--libdataloader/DataLoaderConnector.cpp25
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;
}