diff options
author | Dan Pasanen <invisiblek@cyanogenmod.org> | 2016-12-06 19:30:12 -0600 |
---|---|---|
committer | Dan Pasanen <invisiblek@cyanogenmod.org> | 2016-12-06 19:32:30 -0600 |
commit | 58d4793f8bd82b9daab5bf4fa40d5b68204e71eb (patch) | |
tree | 449265cbacbf925f37ed0bd201e68f080e2537cc /runtime/base | |
parent | 20af13267def46b2e5f9a6fa6e94ac69056ef16f (diff) | |
parent | 12eb0c532e33ca5d5e98addd580b5ad0a4b71be4 (diff) | |
download | android_art-cm-14.1_prerebase.tar.gz android_art-cm-14.1_prerebase.tar.bz2 android_art-cm-14.1_prerebase.zip |
Merge tag 'android-7.1.1_r4' into cm-14.1cm-14.1_prerebase
Android 7.1.1 release 4
Change-Id: I14b36666b5a478024f3a9ffab90fd675a6157461
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, |