+static void elapse_callback(AvahiTimeEvent *e, gpointer data);
+
+static void job_set_elapse_time(AvahiProbeScheduler *s, AvahiProbeJob *pj, guint msec, guint jitter) {
+ GTimeVal tv;
+
+ g_assert(s);
+ g_assert(pj);
+
+ avahi_elapse_time(&tv, msec, jitter);
+
+ if (pj->time_event)
+ avahi_time_event_queue_update(s->time_event_queue, pj->time_event, &tv);
+ else
+ pj->time_event = avahi_time_event_queue_add(s->time_event_queue, &tv, elapse_callback, pj);
+}
+
+static void job_mark_done(AvahiProbeScheduler *s, AvahiProbeJob *pj) {
+ g_assert(s);
+ g_assert(pj);
+
+ g_assert(!pj->done);
+
+ AVAHI_LLIST_REMOVE(AvahiProbeJob, jobs, s->jobs, pj);
+ AVAHI_LLIST_PREPEND(AvahiProbeJob, jobs, s->history, pj);
+
+ pj->done = TRUE;
+
+ job_set_elapse_time(s, pj, AVAHI_PROBE_HISTORY_MSEC, 0);
+ g_get_current_time(&pj->delivery);
+}