From 9295a00a976df83d2c35a6dc56ceb35c05f692dd Mon Sep 17 00:00:00 2001 From: David Härdeman Date: Mon, 22 Jun 2020 21:59:14 +0200 Subject: Fixup server connection timeouts --- ptimer.c | 37 ++++++++++++++++++++++++++----------- 1 file changed, 26 insertions(+), 11 deletions(-) (limited to 'ptimer.c') diff --git a/ptimer.c b/ptimer.c index 7d8662d..5f9cf5d 100644 --- a/ptimer.c +++ b/ptimer.c @@ -62,19 +62,26 @@ ptimer_tick(struct ptimer *ptimer) unsigned diff = (unsigned)(now - ptimer->previous_time); struct ptimer_task *ptask, *ptmp; - fprintf(stderr, "Got a tick of %u secs\n", diff); + debug(DBG_TIMER, "got a tick of %u secs", diff); list_for_each_entry_safe(ptask, ptmp, &ptimer->ptasks, list) { if (ptask->remain > diff) { ptask->remain -= diff; continue; } + debug(DBG_TIMER, "triggering ptask %p (times %u)", + ptask, ptask->times); + ptask->cb(ptask); ptask->remain = ptask->interval; - if (ptask->times > 0) { - ptask->times--; - if (ptask->times == 0) - list_del(&ptask->list); + + if (ptask->times == 0) + continue; + + ptask->times--; + if (ptask->times == 0) { + ptask->active = false; + list_del(&ptask->list); } } @@ -87,8 +94,10 @@ ptimer_reconfig(struct ptimer *ptimer) struct ptimer_task *ptask; unsigned i = 0; unsigned lowest = ~0; + unsigned interval; if (list_empty(&ptimer->ptasks)) { + debug(DBG_TIMER, "no tasks"); ptimer_set(0, 0); return; } @@ -101,8 +110,10 @@ ptimer_reconfig(struct ptimer *ptimer) intervals[i++] = ptask->interval; } - fprintf(stderr, "Lowest %u GCD is %u\n", lowest, array_gcd(intervals, i)); - ptimer_set(lowest, array_gcd(intervals, i)); + interval = array_gcd(intervals, i); + + debug(DBG_TIMER, "lowest: %u, gcd: %u\n", lowest, interval); + ptimer_set(lowest, interval); } void @@ -110,9 +121,12 @@ ptimer_del_task(struct ptimer_task *ptask) { struct ptimer *ptimer = cfg->ptimer; - assert_return(ptask && ptimer && ptimer->task_count > 0); + assert_return(ptask && ptimer); + assert_return_silent(ptask->active); + assert_return(ptimer->task_count > 0); list_del(&ptask->list); + ptask->active = false; ptimer->task_count--; ptimer_tick(ptimer); ptimer_reconfig(ptimer); @@ -125,8 +139,10 @@ ptimer_add_task(struct ptimer_task *ptask) struct ptimer *ptimer = cfg->ptimer; assert_return(ptask && ptask->interval > 0 && ptask->cb && ptimer); + assert_return_silent(!ptask->active); uring_task_get(&ptimer->task); + ptask->active = true; ptask->remain = ptask->interval; ptimer_tick(ptimer); list_add(&ptask->list, &ptimer->ptasks); @@ -149,7 +165,7 @@ ptimer_free(struct uring_task *task) assert_return(task); - debug(DBG_ANN, "task %p, ptimer %p", task, ptimer); + debug(DBG_TIMER, "task %p, ptimer %p", task, ptimer); xfree(ptimer); cfg->ptimer = NULL; } @@ -159,7 +175,7 @@ ptimer_delete() { assert_return(cfg->ptimer); - debug(DBG_ANN, "closing fd %i", cfg->ptimer->task.fd); + debug(DBG_TIMER, "closing fd %i", cfg->ptimer->task.fd); uring_task_destroy(&cfg->ptimer->task); } @@ -176,7 +192,6 @@ ptimer_cb(struct uring_task *task, int res) return; } - debug(DBG_IGMP, "Called"); ptimer_tick(ptimer); uring_read(&ptimer->task, &ptimer->value, sizeof(ptimer->value), ptimer_cb); } -- cgit v1.2.3