]> git.sesse.net Git - vlc/commitdiff
aout: use atomic variable instead of aout lock for statistics
authorRémi Denis-Courmont <remi@remlab.net>
Sun, 11 Nov 2012 15:06:46 +0000 (17:06 +0200)
committerRémi Denis-Courmont <remi@remlab.net>
Sun, 11 Nov 2012 15:07:09 +0000 (17:07 +0200)
src/audio_output/aout_internal.h
src/audio_output/dec.c

index 994ffacc974d92a0d1ef945cbc5b94938232f804..d9a870642197cd8f6d11ce5dd250e7fcb1f2aa24 100644 (file)
@@ -75,8 +75,7 @@ typedef struct
     aout_request_vout_t request_vout;
     bool recycle_vout;
 
-    unsigned buffers_lost;
-
+    atomic_uint buffers_lost;
     vlc_atomic_t restart;
 } aout_owner_t;
 
index bbf48cc32abb06e012c43e0296d5cce3dd47339b..54fa30606df6871927ad1dc5f7f85aa1811364c0 100644 (file)
@@ -96,10 +96,10 @@ error:
     date_Init (&owner->sync.date, owner->mixer_format.i_rate, 1);
     date_Set (&owner->sync.date, VLC_TS_INVALID);
     owner->sync.resamp_type = AOUT_RESAMPLING_NONE;
+    aout_unlock( p_aout );
 
-    owner->buffers_lost = 0;
+    atomic_init (&owner->buffers_lost, 0);
 
-    aout_unlock( p_aout );
     return ret;
 }
 
@@ -317,7 +317,7 @@ int aout_DecPlay (audio_output_t *aout, block_t *block, int input_rate)
     block = aout_FiltersPlay (aout, block, input_rate);
     if (block == NULL)
     {
-        owner->buffers_lost++;
+        atomic_fetch_add(&owner->buffers_lost, 1);
         goto out;
     }
 
@@ -386,21 +386,14 @@ out:
     return 0;
 drop:
     block_Release (block);
-    owner->buffers_lost++;
+    atomic_fetch_add(&owner->buffers_lost, 1);
     goto out;
 }
 
 int aout_DecGetResetLost (audio_output_t *aout)
 {
     aout_owner_t *owner = aout_owner (aout);
-    unsigned val;
-
-    aout_lock (aout);
-    val = owner->buffers_lost;
-    owner->buffers_lost = 0;
-    aout_unlock (aout);
-
-    return val;
+    return atomic_exchange(&owner->buffers_lost, 0);
 }
 
 void aout_DecChangePause (audio_output_t *aout, bool paused, mtime_t date)