From e11014c0443ea687ad65a14b9124aa366da7984a Mon Sep 17 00:00:00 2001 From: David Härdeman Date: Sat, 20 Jun 2020 12:53:25 +0200 Subject: Introduce helper for checking if a task is dead --- announce.c | 16 ++++++++++++---- 1 file changed, 12 insertions(+), 4 deletions(-) (limited to 'announce.c') diff --git a/announce.c b/announce.c index b90d983..ecb48af 100644 --- a/announce.c +++ b/announce.c @@ -27,10 +27,20 @@ mcast_free(struct uring_task *task) static void mcast_sent(struct cfg *cfg, struct uring_task *task, int res) { + struct server *server; + if (res < 0) error("failure %i\n", res); else debug(DBG_ANN, "result %i\n", res); + + if (!task || !task->tbuf) { + error("task or task->tbuf not set\n"); + return; + } + + server = container_of(task->tbuf, struct server, mcast_buf); + uring_task_put(cfg, &server->task); } static void @@ -52,6 +62,7 @@ mcast_send(struct cfg *cfg, struct announce *aev, struct server *server) server->mcast_buf.len = len; uring_task_set_buf(&aev->mcast_task, &server->mcast_buf); + uring_task_get(cfg, &server->task); uring_tbuf_sendmsg(cfg, &aev->mcast_task, mcast_sent); } @@ -71,10 +82,7 @@ announce_cb(struct cfg *cfg, struct uring_task *task, int res) { struct announce *aev = container_of(task, struct announce, task); - if (task->dead) { - debug(DBG_ANN, "task is dead\n"); - return; - } + assert_task_alive(DBG_ANN, task); if (res != sizeof(aev->value)) perrordie("timerfd_read"); -- cgit v1.2.3