st/nine: Use atomics for available_texture_mem
authorAxel Davy <axel.davy@ens.fr>
Wed, 15 Mar 2017 21:53:36 +0000 (22:53 +0100)
committerAxel Davy <axel.davy@ens.fr>
Sun, 26 Mar 2017 21:10:38 +0000 (23:10 +0200)
Resource dtor can be executed in the worker thread.
Use atomic to avoid threading safety issues.

CC: "17.0" <mesa-stable@lists.freedesktop.org>
Signed-off-by: Axel Davy <axel.davy@ens.fr>
Tested-by: James Harvey <lothmordor@gmail.com>
src/gallium/state_trackers/nine/resource9.c

index c58372417475928c2cca7c221395a4eff029bea6..852801624a95d44343595fa4d90581fcabe347d6 100644 (file)
@@ -79,7 +79,7 @@ NineResource9_ctor( struct NineResource9 *This,
         if (This->info.target != PIPE_BUFFER) {
             This->size = util_resource_size(&This->info);
 
-            This->base.device->available_texture_mem -= This->size;
+            p_atomic_add(&This->base.device->available_texture_mem, -This->size);
             if (This->base.device->available_texture_mem <=
                     This->base.device->available_texture_limit) {
                 return D3DERR_OUTOFVIDEOMEMORY;
@@ -111,7 +111,7 @@ NineResource9_dtor( struct NineResource9 *This )
 
     /* NOTE: size is 0, unless something has actually been allocated */
     if (This->base.device)
-        This->base.device->available_texture_mem += This->size;
+        p_atomic_add(&This->base.device->available_texture_mem, This->size);
 
     NineUnknown_dtor(&This->base);
 }