From 3f5d360b8421502a2e933211d9463b74d27bb7e0 Mon Sep 17 00:00:00 2001 From: "Nicolas \"Pixel\" Noble" Date: Sat, 4 Jan 2014 01:04:11 -0800 Subject: Fixing Win32 deadlock. Memory barriers and read-write barriers aren't the same thing. The former are CPU-barriers, while the latter are compiler-barriers. Using a compiler-barrier won't prevent you from CPU desynchronization. --- ev.c | 6 +++--- 1 file changed, 3 insertions(+), 3 deletions(-) diff --git a/ev.c b/ev.c index c8e7fb2..741d164 100644 --- a/ev.c +++ b/ev.c @@ -664,9 +664,9 @@ struct signalfd_siginfo #define ECB_MEMORY_FENCE __sync_synchronize () #elif _MSC_VER >= 1400 /* VC++ 2005 */ #pragma intrinsic(_ReadBarrier,_WriteBarrier,_ReadWriteBarrier) - #define ECB_MEMORY_FENCE _ReadWriteBarrier () - #define ECB_MEMORY_FENCE_ACQUIRE _ReadWriteBarrier () /* according to msdn, _ReadBarrier is not a load fence */ - #define ECB_MEMORY_FENCE_RELEASE _WriteBarrier () + #define ECB_MEMORY_FENCE _ReadWriteBarrier (); MemoryBarrier() + #define ECB_MEMORY_FENCE_ACQUIRE _ReadWriteBarrier (); MemoryBarrier() /* according to msdn, _ReadBarrier is not a load fence */ + #define ECB_MEMORY_FENCE_RELEASE _WriteBarrier (); MemoryBarrier() #elif defined _WIN32 #include #define ECB_MEMORY_FENCE MemoryBarrier () /* actually just xchg on x86... scary */ -- cgit v1.2.3