[vlc-commits] commit: Timer: make the overrun counter atomic ( Rémi Denis-Courmont )
git at videolan.org
git at videolan.org
Wed Oct 13 18:23:38 CEST 2010
vlc | branch: master | Rémi Denis-Courmont <remi at remlab.net> | Wed Oct 13 19:06:55 2010 +0300| [6f2119ef405026333d8273ed8c5efd603e9cd287] | committer: Rémi Denis-Courmont
Timer: make the overrun counter atomic
> http://git.videolan.org/gitweb.cgi/vlc.git/?a=commit;h=6f2119ef405026333d8273ed8c5efd603e9cd287
---
src/misc/pthread.c | 19 ++++++-------------
1 files changed, 6 insertions(+), 13 deletions(-)
diff --git a/src/misc/pthread.c b/src/misc/pthread.c
index fcbf3e7..3d07092 100644
--- a/src/misc/pthread.c
+++ b/src/misc/pthread.c
@@ -29,6 +29,7 @@
#endif
#include <vlc_common.h>
+#include <vlc_atomic.h>
#include "libvlc.h"
#include <stdarg.h>
@@ -805,7 +806,7 @@ struct vlc_timer
void *data;
mtime_t value, interval;
unsigned users;
- unsigned overruns;
+ vlc_atomic_t overruns;
};
static void *vlc_timer_do (void *data)
@@ -840,7 +841,7 @@ static void *vlc_timer_thread (void *data)
vlc_mutex_lock (&timer->lock);
if (vlc_clone (&th, vlc_timer_do, timer, VLC_THREAD_PRIORITY_INPUT))
- timer->overruns++;
+ vlc_atomic_inc(&timer->overruns);
else
{
vlc_detach (th);
@@ -859,9 +860,7 @@ static void *vlc_timer_thread (void *data)
if (misses > 1)
{
misses--;
- vlc_mutex_lock (&timer->lock);
- timer->overruns += misses;
- vlc_mutex_unlock (&timer->lock);
+ vlc_atomic_add (&timer->overruns, misses);
value += misses * interval;
}
value += interval;
@@ -892,7 +891,7 @@ int vlc_timer_create (vlc_timer_t *id, void (*func) (void *), void *data)
timer->value = 0;
timer->interval = 0;
timer->users = 0;
- timer->overruns = 0;
+ vlc_atomic_set(&timer->overruns, 0);
*id = timer;
return 0;
}
@@ -970,11 +969,5 @@ void vlc_timer_schedule (vlc_timer_t timer, bool absolute,
*/
unsigned vlc_timer_getoverrun (vlc_timer_t timer)
{
- unsigned ret;
-
- vlc_mutex_lock (&timer->lock);
- ret = timer->overruns;
- timer->overruns = 0;
- vlc_mutex_unlock (&timer->lock);
- return ret;
+ return vlc_atomic_swap (&timer->overruns, 0);
}
More information about the vlc-commits
mailing list