[vlc-commits] commit: vlc_timer: compute overruns and adjust if they occur ( Rémi Denis-Courmont )

git at videolan.org git at videolan.org
Tue Oct 12 21:49:05 CEST 2010


vlc | branch: master | Rémi Denis-Courmont <remi at remlab.net> | Tue Oct 12 22:48:38 2010 +0300| [44848fbc590944811ede09bd6ced0ef74a5bcfd7] | committer: Rémi Denis-Courmont 

vlc_timer: compute overruns and adjust if they occur

> http://git.videolan.org/gitweb.cgi/vlc.git/?a=commit;h=44848fbc590944811ede09bd6ced0ef74a5bcfd7
---

 src/misc/pthread.c |   13 +++++++++++++
 1 files changed, 13 insertions(+), 0 deletions(-)

diff --git a/src/misc/pthread.c b/src/misc/pthread.c
index ebbad78..12be0a8 100644
--- a/src/misc/pthread.c
+++ b/src/misc/pthread.c
@@ -851,6 +851,19 @@ static void *vlc_timer_thread (void *data)
          if (interval == 0)
              return NULL;
 
+         mtime_t now = mdate ();
+         unsigned misses = (now - value) / interval;
+         /* Try to compensate for one miss (mwait() will return immediately)
+          * but no more. Otherwise, we might busy loop, after extended periods
+          * without scheduling (suspend, SIGSTOP, RT preemption, ...). */
+         if (misses > 1)
+         {
+             misses--;
+             vlc_mutex_lock (&timer->lock);
+             timer->overruns += misses;
+             vlc_mutex_unlock (&timer->lock);
+             value += misses * interval;
+         }
          value += interval;
     }
 }



More information about the vlc-commits mailing list