src/os/linux/vm/os_linux.hpp
Index Unified diffs Context diffs Sdiffs Wdiffs Patch New Old Previous File Next File
*** old/src/os/linux/vm/os_linux.hpp	Thu Sep 12 23:17:37 2013
--- new/src/os/linux/vm/os_linux.hpp	Thu Sep 12 23:17:36 2013

*** 219,228 **** --- 219,235 ---- return _supports_fast_thread_cpu_time; } static jlong fast_thread_cpu_time(clockid_t clockid); + // pthread_cond clock suppport + private: + static pthread_condattr_t _condattr[1]; + + public: + static pthread_condattr_t* condAttr() { return _condattr; } + // Stack repair handling // none present // LinuxThreads work-around for 6292965
*** 285,295 **** --- 292,302 ---- ~PlatformEvent() { guarantee (0, "invariant") ; } public: PlatformEvent() { int status; ! status = pthread_cond_init (_cond, NULL); ! status = pthread_cond_init (_cond, os::Linux::condAttr()); assert_status(status == 0, status, "cond_init"); status = pthread_mutex_init (_mutex, NULL); assert_status(status == 0, status, "mutex_init"); _Event = 0 ; _nParked = 0 ;
*** 300,327 **** --- 307,342 ---- void reset() { _Event = 0 ; } int fired() { return _Event; } void park () ; void unpark () ; int TryPark () ; ! int park (jlong millis) ; // relative timed-wait only void SetAssociation (Thread * a) { _Assoc = a ; } } ; class PlatformParker : public CHeapObj<mtInternal> { protected: + enum { + REL_INDEX = 0, + ABS_INDEX = 1 + }; + int _cur_index; // which cond is in use: -1, 0, 1 pthread_mutex_t _mutex [1] ; ! pthread_cond_t _cond [1] ; ! pthread_cond_t _cond [2] ; // one for relative times and one for abs. public: // TODO-FIXME: make dtor private ~PlatformParker() { guarantee (0, "invariant") ; } public: PlatformParker() { int status; ! status = pthread_cond_init (_cond, NULL); ! assert_status(status == 0, status, "cond_init"); ! status = pthread_cond_init (&_cond[REL_INDEX], os::Linux::condAttr()); ! assert_status(status == 0, status, "cond_init rel"); + status = pthread_cond_init (&_cond[ABS_INDEX], NULL); + assert_status(status == 0, status, "cond_init abs"); status = pthread_mutex_init (_mutex, NULL); assert_status(status == 0, status, "mutex_init"); + _cur_index = -1; // mark as unused } }; #endif // OS_LINUX_VM_OS_LINUX_HPP

src/os/linux/vm/os_linux.hpp
Index Unified diffs Context diffs Sdiffs Wdiffs Patch New Old Previous File Next File