diff options
author | David Härdeman <david@hardeman.nu> | 2020-06-10 22:53:42 +0200 |
---|---|---|
committer | David Härdeman <david@hardeman.nu> | 2020-06-10 22:53:42 +0200 |
commit | fd80ac9b3ea3c6e213236e27ae8b73856d2a5158 (patch) | |
tree | 427ab05ca9d0e50099787d89aedb98a374f2d217 /main.c | |
parent | 5e314fd0ebe500d3ba396a09c8984627beff2f37 (diff) |
Improve refcounting
Diffstat (limited to 'main.c')
-rw-r--r-- | main.c | 12 |
1 files changed, 10 insertions, 2 deletions
@@ -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; |