summaryrefslogtreecommitdiff
path: root/announce.c
diff options
context:
space:
mode:
authorDavid Härdeman <david@hardeman.nu>2020-06-20 12:53:25 +0200
committerDavid Härdeman <david@hardeman.nu>2020-06-20 12:53:25 +0200
commite11014c0443ea687ad65a14b9124aa366da7984a (patch)
tree8c6642ed187dc71cc672cec9f3459aa75134eaa5 /announce.c
parentfc25e880dfb1f804742006bcdd15ac70d18b4144 (diff)
Introduce helper for checking if a task is dead
Diffstat (limited to 'announce.c')
-rw-r--r--announce.c16
1 files changed, 12 insertions, 4 deletions
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");