< prev index next >

src/hotspot/share/runtime/handshake.cpp

Print this page
rev 57156 : imported patch 8234796-v3

*** 43,56 **** virtual void do_handshake(JavaThread* thread) = 0; }; class HandshakeThreadsOperation: public HandshakeOperation { static Semaphore _done; ! ThreadClosure* _thread_cl; bool _executed; public: ! HandshakeThreadsOperation(ThreadClosure* cl) : _thread_cl(cl), _executed(false) {} void do_handshake(JavaThread* thread); bool thread_has_completed() { return _done.trywait(); } bool executed() const { return _executed; } #ifdef ASSERT --- 43,56 ---- virtual void do_handshake(JavaThread* thread) = 0; }; class HandshakeThreadsOperation: public HandshakeOperation { static Semaphore _done; ! HandshakeClosure* _handshake_cl; bool _executed; public: ! HandshakeThreadsOperation(HandshakeClosure* cl) : _handshake_cl(cl), _executed(false) {} void do_handshake(JavaThread* thread); bool thread_has_completed() { return _done.trywait(); } bool executed() const { return _executed; } #ifdef ASSERT
*** 204,231 **** VMOp_Type type() const { return VMOp_HandshakeAllThreads; } }; class VM_HandshakeFallbackOperation : public VM_Operation { ! ThreadClosure* _thread_cl; Thread* _target_thread; bool _all_threads; bool _executed; public: ! VM_HandshakeFallbackOperation(ThreadClosure* cl) : ! _thread_cl(cl), _target_thread(NULL), _all_threads(true), _executed(false) {} ! VM_HandshakeFallbackOperation(ThreadClosure* cl, Thread* target) : ! _thread_cl(cl), _target_thread(target), _all_threads(false), _executed(false) {} void doit() { log_trace(handshake)("VMThread executing VM_HandshakeFallbackOperation"); for (JavaThreadIteratorWithHandle jtiwh; JavaThread *t = jtiwh.next(); ) { if (_all_threads || t == _target_thread) { if (t == _target_thread) { _executed = true; } ! _thread_cl->do_thread(t); } } } VMOp_Type type() const { return VMOp_HandshakeFallback; } --- 204,231 ---- VMOp_Type type() const { return VMOp_HandshakeAllThreads; } }; class VM_HandshakeFallbackOperation : public VM_Operation { ! HandshakeClosure* _handshake_cl; Thread* _target_thread; bool _all_threads; bool _executed; public: ! VM_HandshakeFallbackOperation(HandshakeClosure* cl) : ! _handshake_cl(cl), _target_thread(NULL), _all_threads(true), _executed(false) {} ! VM_HandshakeFallbackOperation(HandshakeClosure* cl, Thread* target) : ! _handshake_cl(cl), _target_thread(target), _all_threads(false), _executed(false) {} void doit() { log_trace(handshake)("VMThread executing VM_HandshakeFallbackOperation"); for (JavaThreadIteratorWithHandle jtiwh; JavaThread *t = jtiwh.next(); ) { if (_all_threads || t == _target_thread) { if (t == _target_thread) { _executed = true; } ! _handshake_cl->do_thread(t); } } } VMOp_Type type() const { return VMOp_HandshakeFallback; }
*** 238,267 **** p2i(thread), BOOL_TO_STR(Thread::current()->is_VM_thread())); TraceTime timer(message, TRACETIME_LOG(Debug, handshake, task)); // Only actually execute the operation for non terminated threads. if (!thread->is_terminated()) { ! _thread_cl->do_thread(thread); _executed = true; } // Use the semaphore to inform the VM thread that we have completed the operation _done.signal(); } ! void Handshake::execute(ThreadClosure* thread_cl) { if (ThreadLocalHandshakes) { HandshakeThreadsOperation cto(thread_cl); VM_HandshakeAllThreads handshake(&cto); VMThread::execute(&handshake); } else { VM_HandshakeFallbackOperation op(thread_cl); VMThread::execute(&op); } } ! bool Handshake::execute(ThreadClosure* thread_cl, JavaThread* target) { if (ThreadLocalHandshakes) { HandshakeThreadsOperation cto(thread_cl); VM_HandshakeOneThread handshake(&cto, target); VMThread::execute(&handshake); return handshake.executed(); --- 238,267 ---- p2i(thread), BOOL_TO_STR(Thread::current()->is_VM_thread())); TraceTime timer(message, TRACETIME_LOG(Debug, handshake, task)); // Only actually execute the operation for non terminated threads. if (!thread->is_terminated()) { ! _handshake_cl->do_thread(thread); _executed = true; } // Use the semaphore to inform the VM thread that we have completed the operation _done.signal(); } ! void Handshake::execute(HandshakeClosure* thread_cl) { if (ThreadLocalHandshakes) { HandshakeThreadsOperation cto(thread_cl); VM_HandshakeAllThreads handshake(&cto); VMThread::execute(&handshake); } else { VM_HandshakeFallbackOperation op(thread_cl); VMThread::execute(&op); } } ! bool Handshake::execute(HandshakeClosure* thread_cl, JavaThread* target) { if (ThreadLocalHandshakes) { HandshakeThreadsOperation cto(thread_cl); VM_HandshakeOneThread handshake(&cto, target); VMThread::execute(&handshake); return handshake.executed();
< prev index next >