VPP-1031: Fix minor issues in clib_spinlock_unlock()
authorDave Barach <[email protected]>
Sun, 15 Oct 2017 21:20:40 +0000 (17:20 -0400)
committerDave Barach <[email protected]>
Mon, 16 Oct 2017 22:34:33 +0000 (18:34 -0400)
Change-Id: I20ce799c9dd57332c06003b466ee7c36169bce98
Signed-off-by: Dave Barach <[email protected]>
(cherry picked from commit fa77e8fb1cc8a87a4a31792698e7200c4195583e)

src/vppinfra/lock.h

index 0cd2b4f..7d24167 100644 (file)
@@ -71,12 +71,14 @@ clib_spinlock_lock_if_init (clib_spinlock_t * p)
 static_always_inline void
 clib_spinlock_unlock (clib_spinlock_t * p)
 {
-  (*p)->lock = 0;
 #if CLIB_DEBUG > 0
   (*p)->frame_address = 0;
   (*p)->pid = 0;
   (*p)->thread_index = 0;
 #endif
+  /* Make sure all writes are complete before releasing the lock */
+  CLIB_MEMORY_BARRIER ();
+  (*p)->lock = 0;
 }
 
 static_always_inline void