Clean up mutexes on shutdown.
Change-Id: Ib961f954280c27f8858c4d6fb9010cc833bb28d2
diff --git a/src/class_linker.h b/src/class_linker.h
index 34ad9d7..90ac678 100644
--- a/src/class_linker.h
+++ b/src/class_linker.h
@@ -24,7 +24,9 @@
// Initializes the class linker.
static ClassLinker* Create(const std::vector<DexFile*>& boot_class_path);
- ~ClassLinker() {}
+ ~ClassLinker() {
+ delete classes_lock_;
+ }
// Finds a class by its descriptor name.
// If class_loader is null, searches boot_class_path_.
diff --git a/src/intern_table.cc b/src/intern_table.cc
index 3a0dff8..3ef5917 100644
--- a/src/intern_table.cc
+++ b/src/intern_table.cc
@@ -10,6 +10,10 @@
intern_table_lock_ = Mutex::Create("InternTable::Lock");
}
+InternTable::~InternTable() {
+ delete intern_table_lock_;
+}
+
void InternTable::VisitRoots(Heap::RootVistor* root_visitor, void* arg) {
MutexLock mu(intern_table_lock_);
typedef Table::const_iterator It; // TODO: C++0x auto
diff --git a/src/intern_table.h b/src/intern_table.h
index 61da28b..0a1554d 100644
--- a/src/intern_table.h
+++ b/src/intern_table.h
@@ -13,6 +13,7 @@
class InternTable {
public:
InternTable();
+ ~InternTable();
String* Intern(int32_t utf16_length, const char* utf8_data);
void VisitRoots(Heap::RootVistor* root_visitor, void* arg);
diff --git a/src/jni_internal.cc b/src/jni_internal.cc
index c538670..586b541 100644
--- a/src/jni_internal.cc
+++ b/src/jni_internal.cc
@@ -2583,4 +2583,9 @@
weak_globals(kWeakGlobalsInitial, kWeakGlobalsMax, kWeakGlobal) {
}
+JavaVMExt::~JavaVMExt() {
+ delete globals_lock;
+ delete weak_globals_lock;
+}
+
} // namespace art
diff --git a/src/jni_internal.h b/src/jni_internal.h
index 1a4235d..a6fce05 100644
--- a/src/jni_internal.h
+++ b/src/jni_internal.h
@@ -21,6 +21,7 @@
struct JavaVMExt {
JavaVMExt(Runtime* runtime, bool check_jni, bool verbose_jni);
+ ~JavaVMExt();
/*
* Load native code from the specified absolute pathname. Per the spec,