st/nine: Use atomics for nine_bind
authorAxel Davy <axel.davy@ens.fr>
Wed, 26 Oct 2016 21:15:34 +0000 (23:15 +0200)
committerAxel Davy <axel.davy@ens.fr>
Tue, 20 Dec 2016 22:44:22 +0000 (23:44 +0100)
nine_bind didn't need atomics up to now,
because it's use what always within a protected
mutex. We need to use atomics because with the
next patches several threads may use nine_bind.

Signed-off-by: Axel Davy <axel.davy@ens.fr>
src/gallium/state_trackers/nine/iunknown.h

index 63b16bd7cc896f0e1ea0c7215e74fa0d51a93348..d357aad9c6fe12b52cf4819b4770428bed0ac2fe 100644 (file)
@@ -25,6 +25,7 @@
 
 #include "pipe/p_compiler.h"
 
+#include "util/u_atomic.h"
 #include "util/u_memory.h"
 
 #include "guid.h"
@@ -127,7 +128,7 @@ NineUnknown_Destroy( struct NineUnknown *This )
 static inline UINT
 NineUnknown_Bind( struct NineUnknown *This )
 {
-    UINT b = ++This->bind;
+    UINT b = p_atomic_inc_return(&This->bind);
     assert(b);
     if (b == 1 && This->container) {
         if (This->container != NineUnknown(This->device))
@@ -139,7 +140,7 @@ NineUnknown_Bind( struct NineUnknown *This )
 static inline UINT
 NineUnknown_Unbind( struct NineUnknown *This )
 {
-    UINT b = --This->bind;
+    UINT b = p_atomic_dec_return(&This->bind);
     if (!b) {
         if (This->container) {
             if (This->container != NineUnknown(This->device))