< prev index next >

src/hotspot/share/gc/z/zMark.cpp

Print this page

        

@@ -117,10 +117,15 @@
     }
   }
 }
 
 class ZMarkRootsIteratorClosure : public ZRootsIteratorClosure {
+private:
+  static void fixup_address(HeapWord** p) {
+    *p = (HeapWord*)ZAddress::good_or_null((uintptr_t)*p);
+  }
+
 public:
   ZMarkRootsIteratorClosure() {
     ZStatTLAB::reset();
   }
 

@@ -134,10 +139,11 @@
     // Update thread local address bad mask
     ZThreadLocalData::set_address_bad_mask(thread, ZAddressBadMask);
 
     // Retire TLAB
     if (UseTLAB && thread->is_Java_thread()) {
+      thread->tlab().addresses_do(fixup_address);
       thread->tlab().retire(ZStatTLAB::get());
       thread->tlab().resize();
     }
   }
 
< prev index next >