Skip to content

Commit

Permalink
Browse files Browse the repository at this point in the history
* thread_pthread.c (USE_MONOTONIC_COND): check the availability
  more strictly.
* thread_pthread.h (rb_thread_cond_t): ditto.

git-svn-id: svn+ssh://ci.ruby-lang.org/ruby/trunk@31462 b2dd03c8-39d4-4d8f-98ff-823fe69b080e
  • Loading branch information
nobu committed May 7, 2011
1 parent 562a1a7 commit 1bd2c78
Show file tree
Hide file tree
Showing 3 changed files with 15 additions and 3 deletions.
7 changes: 7 additions & 0 deletions ChangeLog
@@ -1,3 +1,10 @@
Sat May 7 18:28:37 2011 Nobuyoshi Nakada <nobu@ruby-lang.org>

* 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 <kosaki.motohiro@gmail.com>
fix incorrect native_cond_signal call when deadlock was detected.

Expand Down
9 changes: 6 additions & 3 deletions thread_pthread.c
Expand Up @@ -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
Expand Down Expand Up @@ -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) {
Expand Down Expand Up @@ -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)
Expand Down
2 changes: 2 additions & 0 deletions thread_pthread.h
Expand Up @@ -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 {
Expand Down

0 comments on commit 1bd2c78

Please sign in to comment.