- /* Create a new job and schedule it */
- pj = job_new(s, record);
- pj->delivery = tv;
- pj->time_event = avahi_time_event_queue_add(s->time_event_queue, &pj->delivery, elapse_callback, pj);
+ if ((pj = find_scheduled_job(s, record))) {
+
+ if (avahi_timeval_compare(&tv, &pj->delivery) < 0) {
+ /* If the new entry should be scheduled earlier, update the old entry */
+ pj->delivery = tv;
+ avahi_time_event_update(pj->time_event, &pj->delivery);
+ }
+
+ return 1;
+ } else {
+ /* Create a new job and schedule it */
+ if (!(pj = job_new(s, record, 0)))
+ return 0; /* OOM */
+
+ pj->delivery = tv;
+ pj->time_event = avahi_time_event_new(s->time_event_queue, &pj->delivery, elapse_callback, pj);