[gegl] buffer: fix swap-total-uncloned count



commit bbd1c28e6de1eb3a1af7cb3d2fc07c9a47f2eea5
Author: Ell <ell_se yahoo com>
Date:   Tue Dec 4 08:12:55 2018 -0500

    buffer: fix swap-total-uncloned count
    
    Fix the reported uncloned total swap size, by counting the size of
    all cloned blocks, not only of the first block to be cloned in each
    set.

 gegl/buffer/gegl-tile-backend-swap.c | 19 +++++++------------
 1 file changed, 7 insertions(+), 12 deletions(-)
---
diff --git a/gegl/buffer/gegl-tile-backend-swap.c b/gegl/buffer/gegl-tile-backend-swap.c
index f0dce9d01..56929da02 100644
--- a/gegl/buffer/gegl-tile-backend-swap.c
+++ b/gegl/buffer/gegl-tile-backend-swap.c
@@ -681,12 +681,11 @@ static SwapBlock *
 gegl_tile_backend_swap_block_ref (GeglTileBackendSwap *self,
                                   SwapBlock           *block)
 {
-  if (g_atomic_int_add (&block->ref_count, +1) == 1)
-    {
-      g_atomic_pointer_add (
-        &cloned_total,
-        +gegl_tile_backend_get_tile_size (GEGL_TILE_BACKEND (self)));
-    }
+  g_atomic_int_inc (&block->ref_count);
+
+  g_atomic_pointer_add (
+    &cloned_total,
+    +gegl_tile_backend_get_tile_size (GEGL_TILE_BACKEND (self)));
 
   return block;
 }
@@ -696,11 +695,7 @@ gegl_tile_backend_swap_block_unref (GeglTileBackendSwap *self,
                                     SwapBlock           *block,
                                     gboolean             lock)
 {
-  gint ref_count;
-
-  ref_count = g_atomic_int_add (&block->ref_count, -1) - 1;
-
-  if (ref_count == 0)
+  if (g_atomic_int_dec_and_test (&block->ref_count))
     {
       if (lock)
         g_mutex_lock (&queue_mutex);
@@ -753,7 +748,7 @@ gegl_tile_backend_swap_block_unref (GeglTileBackendSwap *self,
       if (lock)
         g_mutex_unlock (&queue_mutex);
     }
-  else if (ref_count == 1)
+  else
     {
       g_atomic_pointer_add (
         &cloned_total,


[Date Prev][Date Next]   [Thread Prev][Thread Next]   [Thread Index] [Date Index] [Author Index]