< prev index next >
src/os/solaris/vm/os_solaris.cpp
Print this page
*** 1219,1235 ****
// Free Solaris resources related to the OSThread
void os::free_thread(OSThread* osthread) {
assert(osthread != NULL, "os::free_thread but osthread not set");
- // We are told to free resources of the argument thread,
- // but we can only really operate on the current thread.
- // The main thread must take the VMThread down synchronously
- // before the main thread exits and frees up CodeHeap
- guarantee((Thread::current()->osthread() == osthread
- || (osthread == VMThread::vm_thread()->osthread())), "os::free_thread but not current thread");
if (Thread::current()->osthread() == osthread) {
// Restore caller's signal mask
sigset_t sigmask = osthread->caller_sigmask();
pthread_sigmask(SIG_SETMASK, &sigmask, NULL);
}
--- 1219,1231 ----
// Free Solaris resources related to the OSThread
void os::free_thread(OSThread* osthread) {
assert(osthread != NULL, "os::free_thread but osthread not set");
+ // Usually osthread will be the current thread, but during VM termination
+ // it might be the VMThread or (what was) the WatcherThread
if (Thread::current()->osthread() == osthread) {
// Restore caller's signal mask
sigset_t sigmask = osthread->caller_sigmask();
pthread_sigmask(SIG_SETMASK, &sigmask, NULL);
}
< prev index next >