summaryrefslogtreecommitdiff
path: root/runtime/indirect_reference_table-inl.h
diff options
context:
space:
mode:
author Hiroshi Yamauchi <yamauchi@google.com> 2014-05-29 21:14:56 +0000
committer Gerrit Code Review <noreply-gerritcodereview@google.com> 2014-05-29 21:14:56 +0000
commitb478dab31955402e9f78665f45a3fb24f8f17b77 (patch)
tree144152ea2f26b8426f189bbbfd3f2a31d63efb1c /runtime/indirect_reference_table-inl.h
parent8adc1d9d1dd3fabdde6f1ec1b0c735ea8bcbf8e8 (diff)
parent196851b634a5bfdd8ab3fb59a320e550b21b0f4d (diff)
Merge "Add read barriers for the weak roots in the JNI weak globals."
Diffstat (limited to 'runtime/indirect_reference_table-inl.h')
-rw-r--r--runtime/indirect_reference_table-inl.h6
1 files changed, 5 insertions, 1 deletions
diff --git a/runtime/indirect_reference_table-inl.h b/runtime/indirect_reference_table-inl.h
index 42a9757951..790f4d0c17 100644
--- a/runtime/indirect_reference_table-inl.h
+++ b/runtime/indirect_reference_table-inl.h
@@ -71,12 +71,16 @@ inline bool IndirectReferenceTable::CheckEntry(const char* what, IndirectRef ire
return true;
}
+template<ReadBarrierOption kReadBarrierOption>
inline mirror::Object* IndirectReferenceTable::Get(IndirectRef iref) const {
if (!GetChecked(iref)) {
return kInvalidIndirectRefObject;
}
- mirror::Object* obj = table_[ExtractIndex(iref)];
+ mirror::Object** root = &table_[ExtractIndex(iref)];
+ mirror::Object* obj = *root;
if (LIKELY(obj != kClearedJniWeakGlobal)) {
+ // The read barrier or VerifyObject won't handle kClearedJniWeakGlobal.
+ obj = ReadBarrier::BarrierForWeakRoot<mirror::Object, kReadBarrierOption>(root);
VerifyObject(obj);
}
return obj;