X-Git-Url: http://git.lttng.org/?a=blobdiff_plain;f=spinlock%2Fmem.spin;h=9e87809ea64998947cb27f6b6c88745019f0e2e8;hb=2937ba8c50d24a3b72aabe4c3e6e827fe37f0c91;hp=072d4d22c9610b52e91e98085f7794c4d3f2883b;hpb=9b305d22720211d4273a62e5f25b08d0a8a96d13;p=urcu.git diff --git a/spinlock/mem.spin b/spinlock/mem.spin index 072d4d2..9e87809 100644 --- a/spinlock/mem.spin +++ b/spinlock/mem.spin @@ -21,7 +21,17 @@ byte refcount = 0; inline spin_lock(lock) { - atomic{ !lock -> lock = 1} + do + :: 1 -> atomic { + if + :: (lock) -> + skip; + :: else -> + lock = 1; + break; + fi; + } + od; } inline spin_unlock(lock) @@ -32,7 +42,8 @@ inline spin_unlock(lock) proctype proc_X() { do - :: spin_lock(lock); + :: 1 -> + spin_lock(lock); refcount = refcount + 1; refcount = refcount - 1; spin_unlock(lock);