summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorAlex Buynytskyy <alexbuy@google.com>2021-04-23 17:24:33 -0700
committerAlex Buynytskyy <alexbuy@google.com>2021-04-23 17:29:26 -0700
commit63039df3b5cca2d930975c8fcd8bd2a0deae9f8e (patch)
treed0262e53d03f6ca41c0bd6fa6061b2e185253d65
parentddbe38525a58d9bbc909a82a5da7bfddbf0f4718 (diff)
downloadincremental_delivery-63039df3b5cca2d930975c8fcd8bd2a0deae9f8e.tar.gz
Return UNAVAILABLE status from all important DL methods.
In case of inhandled Java exceptions. Bug: 182214420 Test: atest PackageManagerShellCommandTest PackageManagerShellCommandIncrementalTest IncrementalServiceTest PackageManagerServiceTest ChecksumsTest Change-Id: I4fab494145cef1f9b723587f6d72ea60e084cf91
-rw-r--r--libdataloader/DataLoaderConnector.cpp30
1 files changed, 18 insertions, 12 deletions
diff --git a/libdataloader/DataLoaderConnector.cpp b/libdataloader/DataLoaderConnector.cpp
index aa6ad22..d90851f 100644
--- a/libdataloader/DataLoaderConnector.cpp
+++ b/libdataloader/DataLoaderConnector.cpp
@@ -209,6 +209,17 @@ const JniIds& jniIds(JNIEnv* env) {
return ids;
}
+bool checkAndClearJavaException(JNIEnv* env, std::string_view method) {
+ if (!env->ExceptionCheck()) {
+ return false;
+ }
+
+ LOG(ERROR) << "Java exception during DataLoader::" << method;
+ env->ExceptionDescribe();
+ env->ExceptionClear();
+ return true;
+}
+
bool reportStatusViaCallback(JNIEnv* env, jobject listener, jint storageId, jint status) {
if (listener == nullptr) {
ALOGE("No listener object to talk to IncrementalService. "
@@ -400,9 +411,6 @@ public:
CHECK(mDataLoader);
bool result = !mDataLoader->onPrepareImage ||
mDataLoader->onPrepareImage(mDataLoader, addedFiles.data(), addedFiles.size());
- if (checkAndClearJavaException(__func__)) {
- result = false;
- }
return result;
}
@@ -532,15 +540,7 @@ public:
bool checkAndClearJavaException(std::string_view method) const {
JNIEnv* env = GetOrAttachJNIEnvironment(mJvm);
-
- if (!env->ExceptionCheck()) {
- return false;
- }
-
- LOG(ERROR) << "Java exception during DataLoader::" << method;
- env->ExceptionDescribe();
- env->ExceptionClear();
- return true;
+ return ::checkAndClearJavaException(env, method);
}
const UniqueControl& control() const { return mControl; }
@@ -1014,6 +1014,12 @@ bool DataLoaderService_OnPrepareImage(JNIEnv* env, jint storageId, jobjectArray
bool result = dataLoaderConnector->onPrepareImage(addedFilesPair.ndkFiles());
const auto& jni = jniIds(env);
+
+ if (checkAndClearJavaException(env, "onPrepareImage")) {
+ reportStatusViaCallback(env, listener, storageId, jni.constants.DATA_LOADER_UNAVAILABLE);
+ return false;
+ }
+
reportStatusViaCallback(env, listener, storageId,
result ? jni.constants.DATA_LOADER_IMAGE_READY
: jni.constants.DATA_LOADER_IMAGE_NOT_READY);