Add uninterruptible role
Example error:
cannot call function 'CopyOf' while mutex 'uninterruptible_' is held
TODO: Add annotation to more locations.
Bug: 20072211
Change-Id: I1bbf5a77e3deeafa5898df529cb7cb53a6d010d2
diff --git a/runtime/gc/heap.h b/runtime/gc/heap.h
index 790a98c..09c18b8 100644
--- a/runtime/gc/heap.h
+++ b/runtime/gc/heap.h
@@ -189,7 +189,8 @@
mirror::Object* AllocObject(Thread* self, mirror::Class* klass, size_t num_bytes,
const PreFenceVisitor& pre_fence_visitor)
SHARED_REQUIRES(Locks::mutator_lock_)
- REQUIRES(!*gc_complete_lock_, !*pending_task_lock_, !*backtrace_lock_) {
+ REQUIRES(!*gc_complete_lock_, !*pending_task_lock_, !*backtrace_lock_,
+ !Roles::uninterruptible_) {
return AllocObjectWithAllocator<kInstrumented, true>(
self, klass, num_bytes, GetCurrentAllocator(), pre_fence_visitor);
}
@@ -198,7 +199,8 @@
mirror::Object* AllocNonMovableObject(Thread* self, mirror::Class* klass, size_t num_bytes,
const PreFenceVisitor& pre_fence_visitor)
SHARED_REQUIRES(Locks::mutator_lock_)
- REQUIRES(!*gc_complete_lock_, !*pending_task_lock_, !*backtrace_lock_) {
+ REQUIRES(!*gc_complete_lock_, !*pending_task_lock_, !*backtrace_lock_,
+ !Roles::uninterruptible_) {
return AllocObjectWithAllocator<kInstrumented, true>(
self, klass, num_bytes, GetCurrentNonMovingAllocator(), pre_fence_visitor);
}
@@ -208,7 +210,8 @@
Thread* self, mirror::Class* klass, size_t byte_count, AllocatorType allocator,
const PreFenceVisitor& pre_fence_visitor)
SHARED_REQUIRES(Locks::mutator_lock_)
- REQUIRES(!*gc_complete_lock_, !*pending_task_lock_, !*backtrace_lock_);
+ REQUIRES(!*gc_complete_lock_, !*pending_task_lock_, !*backtrace_lock_,
+ !Roles::uninterruptible_);
AllocatorType GetCurrentAllocator() const {
return current_allocator_;