diff options
Diffstat (limited to 'runtime/base')
-rw-r--r-- | runtime/base/array_slice.h | 4 | ||||
-rw-r--r-- | runtime/base/logging.cc | 8 | ||||
-rw-r--r-- | runtime/base/mutex.h | 2 |
3 files changed, 11 insertions, 3 deletions
diff --git a/runtime/base/array_slice.h b/runtime/base/array_slice.h index 19ad302c9d..32283d0a0a 100644 --- a/runtime/base/array_slice.h +++ b/runtime/base/array_slice.h @@ -129,6 +129,10 @@ class ArraySlice { return element_size_; } + bool Contains(const T* element) const { + return &AtUnchecked(0) <= element && element < &AtUnchecked(size_); + } + private: T& AtUnchecked(size_t index) { return *reinterpret_cast<T*>(reinterpret_cast<uintptr_t>(array_) + index * element_size_); diff --git a/runtime/base/logging.cc b/runtime/base/logging.cc index 212e5bd922..df8a3692aa 100644 --- a/runtime/base/logging.cc +++ b/runtime/base/logging.cc @@ -193,6 +193,8 @@ LogMessage::LogMessage(const char* file, unsigned int line, LogSeverity severity } } LogMessage::~LogMessage() { + std::string msg; + if (!PrintDirectly(data_->GetSeverity()) && data_->GetSeverity() != LogSeverity::NONE) { if (data_->GetSeverity() < gMinimumLogSeverity) { return; // No need to format something we're not going to output. @@ -202,7 +204,7 @@ LogMessage::~LogMessage() { if (data_->GetError() != -1) { data_->GetBuffer() << ": " << strerror(data_->GetError()); } - std::string msg(data_->ToString()); + msg = data_->ToString(); // Do the actual logging with the lock held. { @@ -216,6 +218,8 @@ LogMessage::~LogMessage() { size_t nl = msg.find('\n', i); msg[nl] = '\0'; LogLine(data_->GetFile(), data_->GetLineNumber(), data_->GetSeverity(), &msg[i]); + // Undo zero-termination, so we retain the complete message. + msg[nl] = '\n'; i = nl + 1; } } @@ -224,7 +228,7 @@ LogMessage::~LogMessage() { // Abort if necessary. if (data_->GetSeverity() == FATAL) { - Runtime::Abort(); + Runtime::Abort(msg.c_str()); } } diff --git a/runtime/base/mutex.h b/runtime/base/mutex.h index 3d7624d979..a4e05bd5b7 100644 --- a/runtime/base/mutex.h +++ b/runtime/base/mutex.h @@ -88,7 +88,6 @@ enum LockLevel { kTracingUniqueMethodsLock, kTracingStreamingLock, kDeoptimizedMethodsLock, - kJitCodeCacheLock, kClassLoaderClassesLock, kDefaultMutexLevel, kMarkSweepLargeObjectLock, @@ -99,6 +98,7 @@ enum LockLevel { kMonitorPoolLock, kMethodVerifiersLock, kClassLinkerClassesLock, // TODO rename. + kJitCodeCacheLock, kBreakpointLock, kMonitorLock, kMonitorListLock, |