--- a/hotspot/src/share/vm/gc_implementation/g1/satbQueue.cpp Fri Jul 10 16:01:20 2009 -0700
+++ b/hotspot/src/share/vm/gc_implementation/g1/satbQueue.cpp Tue Jul 14 15:40:39 2009 -0700
@@ -43,6 +43,18 @@
}
}
}
+
+#ifdef ASSERT
+void ObjPtrQueue::verify_oops_in_buffer() {
+ if (_buf == NULL) return;
+ for (size_t i = _index; i < _sz; i += oopSize) {
+ oop obj = (oop)_buf[byte_index_to_index((int)i)];
+ assert(obj != NULL && obj->is_oop(true /* ignore mark word */),
+ "Not an oop");
+ }
+}
+#endif
+
#ifdef _MSC_VER // the use of 'this' below gets a warning, make it go away
#pragma warning( disable:4355 ) // 'this' : used in base member initializer list
#endif // _MSC_VER
@@ -66,6 +78,7 @@
void SATBMarkQueueSet::handle_zero_index_for_thread(JavaThread* t) {
+ DEBUG_ONLY(t->satb_mark_queue().verify_oops_in_buffer();)
t->satb_mark_queue().handle_zero_index();
}
@@ -143,7 +156,7 @@
}
_completed_buffers_tail = NULL;
_n_completed_buffers = 0;
- debug_only(assert_completed_buffer_list_len_correct_locked());
+ DEBUG_ONLY(assert_completed_buffer_list_len_correct_locked());
}
while (buffers_to_delete != NULL) {
CompletedBufferNode* nd = buffers_to_delete;