diff options
author | Alex Buynytskyy <alexbuy@google.com> | 2021-04-23 17:24:33 -0700 |
---|---|---|
committer | Alex Buynytskyy <alexbuy@google.com> | 2021-04-23 17:29:26 -0700 |
commit | 63039df3b5cca2d930975c8fcd8bd2a0deae9f8e (patch) | |
tree | d0262e53d03f6ca41c0bd6fa6061b2e185253d65 | |
parent | ddbe38525a58d9bbc909a82a5da7bfddbf0f4718 (diff) | |
download | incremental_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.cpp | 30 |
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); |