diff options
Diffstat (limited to 'rcon.c')
-rw-r--r-- | rcon.c | 29 |
1 files changed, 26 insertions, 3 deletions
@@ -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; |