diff options
author | Hiroshi Yamauchi <yamauchi@google.com> | 2014-09-08 13:22:56 -0700 |
---|---|---|
committer | Hiroshi Yamauchi <yamauchi@google.com> | 2014-09-09 14:19:23 -0700 |
commit | 8a74117cac720239a69e60e734c7044b433fad47 (patch) | |
tree | 88663982b24ac419886c432b22aebb1387c0039a /runtime/java_vm_ext.cc | |
parent | 9b2b927f573264c2f0d66b24ceeb361857a41ab3 (diff) | |
download | art-8a74117cac720239a69e60e734c7044b433fad47.tar.gz art-8a74117cac720239a69e60e734c7044b433fad47.tar.bz2 art-8a74117cac720239a69e60e734c7044b433fad47.zip |
Address read barrier issue with cl/106467
And tidy/add a check.
Bug: 12687968
Change-Id: If63dc0d9d0a0ce5f2eeb81734ff8f4307865f67d
Diffstat (limited to 'runtime/java_vm_ext.cc')
-rw-r--r-- | runtime/java_vm_ext.cc | 5 |
1 files changed, 5 insertions, 0 deletions
diff --git a/runtime/java_vm_ext.cc b/runtime/java_vm_ext.cc index 424addb2a8..0ac5b88e80 100644 --- a/runtime/java_vm_ext.cc +++ b/runtime/java_vm_ext.cc @@ -760,6 +760,11 @@ void JavaVMExt::SweepJniWeakGlobals(IsMarkedCallback* callback, void* arg) { for (mirror::Object** entry : weak_globals_) { // Since this is called by the GC, we don't need a read barrier. mirror::Object* obj = *entry; + if (obj == nullptr) { + // Need to skip null here to distinguish between null entries + // and cleared weak ref entries. + continue; + } mirror::Object* new_obj = callback(obj, arg); if (new_obj == nullptr) { new_obj = Runtime::Current()->GetClearedJniWeakGlobal(); |