X-Git-Url: http://repo.macrolet.net/gitweb/?a=blobdiff_plain;f=src%2Fruntime%2Fx86-arch.h;h=2dfac4792afe40f9c41a11107667e5e2a6c7706b;hb=59f4a9f62d1ab9656b02eef240d7aac65669262d;hp=1a51e6b43162bab7a7279071ac756af84b5bd4cd;hpb=4d633465231c79adeb3e4e59bf30c011d1d0e9dd;p=sbcl.git diff --git a/src/runtime/x86-arch.h b/src/runtime/x86-arch.h index 1a51e6b..2dfac47 100644 --- a/src/runtime/x86-arch.h +++ b/src/runtime/x86-arch.h @@ -48,12 +48,6 @@ get_spinlock(volatile lispobj *word, unsigned long value) #endif } -static inline void -release_spinlock(volatile lispobj *word) -{ - *word=0; -} - #include static inline lispobj @@ -74,6 +68,14 @@ swap_lispobjs(volatile lispobj *dest, lispobj value) return old_value; } +static inline void +release_spinlock(volatile lispobj *word) +{ + /* A memory barrier is needed, use swap_lispobjs. See comment in + * RELEASE-SPINLOCK in target-thread.lisp. */ + swap_lispobjs(word,0); +} + extern void fast_bzero_detect(void *, size_t); extern void (*fast_bzero_pointer)(void *, size_t);