--- a/hotspot/src/share/vm/runtime/thread.cpp Wed Jun 04 13:51:09 2008 -0700
+++ b/hotspot/src/share/vm/runtime/thread.cpp Thu Jun 05 15:57:56 2008 -0700
@@ -1138,6 +1138,10 @@
void JavaThread::initialize() {
// Initialize fields
+
+ // Set the claimed par_id to -1 (ie not claiming any par_ids)
+ set_claimed_par_id(-1);
+
set_saved_exception_pc(NULL);
set_threadObj(NULL);
_anchor.clear();
@@ -1209,7 +1213,18 @@
pd_initialize();
}
-JavaThread::JavaThread(bool is_attaching) : Thread() {
+#ifndef SERIALGC
+SATBMarkQueueSet JavaThread::_satb_mark_queue_set;
+DirtyCardQueueSet JavaThread::_dirty_card_queue_set;
+#endif // !SERIALGC
+
+JavaThread::JavaThread(bool is_attaching) :
+ Thread()
+#ifndef SERIALGC
+ , _satb_mark_queue(&_satb_mark_queue_set),
+ _dirty_card_queue(&_dirty_card_queue_set)
+#endif // !SERIALGC
+{
initialize();
_is_attaching = is_attaching;
}
@@ -1255,7 +1270,13 @@
// Remove this ifdef when C1 is ported to the compiler interface.
static void compiler_thread_entry(JavaThread* thread, TRAPS);
-JavaThread::JavaThread(ThreadFunction entry_point, size_t stack_sz) : Thread() {
+JavaThread::JavaThread(ThreadFunction entry_point, size_t stack_sz) :
+ Thread()
+#ifndef SERIALGC
+ , _satb_mark_queue(&_satb_mark_queue_set),
+ _dirty_card_queue(&_dirty_card_queue_set)
+#endif // !SERIALGC
+{
if (TraceThreadEvents) {
tty->print_cr("creating thread %p", this);
}
@@ -3034,9 +3055,14 @@
#ifndef SERIALGC
// Support for ConcurrentMarkSweep. This should be cleaned up
- // and better encapsulated. XXX YSR
- if (UseConcMarkSweepGC) {
- ConcurrentMarkSweepThread::makeSurrogateLockerThread(THREAD);
+ // and better encapsulated. The ugly nested if test would go away
+ // once things are properly refactored. XXX YSR
+ if (UseConcMarkSweepGC || UseG1GC) {
+ if (UseConcMarkSweepGC) {
+ ConcurrentMarkSweepThread::makeSurrogateLockerThread(THREAD);
+ } else {
+ ConcurrentMarkThread::makeSurrogateLockerThread(THREAD);
+ }
if (HAS_PENDING_EXCEPTION) {
vm_exit_during_initialization(Handle(THREAD, PENDING_EXCEPTION));
}