diff options
author | Richard Braun <rbraun@sceen.net> | 2017-07-25 21:18:42 +0200 |
---|---|---|
committer | Richard Braun <rbraun@sceen.net> | 2017-07-25 21:18:42 +0200 |
commit | 35a39b5b7e89870daea062d3fe433b15c7697827 (patch) | |
tree | c81e03598c6a7a7e5ce99a6e258d46fe5d03507d /kern/sref.c | |
parent | b8d62ebb97834f615260822553aa3ab7da0ea489 (diff) |
kern/sref: improve sref_weakref_tryget
Diffstat (limited to 'kern/sref.c')
-rw-r--r-- | kern/sref.c | 3 |
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; |