projects
/
urcu.git
/ blobdiff
commit
grep
author
committer
pickaxe
?
search:
re
summary
|
shortlog
|
log
|
commit
|
commitdiff
|
tree
raw
|
inline
| side by side
urcu-wait: Fix wait state load/store
[urcu.git]
/
src
/
urcu-wait.h
diff --git
a/src/urcu-wait.h
b/src/urcu-wait.h
index 68a42dac22c67c8df9e14608a52c05b3b109e0f7..1fa95c305dee77f944be5930b8dc7a092f66d17a 100644
(file)
--- a/
src/urcu-wait.h
+++ b/
src/urcu-wait.h
@@
-122,7
+122,7
@@
void urcu_adaptative_wake_up(struct urcu_wait_node *wait)
urcu_die(errno);
}
/* Allow teardown of struct urcu_wait memory. */
urcu_die(errno);
}
/* Allow teardown of struct urcu_wait memory. */
- uatomic_or
(&wait->state, URCU_WAIT_TEARDOWN
);
+ uatomic_or
_mo(&wait->state, URCU_WAIT_TEARDOWN, CMM_RELEASE
);
}
/*
}
/*
@@
-180,7
+180,7
@@
skip_futex_wait:
break;
caa_cpu_relax();
}
break;
caa_cpu_relax();
}
- while (!(uatomic_
read(&wait->state
) & URCU_WAIT_TEARDOWN))
+ while (!(uatomic_
load(&wait->state, CMM_ACQUIRE
) & URCU_WAIT_TEARDOWN))
poll(NULL, 0, 10);
urcu_posix_assert(uatomic_read(&wait->state) & URCU_WAIT_TEARDOWN);
}
poll(NULL, 0, 10);
urcu_posix_assert(uatomic_read(&wait->state) & URCU_WAIT_TEARDOWN);
}
@@
-196,7
+196,7
@@
void urcu_wake_all_waiters(struct urcu_waiters *waiters)
caa_container_of(iter, struct urcu_wait_node, node);
/* Don't wake already running threads */
caa_container_of(iter, struct urcu_wait_node, node);
/* Don't wake already running threads */
- if (
wait_node->state
& URCU_WAIT_RUNNING)
+ if (
uatomic_load(&wait_node->state, CMM_RELAXED)
& URCU_WAIT_RUNNING)
continue;
urcu_adaptative_wake_up(wait_node);
}
continue;
urcu_adaptative_wake_up(wait_node);
}
This page took
0.023932 seconds
and
4
git commands to generate.