[pypy-commit] pypy default: Kill the two logics. Keep only two ways to getting the time.
arigo
noreply at buildbot.pypy.org
Sat Jun 28 02:05:35 CEST 2014
Author: Armin Rigo <arigo at tunes.org>
Branch:
Changeset: r72260:37989f72ce3c
Date: 2014-06-28 02:04 +0200
http://bitbucket.org/pypy/pypy/changeset/37989f72ce3c/
Log: Kill the two logics. Keep only two ways to getting the time.
diff --git a/rpython/translator/c/src/thread_pthread.c b/rpython/translator/c/src/thread_pthread.c
--- a/rpython/translator/c/src/thread_pthread.c
+++ b/rpython/translator/c/src/thread_pthread.c
@@ -483,8 +483,16 @@
abort(); \
}
-static inline void timespec_add(struct timespec *t, double incr)
+static inline void timespec_delay(struct timespec *t, double incr)
{
+#ifdef CLOCK_REALTIME
+ clock_gettime(CLOCK_REALTIME, &t);
+#else
+ struct timeval tv;
+ RPY_GETTIMEOFDAY(&tv);
+ 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 nsec = t->tv_nsec + (long)(incr * 1000000000.0);
if (nsec >= 1000000000) {
@@ -507,42 +515,6 @@
ASSERT_STATUS(pthread_mutex_unlock(mutex));
}
-/************************************************************/
-#if defined(_POSIX_TIMERS) && _POSIX_TIMERS > 0
-/************************************************************/
-/* NB. the test above should cover two features: clock_gettime() and
- pthread_mutex_timedlock(). It's unclear that there is a measurable
- benefit in using pthread_mutex_timedlock(), but there is certainly
- one in using clock_gettime(). */
-
-#define mutex2_t mutex1_t
-#define mutex2_init mutex1_init
-#define mutex2_lock mutex1_lock
-#define mutex2_unlock mutex1_unlock
-
-static inline void mutex2_init_locked(mutex2_t *mutex) {
- mutex2_init(mutex);
- mutex2_lock(mutex);
-}
-
-static inline void mutex2_loop_start(mutex2_t *mutex) { }
-static inline void mutex2_loop_stop(mutex2_t *mutex) { }
-
-static inline int mutex2_lock_timeout(mutex2_t *mutex, double delay) {
- struct timespec t;
- clock_gettime(CLOCK_REALTIME, &t);
- timespec_add(&t, delay);
- int error_from_timedlock = pthread_mutex_timedlock(mutex, &t);
- if (error_from_timedlock == ETIMEDOUT)
- return 0;
- ASSERT_STATUS(error_from_timedlock);
- return 1;
-}
-
-/************************************************************/
-#else
-/************************************************************/
-
typedef struct {
char locked;
pthread_mutex_t mut;
@@ -569,11 +541,7 @@
static inline int mutex2_lock_timeout(mutex2_t *mutex, double delay) {
if (mutex->locked) {
struct timespec t;
- struct timeval tv;
- RPY_GETTIMEOFDAY(&tv);
- t.tv_sec = tv.tv_sec;
- t.tv_nsec = tv.tv_usec * 1000 + 999;
- timespec_add(&t, delay);
+ timespec_delay(&t, delay);
int error_from_timedwait = pthread_cond_timedwait(
&mutex->cond, &mutex->mut, &t);
if (error_from_timedwait != ETIMEDOUT) {
@@ -585,11 +553,6 @@
return result;
}
-/************************************************************/
-#endif /* _POSIX_TIMERS */
-/************************************************************/
-
-
#define lock_test_and_set(ptr, value) __sync_lock_test_and_set(ptr, value)
#define atomic_increment(ptr) __sync_fetch_and_add(ptr, 1)
#define atomic_decrement(ptr) __sync_fetch_and_sub(ptr, 1)
More information about the pypy-commit
mailing list