--- a/ev.c	2014-08-20 14:05:42.470043284 +0200
+++ b/ev.c	2014-08-20 19:01:53.766051859 +0200
@@ -3269,6 +3269,11 @@
   if (expect_false (ev_is_active (w)))
     return;
 
+  /* in the case where quite some time has elapsed since the beginning of the
+   * current loop iteration and until the timer was started, mn_now must be
+   * updated or the callback will be invoked prematurely. */
+  time_update (EV_A_ 1e100);
+
   ev_at (w) += mn_now;
 
   assert (("libev: ev_timer_start called with negative timer repeat value", w->repeat >= 0.));
