If we run the remarking phase in the VM thread we'll crash if the reference processor is setup to use multi-threaded discovery. We crash because as_Worker_thread() returns NULL in get_discovered_list(): if (_discovery_is_mt) { // During a multi-threaded discovery phase, // each thread saves to its "own" list. Thread* thr = Thread::current(); id = thr->as_Worker_thread()->id(); } else { // single-threaded discovery, we save in round-robin // fashion to each of the lists. if (_processing_is_mt) { id = next_id(); } }
|