diff options
Diffstat (limited to 'runtime/base')
| -rw-r--r-- | runtime/base/allocator.h | 1 | ||||
| -rw-r--r-- | runtime/base/mutex.cc | 6 | ||||
| -rw-r--r-- | runtime/base/mutex.h | 5 |
3 files changed, 12 insertions, 0 deletions
diff --git a/runtime/base/allocator.h b/runtime/base/allocator.h index 969f5b953f..e2ade07555 100644 --- a/runtime/base/allocator.h +++ b/runtime/base/allocator.h @@ -53,6 +53,7 @@ enum AllocatorTag { kAllocatorTagClassTable, kAllocatorTagInternTable, kAllocatorTagLambdaBoxTable, + kAllocatorTagLambdaProxyClassBoxTable, kAllocatorTagMaps, kAllocatorTagLOS, kAllocatorTagSafeMap, diff --git a/runtime/base/mutex.cc b/runtime/base/mutex.cc index 70bd398415..6ca56f53f6 100644 --- a/runtime/base/mutex.cc +++ b/runtime/base/mutex.cc @@ -65,6 +65,7 @@ Mutex* Locks::thread_suspend_count_lock_ = nullptr; Mutex* Locks::trace_lock_ = nullptr; Mutex* Locks::unexpected_signal_lock_ = nullptr; Mutex* Locks::lambda_table_lock_ = nullptr; +Mutex* Locks::lambda_class_table_lock_ = nullptr; Uninterruptible Roles::uninterruptible_; struct AllMutexData { @@ -954,6 +955,7 @@ void Locks::Init() { DCHECK(trace_lock_ != nullptr); DCHECK(unexpected_signal_lock_ != nullptr); DCHECK(lambda_table_lock_ != nullptr); + DCHECK(lambda_class_table_lock_ != nullptr); } else { // Create global locks in level order from highest lock level to lowest. LockLevel current_lock_level = kInstrumentEntrypointsLock; @@ -1072,6 +1074,10 @@ void Locks::Init() { DCHECK(lambda_table_lock_ == nullptr); lambda_table_lock_ = new Mutex("lambda table lock", current_lock_level); + UPDATE_CURRENT_LOCK_LEVEL(kLambdaClassTableLock); + DCHECK(lambda_class_table_lock_ == nullptr); + lambda_class_table_lock_ = new Mutex("lambda class table lock", current_lock_level); + UPDATE_CURRENT_LOCK_LEVEL(kAbortLock); DCHECK(abort_lock_ == nullptr); abort_lock_ = new Mutex("abort lock", current_lock_level, true); diff --git a/runtime/base/mutex.h b/runtime/base/mutex.h index d4c9057ab3..e2d7062f83 100644 --- a/runtime/base/mutex.h +++ b/runtime/base/mutex.h @@ -60,6 +60,7 @@ enum LockLevel { kUnexpectedSignalLock, kThreadSuspendCountLock, kAbortLock, + kLambdaClassTableLock, kLambdaTableLock, kJdwpSocketLock, kRegionSpaceRegionLock, @@ -692,6 +693,10 @@ class Locks { // Allow reader-writer mutual exclusion on the boxed table of lambda objects. // TODO: this should be a RW mutex lock, except that ConditionVariables don't work with it. static Mutex* lambda_table_lock_ ACQUIRED_AFTER(mutator_lock_); + + // Allow reader-writer mutual exclusion on the boxed table of lambda proxy classes. + // TODO: this should be a RW mutex lock, except that ConditionVariables don't work with it. + static Mutex* lambda_class_table_lock_ ACQUIRED_AFTER(lambda_table_lock_); }; class Roles { |