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 --- main.c | 12 ++++++++++-- 1 file changed, 10 insertions(+), 2 deletions(-) (limited to 'main.c') diff --git a/main.c b/main.c index c8e8a8d..0f41ea0 100644 --- a/main.c +++ b/main.c @@ -184,6 +184,11 @@ signalfd_read(struct cfg *cfg, struct uring_task *task, int res) struct server *server, *stmp; static int count = 0; + if (task->dead) { + fprintf(stderr, "%s: task dead\n", __func__); + return; + } + count++; if (count > 5) exit(EXIT_FAILURE); @@ -197,14 +202,17 @@ signalfd_read(struct cfg *cfg, struct uring_task *task, int res) } else { fprintf(stderr, "Got a signal to dump tree\n"); dump_tree(cfg); + uring_task_put(cfg, &sev->task); announce_delete(cfg); cfgdir_delete(cfg); list_for_each_entry_safe(server, stmp, &cfg->servers, list) server_delete(cfg, server); fprintf(stderr, "%s: putting sev task 0x%p\n", __func__, &sev->task); - uring_task_put(cfg, &sev->task); - //uring_read(cfg, &sev->task, &sev->buf, sizeof(sev->buf), signalfd_read); + uring_delete(cfg); + return; } + + uring_read(cfg, &sev->task, &sev->buf, sizeof(sev->buf), signalfd_read); } static int hack_efd = -1; -- cgit v1.2.3