summaryrefslogtreecommitdiff
path: root/runtime/java_vm_ext.cc
diff options
context:
space:
mode:
author Andreas Gampe <agampe@google.com> 2017-09-25 14:50:23 -0700
committer Andreas Gampe <agampe@google.com> 2017-09-25 16:06:01 -0700
commit25651129552c3e9a8c87c68852da43c6069d7a53 (patch)
tree47143cda833a81cb2757f55f97d8ae5d64c227d4 /runtime/java_vm_ext.cc
parent8f6d83f69a570a273e46cfdbde8284fbbe83ea71 (diff)
ART: Refactor IRT:Add
Do not abort on overflow. Return null and an error message. The caller is responsible for handling this, e.g., by aborting. In a future CL, this may be used for driving additional GCs. Additional side effect is the removal of a frame from an abortion stack trace. Test: m Test: m test-art-host Change-Id: I80b1e0ee396fc69906d051f1b661d7dba222fc6f
Diffstat (limited to 'runtime/java_vm_ext.cc')
-rw-r--r--runtime/java_vm_ext.cc14
1 files changed, 12 insertions, 2 deletions
diff --git a/runtime/java_vm_ext.cc b/runtime/java_vm_ext.cc
index c0d1861a8e..5a1605323e 100644
--- a/runtime/java_vm_ext.cc
+++ b/runtime/java_vm_ext.cc
@@ -589,7 +589,12 @@ jobject JavaVMExt::AddGlobalRef(Thread* self, ObjPtr<mirror::Object> obj) {
return nullptr;
}
WriterMutexLock mu(self, *Locks::jni_globals_lock_);
- IndirectRef ref = globals_.Add(kIRTFirstSegment, obj);
+ std::string error_msg;
+ IndirectRef ref = globals_.Add(kIRTFirstSegment, obj, &error_msg);
+ if (UNLIKELY(ref == nullptr)) {
+ LOG(FATAL) << error_msg;
+ UNREACHABLE();
+ }
return reinterpret_cast<jobject>(ref);
}
@@ -607,7 +612,12 @@ jweak JavaVMExt::AddWeakGlobalRef(Thread* self, ObjPtr<mirror::Object> obj) {
self->CheckEmptyCheckpointFromWeakRefAccess(Locks::jni_weak_globals_lock_);
weak_globals_add_condition_.WaitHoldingLocks(self);
}
- IndirectRef ref = weak_globals_.Add(kIRTFirstSegment, obj);
+ std::string error_msg;
+ IndirectRef ref = weak_globals_.Add(kIRTFirstSegment, obj, &error_msg);
+ if (UNLIKELY(ref == nullptr)) {
+ LOG(FATAL) << error_msg;
+ UNREACHABLE();
+ }
return reinterpret_cast<jweak>(ref);
}