From 3d7ae10a541629727844163f7d64507baedd6c78 Mon Sep 17 00:00:00 2001 From: David Härdeman Date: Mon, 22 Jun 2020 20:20:08 +0200 Subject: Add a shared timer, remove timerfd usage from idle and announce --- idle.c | 48 ++++++++++++------------------------------------ 1 file changed, 12 insertions(+), 36 deletions(-) (limited to 'idle.c') diff --git a/idle.c b/idle.c index e0eb525..0d13b31 100644 --- a/idle.c +++ b/idle.c @@ -1,6 +1,5 @@ #define _GNU_SOURCE #include -#include #include #include #include @@ -12,10 +11,11 @@ #include "uring.h" #include "server.h" #include "idle.h" +#include "ptimer.h" struct idle { + struct ptimer_task ptask; struct uring_task task; - uint64_t value; }; static inline void @@ -315,25 +315,18 @@ idle_check_get_player_count(struct server *server, struct connection *conn) } static void -idle_cb(struct uring_task *task, int res) +idle_cb(struct ptimer_task *ptask) { - struct idle *idle = container_of(task, struct idle, task); + struct idle *idle = container_of(ptask, struct idle, ptask); struct server *server; - assert_return(task); - assert_task_alive(DBG_IDLE, task); - - if (res != sizeof(idle->value)) { - error("timerfd_read: %i", res); - return; - } + assert_return(ptask); + assert_task_alive(DBG_IDLE, &idle->task); - debug(DBG_IDLE, "timer fired (value: %" PRIu64 ")", idle->value); + debug(DBG_IDLE, "timer fired"); list_for_each_entry(server, &cfg->servers, list) server_idle_check(server); - - uring_read(&idle->task, &idle->value, sizeof(idle->value), idle_cb); } static void @@ -360,6 +353,7 @@ idle_delete() assert_return(cfg->idle); debug(DBG_IDLE, "closing fd %i", cfg->idle->task.fd); + ptimer_del_task(&cfg->idle->ptask); uring_task_destroy(&cfg->idle->task); cfg->idle = NULL; } @@ -368,18 +362,6 @@ void idle_init() { struct idle *idle; - int ifd; - struct itimerspec tspec = { - .it_interval = { - .tv_sec = 60, - .tv_nsec = 0 - }, - .it_value = { - /* FIXME: change to 60 */ - .tv_sec = 4, - .tv_nsec = 0 - } - }; assert_return(!cfg->idle); @@ -387,17 +369,11 @@ idle_init() if (!idle) die("malloc: %m"); - ifd = timerfd_create(CLOCK_MONOTONIC, TFD_CLOEXEC); - if (ifd < 0) - die("timerfd_create: %m"); - - if (timerfd_settime(ifd, 0, &tspec, NULL) != 0) - die("timerfd_settime: %m"); - + idle->ptask.interval = 60; + idle->ptask.times = 0; + idle->ptask.cb = idle_cb; uring_task_init(&idle->task, "idle", uring_parent(), idle_free); - uring_task_set_fd(&idle->task, ifd); + ptimer_add_task(&idle->ptask); cfg->idle = idle; - - uring_read(&idle->task, &idle->value, sizeof(idle->value), idle_cb); } -- cgit v1.2.3