diff options
Diffstat (limited to 'announce.c')
-rw-r--r-- | announce.c | 16 |
1 files changed, 12 insertions, 4 deletions
@@ -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"); |