Document g_timeout_add_seconds first call latency
authorEmilio Pozuelo Monfort <pochu27@gmail.com>
Sat, 12 Mar 2011 10:08:52 +0000 (10:08 +0000)
committerEmilio Pozuelo Monfort <pochu27@gmail.com>
Sat, 12 Mar 2011 15:51:44 +0000 (15:51 +0000)
And fix /timeout/rounding to not fail if the first call
happens after 2 seconds.

https://bugzilla.gnome.org/show_bug.cgi?id=644552

glib/gmain.c
glib/tests/timeout.c

index 3a480f3..d4f393e 100644 (file)
@@ -4118,7 +4118,11 @@ g_timeout_add_seconds_full (gint           priority,
  * g_timeout_source_new_seconds() and attaches it to the main loop context 
  * using g_source_attach(). You can do these steps manually if you need 
  * greater control. Also see g_timout_add_seconds_full().
- * 
+ *
+ * Note that the first call of the timer may not be precise for timeouts
+ * of one second. If you need finer precision and have such a timeout,
+ * you may want to use g_timeout_add() instead.
+ *
  * Return value: the ID (greater than 0) of the event source.
  *
  * Since: 2.14
index 824afc0..bae2b4f 100644 (file)
@@ -53,7 +53,13 @@ test_func (gpointer data)
 
   current_time = g_get_monotonic_time ();
 
-  g_assert (current_time / 1000000 - last_time / 1000000 == 1);
+  /* We accept 2 on the first iteration because _add_seconds() can
+   * have an initial latency of 1 second, see its documentation.
+   */
+  if (count == 0)
+    g_assert (current_time / 1000000 - last_time / 1000000 <= 2);
+  else
+    g_assert (current_time / 1000000 - last_time / 1000000 == 1);
 
   last_time = current_time;
   count++;