From 57e2151625592731633593d0aabefd2110ecf28f Mon Sep 17 00:00:00 2001 From: "Alfred E. Heggestad" Date: Thu, 8 Dec 2011 13:48:55 +0000 Subject: [PATCH] patch: optimize tmr when delay is 0 --- src/tmr/tmr.c | 28 ++++++++++++++++++++++++---- 1 file changed, 24 insertions(+), 4 deletions(-) diff --git a/src/tmr/tmr.c b/src/tmr/tmr.c index 84bb927..3611001 100644 --- a/src/tmr/tmr.c +++ b/src/tmr/tmr.c @@ -49,6 +49,15 @@ static bool inspos_handler(struct le *le, void *arg) } +static bool inspos_handler_0(struct le *le, void *arg) +{ + struct tmr *tmr = le->data; + const uint64_t now = *(uint64_t *)arg; + + return tmr->jfs > now; +} + + #if TMR_DEBUG static void call_handler(tmr_h *th, void *arg) { @@ -233,12 +242,23 @@ void tmr_start(struct tmr *tmr, uint64_t delay, tmr_h *th, void *arg) tmr->jfs = delay + tmr_jiffies(); - le = list_apply(tmrl, false, inspos_handler, &tmr->jfs); - if (le) { - list_insert_after(tmrl, le, &tmr->le, tmr); + if (delay == 0) { + le = list_apply(tmrl, true, inspos_handler_0, &tmr->jfs); + if (le) { + list_insert_before(tmrl, le, &tmr->le, tmr); + } + else { + list_append(tmrl, &tmr->le, tmr); + } } else { - list_prepend(tmrl, &tmr->le, tmr); + le = list_apply(tmrl, false, inspos_handler, &tmr->jfs); + if (le) { + list_insert_after(tmrl, le, &tmr->le, tmr); + } + else { + list_prepend(tmrl, &tmr->le, tmr); + } } #ifdef HAVE_ACTSCHED