From fd80ac9b3ea3c6e213236e27ae8b73856d2a5158 Mon Sep 17 00:00:00 2001 From: David Härdeman Date: Wed, 10 Jun 2020 22:53:42 +0200 Subject: Improve refcounting --- rcon.c | 29 ++++++++++++++++++++++++++--- 1 file changed, 26 insertions(+), 3 deletions(-) (limited to 'rcon.c') diff --git a/rcon.c b/rcon.c index be2f279..02fd021 100644 --- a/rcon.c +++ b/rcon.c @@ -52,9 +52,7 @@ rcon_delete(struct cfg *cfg, struct server *server) return; fprintf(stderr, "%s called, closing fd %i\n", __func__, rcon->task.fd); - uring_cancel(cfg, &rcon->task); - /* FIXME: Won't the refcount be wrong? */ - uring_task_put(cfg, &rcon->task); + uring_task_destroy(cfg, &rcon->task); server->rcon = NULL; } @@ -213,6 +211,11 @@ rcon_stop_reply(struct cfg *cfg, struct uring_task *task, int res) char *msg; fprintf(stderr, "%s: result %i\n", __func__, res); + if (task->dead) { + fprintf(stderr, "%s: task dead\n", __func__); + return; + } + if (res < 0) goto out; @@ -237,6 +240,11 @@ rcon_stop_sent(struct cfg *cfg, struct uring_task *task, int res) struct rcon *rcon = container_of(task, struct rcon, task); fprintf(stderr, "%s: result %i\n", __func__, res); + if (task->dead) { + fprintf(stderr, "%s: task dead\n", __func__); + return; + } + if (res < 0) { uring_task_put(cfg, &rcon->task); return; @@ -255,6 +263,11 @@ rcon_login_reply(struct cfg *cfg, struct uring_task *task, int res) char *msg; fprintf(stderr, "%s: result %i\n", __func__, res); + if (task->dead) { + fprintf(stderr, "%s: task dead\n", __func__); + return; + } + if (res < 0) goto out; @@ -286,6 +299,11 @@ rcon_login_sent(struct cfg *cfg, struct uring_task *task, int res) struct rcon *rcon = container_of(task, struct rcon, task); fprintf(stderr, "%s: result %i\n", __func__, res); + if (task->dead) { + fprintf(stderr, "%s: task dead\n", __func__); + return; + } + if (res < 0) { uring_task_put(cfg, &rcon->task); return; @@ -303,6 +321,11 @@ rcon_connected(struct cfg *cfg, struct uring_task *task, int res) struct rcon *rcon = container_of(task, struct rcon, task); fprintf(stderr, "%s: connected %i\n", __func__, res); + if (task->dead) { + fprintf(stderr, "%s: task dead\n", __func__); + return; + } + if (res < 0) { rcon_connect_next_rcon(cfg, rcon); return; -- cgit v1.2.3