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