diff --git a/include/hexagram/schedule.h b/include/hexagram/schedule.h index be4ab45..5e8d711 100644 --- a/include/hexagram/schedule.h +++ b/include/hexagram/schedule.h @@ -19,7 +19,7 @@ typedef struct _hexagram_schedule_table_entry { typedef struct _hexagram_schedule_slot { time_t interval_us; - hexagram_schedule_handler handler; + hexagram_schedule_table_entry *entry; } hexagram_schedule_slot; typedef struct _hexagram_schedule { diff --git a/src/schedule.c b/src/schedule.c index f0d28fb..4925dcc 100644 --- a/src/schedule.c +++ b/src/schedule.c @@ -40,10 +40,10 @@ static void _ev_notify(union sigval sv) { while (schedule->current < schedule->count) { hexagram_schedule_slot *slot = _slot(schedule, schedule->current); + hexagram_schedule_table_entry *entry = slot->entry; time_t delay = slot->interval_us; - if (slot->handler(&(schedule->table[schedule->current].frame), - schedule->ctx) < 0) { + if (entry->handler(&entry->frame, schedule->ctx) < 0) { schedule->error = errno; break; @@ -83,17 +83,15 @@ static int _schedule_init(hexagram_schedule *schedule, schedule->ev.sigev_notify_function = _ev_notify; schedule->ev.sigev_value.sival_ptr = schedule; - if (timer_create(CLOCK_REALTIME, - &schedule->ev, - &schedule->timer) < 0) { + if (timer_create(CLOCK_REALTIME, &schedule->ev, &schedule->timer) < 0) { goto error_timer_create; } for (i=0; iinterval_us = table[i].interval_us; - slot->handler = table[i].handler; + slot->entry = &table[i]; } qsort(schedule + 1, count, sizeof(hexagram_schedule_slot), _slot_cmp);