Author: Armin Rigo <ar...@tunes.org> Branch: stmgc-c8 Changeset: r78171:eeb45349ea15 Date: 2015-06-18 10:45 +0100 http://bitbucket.org/pypy/pypy/changeset/eeb45349ea15/
Log: import stmgc/7592a0f11ac2 diff --git a/rpython/translator/stm/src_stm/revision b/rpython/translator/stm/src_stm/revision --- a/rpython/translator/stm/src_stm/revision +++ b/rpython/translator/stm/src_stm/revision @@ -1,1 +1,1 @@ -3ca830828468 +7592a0f11ac2 diff --git a/rpython/translator/stm/src_stm/stm/sync.c b/rpython/translator/stm/src_stm/stm/sync.c --- a/rpython/translator/stm/src_stm/stm/sync.c +++ b/rpython/translator/stm/src_stm/stm/sync.c @@ -115,7 +115,12 @@ t->tv_sec = tv.tv_sec; t->tv_nsec = tv.tv_usec * 1000 + 999; #endif - /* assumes that "incr" is not too large, less than 1 second */ + + long integral_part = (long)incr; + t->tv_sec += integral_part; + incr -= integral_part; + assert(incr >= 0.0 && incr <= 1.0); + long nsec = t->tv_nsec + (long)(incr * 1000000000.0); if (nsec >= 1000000000) { t->tv_sec += 1; @@ -131,15 +136,21 @@ stm_fatalerror("*** cond_wait/%d called!", (int)ctype); #endif + retry: assert(_has_mutex_here); int err = pthread_cond_timedwait(&sync_ctl.cond[ctype], &sync_ctl.global_mutex, pt); - if (err == 0) + switch (err) { + case 0: return true; /* success */ - if (LIKELY(err == ETIMEDOUT)) + case ETIMEDOUT: return false; /* timeout */ - stm_fatalerror("pthread_cond_timedwait/%d: %d", (int)ctype, err); + case EINTR: + goto retry; + default: + stm_fatalerror("pthread_cond_timedwait/%d: %d", (int)ctype, err); + } } static bool cond_wait_timeout(enum cond_type_e ctype, double delay) _______________________________________________ pypy-commit mailing list pypy-commit@python.org https://mail.python.org/mailman/listinfo/pypy-commit