projects
/
urcu.git
/ blobdiff
commit
grep
author
committer
pickaxe
?
search:
re
summary
|
shortlog
|
log
|
commit
|
commitdiff
|
tree
raw
|
inline
| side by side
Fix: compat_futex.c: *uaddr should be read as volatile
[urcu.git]
/
compat_futex.c
diff --git
a/compat_futex.c
b/compat_futex.c
index 9a08624bbab59be80c9472331f7b8e4ef0f5d54c..6ec0b3912b34afbda58c873371f83aec55d35f68 100644
(file)
--- a/
compat_futex.c
+++ b/
compat_futex.c
@@
-30,6
+30,7
@@
#include <urcu/arch.h>
#include <urcu/futex.h>
#include <urcu/arch.h>
#include <urcu/futex.h>
+#include <urcu/system.h>
/*
* Using attribute "weak" for __urcu_compat_futex_lock and
/*
* 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.
*/
* 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;
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:
switch (op) {
case FUTEX_WAIT:
- while (
*uaddr
== val)
+ while (
CMM_LOAD_SHARED(*uaddr)
== val)
poll(NULL, 0, 10);
break;
case FUTEX_WAKE:
poll(NULL, 0, 10);
break;
case FUTEX_WAKE:
This page took
0.025105 seconds
and
4
git commands to generate.