diff options
-rw-r--r-- | runtime/jni/java_vm_ext.cc | 17 | ||||
-rw-r--r-- | runtime/runtime.cc | 4 |
2 files changed, 9 insertions, 12 deletions
diff --git a/runtime/jni/java_vm_ext.cc b/runtime/jni/java_vm_ext.cc index a0c013c066..f71ab6f8a3 100644 --- a/runtime/jni/java_vm_ext.cc +++ b/runtime/jni/java_vm_ext.cc @@ -224,15 +224,15 @@ class Libraries { STLDeleteValues(&libraries_); } - void UnloadBootNativeLibraries(JavaVM* vm) { + // NO_THREAD_SAFETY_ANALYSIS as this is during runtime shutdown, and we have + // no thread to lock this with. + void UnloadBootNativeLibraries(JavaVM* vm) const NO_THREAD_SAFETY_ANALYSIS { + CHECK(Thread::Current() == nullptr); std::vector<SharedLibrary*> unload_libraries; - { - MutexLock mu(Thread::Current(), *Locks::jni_libraries_lock_); - for (auto it = libraries_.begin(); it != libraries_.end(); ++it) { - SharedLibrary* const library = it->second; - if (library->GetClassLoader() == nullptr) { - unload_libraries.push_back(library); - } + for (auto it = libraries_.begin(); it != libraries_.end(); ++it) { + SharedLibrary* const library = it->second; + if (library->GetClassLoader() == nullptr) { + unload_libraries.push_back(library); } } UnloadLibraries(vm, unload_libraries); @@ -508,6 +508,7 @@ JavaVMExt::JavaVMExt(Runtime* runtime, } JavaVMExt::~JavaVMExt() { + UnloadBootNativeLibraries(); } // Checking "globals" and "weak_globals" usually requires locks, but we diff --git a/runtime/runtime.cc b/runtime/runtime.cc index 1eae7ae004..33e81bdde9 100644 --- a/runtime/runtime.cc +++ b/runtime/runtime.cc @@ -432,10 +432,6 @@ Runtime::~Runtime() { thread_list_->ShutDown(); } - // We can only unload boot classpath native libraries once all threads are terminated - // or suspended. - java_vm_->UnloadBootNativeLibraries(); - // TODO Maybe do some locking. for (auto& agent : agents_) { agent->Unload(); |