< prev index next >

src/hotspot/share/runtime/handles.cpp

Print this page

        

@@ -24,10 +24,11 @@
 
 #include "precompiled.hpp"
 #include "memory/allocation.inline.hpp"
 #include "oops/constantPool.hpp"
 #include "oops/oop.inline.hpp"
+#include "oops/valueKlass.hpp"
 #include "runtime/atomic.hpp"
 #include "runtime/handles.inline.hpp"
 #include "runtime/thread.inline.hpp"
 
 #ifdef ASSERT

@@ -91,19 +92,27 @@
 
 static uintx chunk_oops_do(OopClosure* f, Chunk* chunk, char* chunk_top) {
   oop* bottom = (oop*) chunk->bottom();
   oop* top    = (oop*) chunk_top;
   uintx handles_visited = top - bottom;
+  BufferedValuesDealiaser* dealiaser = NULL;
   assert(top >= bottom && top <= (oop*) chunk->top(), "just checking");
   // during GC phase 3, a handle may be a forward pointer that
   // is not yet valid, so loosen the assertion
   while (bottom < top) {
     // This test can be moved up but for now check every oop.
 
     assert(oopDesc::is_oop(*bottom), "handle should point to oop");
     if (Universe::heap()->is_in_reserved_or_null(*bottom)) {
       f->do_oop(bottom);
+    } else {
+      if (VTBuffer::is_in_vt_buffer(*bottom)) {
+        if(dealiaser == NULL) {
+          dealiaser = Thread::current()->buffered_values_dealiaser();
+        }
+        dealiaser->oops_do(f, *bottom);
+      }
     }
     bottom++;
   }
   return handles_visited;
 }
< prev index next >