summaryrefslogtreecommitdiff
path: root/kern/sref.c
diff options
context:
space:
mode:
authorRichard Braun <rbraun@sceen.net>2017-07-25 21:18:42 +0200
committerRichard Braun <rbraun@sceen.net>2017-07-25 21:18:42 +0200
commit35a39b5b7e89870daea062d3fe433b15c7697827 (patch)
treec81e03598c6a7a7e5ce99a6e258d46fe5d03507d /kern/sref.c
parentb8d62ebb97834f615260822553aa3ab7da0ea489 (diff)
kern/sref: improve sref_weakref_tryget
Diffstat (limited to 'kern/sref.c')
-rw-r--r--kern/sref.c3
1 files changed, 1 insertions, 2 deletions
diff --git a/kern/sref.c b/kern/sref.c
index 9c49a42..5cb6620 100644
--- a/kern/sref.c
+++ b/kern/sref.c
@@ -288,11 +288,10 @@ sref_weakref_tryget(struct sref_weakref *weakref)
{
uintptr_t addr, oldval, newval;
- /* TODO Review */
do {
addr = atomic_load(&weakref->addr, ATOMIC_RELAXED);
newval = addr & SREF_WEAKREF_MASK;
- oldval = atomic_cas_acquire(&weakref->addr, addr, newval);
+ oldval = atomic_cas(&weakref->addr, addr, newval, ATOMIC_RELAXED);
} while (oldval != addr);
return (struct sref_counter *)newval;