diff options
author | 2022-11-18 15:14:47 +0100 | |
---|---|---|
committer | 2022-11-21 08:07:49 +0000 | |
commit | 1ca951c17652fd89c36798cd7cc9b5a4c254f86e (patch) | |
tree | e57c034e89cea43f399d2d55dd369b8d98e410a4 /runtime/jni/java_vm_ext.cc | |
parent | 17983ac8243d4cc6c5097d452580468176fd1a96 (diff) |
Clean up `IndirectReferenceTable` construction.
Split the parts that can fail to a separate function.
Test: m test-art-host-gtest
Test: testrunner.py --host --optimizing
Bug: 172332525
Change-Id: I95200a31cc757e4593d9cc7f956dd4d5ef624f92
Diffstat (limited to 'runtime/jni/java_vm_ext.cc')
-rw-r--r-- | runtime/jni/java_vm_ext.cc | 29 |
1 files changed, 13 insertions, 16 deletions
diff --git a/runtime/jni/java_vm_ext.cc b/runtime/jni/java_vm_ext.cc index 8eeb093bc6..248335a78a 100644 --- a/runtime/jni/java_vm_ext.cc +++ b/runtime/jni/java_vm_ext.cc @@ -495,9 +495,7 @@ const JNIInvokeInterface gJniInvokeInterface = { JII::AttachCurrentThreadAsDaemon }; -JavaVMExt::JavaVMExt(Runtime* runtime, - const RuntimeArgumentMap& runtime_options, - std::string* error_msg) +JavaVMExt::JavaVMExt(Runtime* runtime, const RuntimeArgumentMap& runtime_options) : runtime_(runtime), check_jni_abort_hook_(nullptr), check_jni_abort_hook_data_(nullptr), @@ -506,13 +504,10 @@ JavaVMExt::JavaVMExt(Runtime* runtime, tracing_enabled_(runtime_options.Exists(RuntimeArgumentMap::JniTrace) || VLOG_IS_ON(third_party_jni)), trace_(runtime_options.GetOrDefault(RuntimeArgumentMap::JniTrace)), - globals_(kGlobalsMax, kGlobal, IndirectReferenceTable::ResizableCapacity::kNo, error_msg), + globals_(kGlobal, IndirectReferenceTable::ResizableCapacity::kNo), libraries_(new Libraries), unchecked_functions_(&gJniInvokeInterface), - weak_globals_(kWeakGlobalsMax, - kWeakGlobal, - IndirectReferenceTable::ResizableCapacity::kNo, - error_msg), + weak_globals_(kWeakGlobal, IndirectReferenceTable::ResizableCapacity::kNo), allow_accessing_weak_globals_(true), weak_globals_add_condition_("weak globals add condition", (CHECK(Locks::jni_weak_globals_lock_ != nullptr), @@ -527,21 +522,23 @@ JavaVMExt::JavaVMExt(Runtime* runtime, SetCheckJniEnabled(runtime_options.Exists(RuntimeArgumentMap::CheckJni) || kIsDebugBuild); } +bool JavaVMExt::Initialize(std::string* error_msg) { + return globals_.Initialize(kGlobalsMax, error_msg) && + weak_globals_.Initialize(kWeakGlobalsMax, error_msg); +} + JavaVMExt::~JavaVMExt() { UnloadBootNativeLibraries(); } -// Checking "globals" and "weak_globals" usually requires locks, but we -// don't need the locks to check for validity when constructing the -// object. Use NO_THREAD_SAFETY_ANALYSIS for this. std::unique_ptr<JavaVMExt> JavaVMExt::Create(Runtime* runtime, const RuntimeArgumentMap& runtime_options, - std::string* error_msg) NO_THREAD_SAFETY_ANALYSIS { - std::unique_ptr<JavaVMExt> java_vm(new JavaVMExt(runtime, runtime_options, error_msg)); - if (java_vm && java_vm->globals_.IsValid() && java_vm->weak_globals_.IsValid()) { - return java_vm; + std::string* error_msg) { + std::unique_ptr<JavaVMExt> java_vm(new JavaVMExt(runtime, runtime_options)); + if (!java_vm->Initialize(error_msg)) { + return nullptr; } - return nullptr; + return java_vm; } jint JavaVMExt::HandleGetEnv(/*out*/void** env, jint version) { |