summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorDavid Xu <davidxu@FreeBSD.org>2012-01-16 06:15:14 +0000
committerDavid Xu <davidxu@FreeBSD.org>2012-01-16 06:15:14 +0000
commitd22d46ce273f1110138cdae5dc0da054792e2bdd (patch)
tree70dfbacc2a1965484fe6fbb8737bb28f2446c999
parentb8349441059329ab4682c37bc48d67a0c96fe63f (diff)
Notes
-rw-r--r--lib/libc/gen/sem.c2
-rw-r--r--lib/libc/gen/sem_new.c1
2 files changed, 2 insertions, 1 deletions
diff --git a/lib/libc/gen/sem.c b/lib/libc/gen/sem.c
index e9ae6691090d..842298f4d2a3 100644
--- a/lib/libc/gen/sem.c
+++ b/lib/libc/gen/sem.c
@@ -434,7 +434,7 @@ _libc_sem_post_compat(sem_t *sem)
return ksem_post((*sem)->semid);
atomic_add_rel_int(&(*sem)->count, 1);
-
+ rmb();
if ((*sem)->nwaiters)
return _umtx_wake(&(*sem)->count);
return (0);
diff --git a/lib/libc/gen/sem_new.c b/lib/libc/gen/sem_new.c
index 2698b4056536..1480afb3a6c2 100644
--- a/lib/libc/gen/sem_new.c
+++ b/lib/libc/gen/sem_new.c
@@ -332,6 +332,7 @@ _sem_getvalue(sem_t * __restrict sem, int * __restrict sval)
static __inline int
usem_wake(struct _usem *sem)
{
+ rmb();
if (!sem->_has_waiters)
return (0);
return _umtx_op(sem, UMTX_OP_SEM_WAKE, 0, NULL, NULL);