timed thread work
authorPhilip Kovacs <pkovacs@users.sourceforge.net>
Sat, 1 Sep 2007 21:07:40 +0000 (21:07 +0000)
committerPhilip Kovacs <pkovacs@users.sourceforge.net>
Sat, 1 Sep 2007 21:07:40 +0000 (21:07 +0000)
git-svn-id: https://conky.svn.sourceforge.net/svnroot/conky/trunk/conky1@948 7f574dfc-610e-0410-a909-a81674777703

src/timed_thread.c

index ab9753f..7c4093c 100644 (file)
@@ -179,10 +179,21 @@ timed_thread_unlock (timed_thread* p_timed_thread)
 int 
 timed_thread_test (timed_thread* p_timed_thread)
 {
+  struct timespec nowtime;
   int rc;
 
   assert (p_timed_thread != NULL);
 
+  /* adjust wait time to now if absolute_time drifted behind */
+  now (&nowtime);
+  if ( ((nowtime.tv_sec * 1000000000) + nowtime.tv_nsec) >
+       ((p_timed_thread->absolute_time.tv_sec * 1000000000) + p_timed_thread->absolute_time.tv_nsec) )
+  {
+    p_timed_thread->absolute_time.tv_sec = nowtime.tv_sec;
+    p_timed_thread->absolute_time.tv_nsec = nowtime.tv_nsec;
+  }
+
+
   /* acquire runnable_cond mutex */
   if (pthread_mutex_lock (&p_timed_thread->runnable_mutex))
     return (-1);  /* could not acquire runnable_cond mutex, so tell caller to exit thread */
@@ -194,9 +205,7 @@ timed_thread_test (timed_thread* p_timed_thread)
   /* mutex re-acquired, so release it */
   pthread_mutex_unlock (&p_timed_thread->runnable_mutex);
 
-  /* timestamp absolute future time for next pass */
-  if (now (&p_timed_thread->absolute_time))
-    return (-1);
+  /* absolute future time for next pass */
   p_timed_thread->absolute_time.tv_sec += p_timed_thread->interval_time.tv_sec;
   p_timed_thread->absolute_time.tv_nsec += p_timed_thread->interval_time.tv_nsec;