diff options
| author | 2014-05-29 21:17:05 +0000 | |
|---|---|---|
| committer | 2014-05-29 21:17:05 +0000 | |
| commit | 90cfca32c9d17594652f088f3954d7994d90b2c5 (patch) | |
| tree | b351aa552024f0ad02c6cbb909a0df0822ba296a /runtime/indirect_reference_table-inl.h | |
| parent | ac835c68fc3e59144f3aa080ad0dbdd2cbe96968 (diff) | |
| parent | b478dab31955402e9f78665f45a3fb24f8f17b77 (diff) | |
am b478dab3: Merge "Add read barriers for the weak roots in the JNI weak globals."
* commit 'b478dab31955402e9f78665f45a3fb24f8f17b77':
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.h | 6 |
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; |