Mercurial > hg > graal-jvmci-8
diff src/share/vm/runtime/thread.hpp @ 1843:0715f0cf171d
Merge
author | jcoomes |
---|---|
date | Fri, 08 Oct 2010 09:29:09 -0700 |
parents | fd5d4527cdf5 6e0aac35bfa9 |
children | fa83ab460c54 |
line wrap: on
line diff
--- a/src/share/vm/runtime/thread.hpp Wed Oct 06 14:18:32 2010 -0700 +++ b/src/share/vm/runtime/thread.hpp Fri Oct 08 09:29:09 2010 -0700 @@ -1490,6 +1490,29 @@ } #endif // !SERIALGC + // This method initializes the SATB and dirty card queues before a + // JavaThread is added to the Java thread list. Right now, we don't + // have to do anything to the dirty card queue (it should have been + // activated when the thread was created), but we have to activate + // the SATB queue if the thread is created while a marking cycle is + // in progress. The activation / de-activation of the SATB queues at + // the beginning / end of a marking cycle is done during safepoints + // so we have to make sure this method is called outside one to be + // able to safely read the active field of the SATB queue set. Right + // now, it is called just before the thread is added to the Java + // thread list in the Threads::add() method. That method is holding + // the Threads_lock which ensures we are outside a safepoint. We + // cannot do the obvious and set the active field of the SATB queue + // when the thread is created given that, in some cases, safepoints + // might happen between the JavaThread constructor being called and the + // thread being added to the Java thread list (an example of this is + // when the structure for the DestroyJavaVM thread is created). +#ifndef SERIALGC + void initialize_queues(); +#else // !SERIALGC + void initialize_queues() { } +#endif // !SERIALGC + // Machine dependent stuff #include "incls/_thread_pd.hpp.incl"