summaryrefslogtreecommitdiff
path: root/main.c
diff options
context:
space:
mode:
authorDavid Härdeman <david@hardeman.nu>2020-06-10 22:53:42 +0200
committerDavid Härdeman <david@hardeman.nu>2020-06-10 22:53:42 +0200
commitfd80ac9b3ea3c6e213236e27ae8b73856d2a5158 (patch)
tree427ab05ca9d0e50099787d89aedb98a374f2d217 /main.c
parent5e314fd0ebe500d3ba396a09c8984627beff2f37 (diff)
Improve refcounting
Diffstat (limited to 'main.c')
-rw-r--r--main.c12
1 files changed, 10 insertions, 2 deletions
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;