diff -pudr glib-2.28.1.org/glib/gmain.c glib-2.28.1/glib/gmain.c
--- glib-2.28.1.org/glib/gmain.c	2011-02-15 06:03:19.000000000 +0100
+++ glib-2.28.1/glib/gmain.c	2011-03-03 17:50:19.884848866 +0100
@@ -3819,17 +3819,7 @@ g_timeout_set_expiration (GTimeoutSource
             timer_perturb = 0;
         }
 
-      /* We want the microseconds part of the timeout to land on the
-       * 'timer_perturb' mark, but we need to make sure we don't try to
-       * set the timeout in the past.  We do this by ensuring that we
-       * always only *increase* the expiration time by adding a full
-       * second in the case that the microsecond portion decreases.
-       */
-      if (timer_perturb < timeout_source->expiration % 1000000)
-        timeout_source->expiration += 1000000;
-
-      timeout_source->expiration =
-        ((timeout_source->expiration / 1000000) * 1000000) + timer_perturb;
+      timeout_source->expiration += timer_perturb - (timeout_source->expiration % 1000000);
     }
 }
 
Only in glib-2.28.1/glib: .gmain.c.swp
