diff --git a/ChangeLog b/ChangeLog index 0ca0cff4bc..f766c11273 100644 --- a/ChangeLog +++ b/ChangeLog @@ -1,3 +1,10 @@ +Sat May 7 18:28:37 2011 Nobuyoshi Nakada + + * thread_pthread.c (USE_MONOTONIC_COND): check the availability + more strictly. + + * thread_pthread.h (rb_thread_cond_t): ditto. + Sat May 7 15:18:06 2011 KOSAKI Motohiro fix incorrect native_cond_signal call when deadlock was detected. diff --git a/thread_pthread.c b/thread_pthread.c index 866caac9d0..8554414a1c 100644 --- a/thread_pthread.c +++ b/thread_pthread.c @@ -30,8 +30,11 @@ static void native_cond_destroy(rb_thread_cond_t *cond); #define RB_CONDATTR_CLOCK_MONOTONIC 1 -#if defined(HAVE_PTHREAD_CONDATTR_SETCLOCK) && defined(CLOCK_MONOTONIC) && defined(HAVE_CLOCK_GETTIME) +#if defined(HAVE_PTHREAD_CONDATTR_SETCLOCK) && defined(HAVE_CLOCKID_T) && \ + defined(CLOCK_REALTIME) && defined(CLOCK_MONOTONIC) && defined(HAVE_CLOCK_GETTIME) #define USE_MONOTONIC_COND 1 +#else +#define USE_MONOTONIC_COND 0 #endif #define GVL_SIMPLE_LOCK 0 @@ -230,10 +233,10 @@ native_cond_initialize(rb_thread_cond_t *cond, int flags) int r; pthread_condattr_t attr; - cond->clockid = CLOCK_REALTIME; pthread_condattr_init(&attr); #if USE_MONOTONIC_COND + cond->clockid = CLOCK_REALTIME; if (flags & RB_CONDATTR_CLOCK_MONOTONIC) { r = pthread_condattr_setclock(&attr, CLOCK_MONOTONIC); if (r == 0) { @@ -323,10 +326,10 @@ native_cond_timeout(rb_thread_cond_t *cond, struct timespec timeout_rel) rb_sys_fail("clock_gettime()"); goto out; } -#endif if (cond->clockid != CLOCK_REALTIME) rb_bug("unsupported clockid %d", cond->clockid); +#endif ret = gettimeofday(&tv, 0); if (ret != 0) diff --git a/thread_pthread.h b/thread_pthread.h index 64a17fcf67..97a26e0e80 100644 --- a/thread_pthread.h +++ b/thread_pthread.h @@ -20,7 +20,9 @@ typedef pthread_mutex_t rb_thread_lock_t; typedef struct rb_thread_cond_struct { pthread_cond_t cond; +#ifdef HAVE_CLOCKID_T clockid_t clockid; +#endif } rb_thread_cond_t; typedef struct native_thread_data_struct {