X-Git-Url: http://git.liburcu.org/?p=urcu.git;a=blobdiff_plain;f=compat_futex.c;h=6ec0b3912b34afbda58c873371f83aec55d35f68;hp=9a08624bbab59be80c9472331f7b8e4ef0f5d54c;hb=f4fe930941ad7e73ca2064c8be1abc31626ec50b;hpb=8999a9ee7abe868caf8f5327d8b2e8b8b44ee87d diff --git a/compat_futex.c b/compat_futex.c index 9a08624..6ec0b39 100644 --- a/compat_futex.c +++ b/compat_futex.c @@ -30,6 +30,7 @@ #include #include +#include /* * Using attribute "weak" for __urcu_compat_futex_lock and @@ -77,7 +78,7 @@ int compat_futex_noasync(int32_t *uaddr, int op, int32_t val, * Comparing *uaddr content against val figures out which * thread has been awakened. */ - while (*uaddr == val) + while (CMM_LOAD_SHARED(*uaddr) == val) pthread_cond_wait(&__urcu_compat_futex_cond, &__urcu_compat_futex_lock); break; @@ -121,7 +122,7 @@ int compat_futex_async(int32_t *uaddr, int op, int32_t val, switch (op) { case FUTEX_WAIT: - while (*uaddr == val) + while (CMM_LOAD_SHARED(*uaddr) == val) poll(NULL, 0, 10); break; case FUTEX_WAKE: