< prev index next >
test/hotspot/gtest/threadHelper.inline.hpp
Print this page
*** 57,68 ****
Threads::add(this);
}
VM_StopSafepoint ss(&_ready, &_unblock);
VMThread::execute(&ss);
Threads::remove(this);
- this->smr_delete();
}
void doit() {
if (os::create_thread(this, os::os_thread)) {
os::start_thread(this);
} else {
ASSERT_TRUE(false);
--- 57,70 ----
Threads::add(this);
}
VM_StopSafepoint ss(&_ready, &_unblock);
VMThread::execute(&ss);
Threads::remove(this);
}
+
+ // JavaThread::post_run() will delete 'this' safely
+
void doit() {
if (os::create_thread(this, os::os_thread)) {
os::start_thread(this);
} else {
ASSERT_TRUE(false);
*** 83,93 ****
JavaTestThread(Semaphore* post)
: _post(post) {
}
virtual ~JavaTestThread() {}
! void prerun() {
this->set_thread_state(_thread_in_vm);
{
MutexLocker ml(Threads_lock);
Threads::add(this);
}
--- 85,95 ----
JavaTestThread(Semaphore* post)
: _post(post) {
}
virtual ~JavaTestThread() {}
! void pre_run() {
this->set_thread_state(_thread_in_vm);
{
MutexLocker ml(Threads_lock);
Threads::add(this);
}
*** 97,115 ****
}
virtual void main_run() = 0;
void run() {
- prerun();
main_run();
- postrun();
}
! void postrun() {
Threads::remove(this);
_post->signal();
! this->smr_delete();
}
void doit() {
if (os::create_thread(this, os::os_thread)) {
os::start_thread(this);
--- 99,115 ----
}
virtual void main_run() = 0;
void run() {
main_run();
}
! void post_run() {
Threads::remove(this);
_post->signal();
! JavaThread::post_run(); // deletes 'this' safely
}
void doit() {
if (os::create_thread(this, os::os_thread)) {
os::start_thread(this);
< prev index next >