summaryrefslogtreecommitdiff
path: root/src
diff options
context:
space:
mode:
Diffstat (limited to 'src')
-rw-r--r--src/mutex.cc8
-rw-r--r--src/runtime.cc7
-rw-r--r--src/runtime.h2
3 files changed, 16 insertions, 1 deletions
diff --git a/src/mutex.cc b/src/mutex.cc
index 0dfab1163d..7507566729 100644
--- a/src/mutex.cc
+++ b/src/mutex.cc
@@ -21,6 +21,7 @@
#include "heap.h" // for VERIFY_OBJECT_ENABLED
#include "logging.h"
#include "utils.h"
+#include "runtime.h"
#define CHECK_MUTEX_CALL(call, args) CHECK_PTHREAD_CALL(call, args, name_)
@@ -36,7 +37,12 @@ Mutex::Mutex(const char* name) : name_(name) {
}
Mutex::~Mutex() {
- CHECK_MUTEX_CALL(pthread_mutex_destroy, (&mutex_));
+ int rc = pthread_mutex_destroy(&mutex_);
+ if (rc != 0) {
+ errno = rc;
+ bool shutting_down = Runtime::Current()->IsShuttingDown();
+ PLOG(shutting_down ? WARNING : FATAL) << "pthread_mutex_destroy failed for " << name_;
+ }
}
void Mutex::Lock() {
diff --git a/src/runtime.cc b/src/runtime.cc
index e9d5677aab..c203ffd1c3 100644
--- a/src/runtime.cc
+++ b/src/runtime.cc
@@ -43,6 +43,7 @@ Runtime::Runtime()
java_vm_(NULL),
jni_stub_array_(NULL),
abstract_method_error_stub_array_(NULL),
+ shutting_down_(false),
started_(false),
vfprintf_(NULL),
exit_(NULL),
@@ -58,6 +59,8 @@ Runtime::Runtime()
}
Runtime::~Runtime() {
+ shutting_down_ = true;
+
Dbg::StopJdwp();
// Make sure our internal threads are dead before we start tearing down things they're using.
@@ -525,6 +528,10 @@ void Runtime::StartDaemonThreads() {
VLOG(startup) << "Runtime::StartDaemonThreads exiting";
}
+bool Runtime::IsShuttingDown() const {
+ return shutting_down_;
+}
+
bool Runtime::IsStarted() const {
return started_;
}
diff --git a/src/runtime.h b/src/runtime.h
index d30f465926..913779a549 100644
--- a/src/runtime.h
+++ b/src/runtime.h
@@ -85,6 +85,7 @@ class Runtime {
// Starts a runtime, which may cause threads to be started and code to run.
void Start();
+ bool IsShuttingDown() const;
bool IsStarted() const;
static Runtime* Current() {
@@ -268,6 +269,7 @@ class Runtime {
// As returned by ClassLoader.getSystemClassLoader()
ClassLoader* system_class_loader_;
+ bool shutting_down_;
bool started_;
// Hooks supported by JNI_CreateJavaVM