hotspot/src/os/linux/vm/os_linux.cpp
int os::Linux::safe_cond_timedwait(pthread_cond_t *_cond, pthread_mutex_t *_mutex, const struct timespec *_abstime)
{
{- -------------------------------------------
(1) pthread_cond_timedwait() で眠りにつくだけ.
(ただし, LinuxThreads の場合には FPU の control word をリセットしてくれるので,
pthread_cond_timedwait() 呼び出しの前後で待避/復帰処理を行っている.)
---------------------------------------- -}
if (is_NPTL()) {
return pthread_cond_timedwait(_cond, _mutex, _abstime);
} else {
#ifndef IA64
// 6292965: LinuxThreads pthread_cond_timedwait() resets FPU control
// word back to default 64bit precision if condvar is signaled. Java
// wants 53bit precision. Save and restore current value.
int fpu = get_fpu_control_word();
#endif // IA64
int status = pthread_cond_timedwait(_cond, _mutex, _abstime);
#ifndef IA64
set_fpu_control_word(fpu);
#endif // IA64
return status;
}
}
This document is available under the GNU GENERAL PUBLIC LICENSE Version 2.