summaryrefslogtreecommitdiff
path: root/main.c
diff options
context:
space:
mode:
Diffstat (limited to 'main.c')
-rw-r--r--main.c30
1 files changed, 26 insertions, 4 deletions
diff --git a/main.c b/main.c
index 1fc0e5d..398a998 100644
--- a/main.c
+++ b/main.c
@@ -22,6 +22,10 @@
int debuglvl = 0;
+bool exiting = false;
+
+struct cfg *cfghack = NULL;
+
void
debug(unsigned lvl, const char *fmt, ...)
{
@@ -57,8 +61,10 @@ cfg_free(struct uring_task *task)
{
struct cfg *cfg = container_of(task, struct cfg, task);
+ fprintf(stderr, "%s: called\n", __func__);
free(cfg);
- exit(EXIT_SUCCESS);
+ fprintf(stderr, "All resources free, exiting\n");
+ exiting = true;
}
static void
@@ -134,6 +140,7 @@ cfg_init(int argc, char **argv)
struct signalfd_ev {
struct uring_task task;
//struct signalfd_siginfo buf;
+ struct cfg *cfg;
uint64_t buf;
};
@@ -142,7 +149,8 @@ signalfd_free(struct uring_task *task)
{
struct signalfd_ev *sev = container_of(task, struct signalfd_ev, task);
- debug(2, "Freeing signalfd\n");
+ fprintf(stderr, "%s: called\n", __func__);
+ sev->cfg->sev = NULL;
free(sev);
}
@@ -156,7 +164,8 @@ dump_tree(struct cfg *cfg)
fprintf(stderr, "============\n");
uring_task_refdump(&cfg->task);
uring_refdump(cfg->uev);
- uring_task_refdump(&cfg->sev->task);
+ if (cfg->sev)
+ uring_task_refdump(&cfg->sev->task);
announce_refdump(cfg->aev);
if (cfg->iev)
cfgdir_refdump(cfg->iev);
@@ -190,7 +199,9 @@ signalfd_read(struct cfg *cfg, struct uring_task *task, int res)
cfgdir_delete(cfg);
list_for_each_entry_safe(server, stmp, &cfg->servers, list)
server_delete(cfg, server);
- uring_read(cfg, &sev->task, &sev->buf, sizeof(sev->buf), 0, signalfd_read);
+ 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), 0, signalfd_read);
}
}
@@ -200,11 +211,14 @@ static void
hack_handler(int signum)
{
uint64_t val;
+ static int count = 0;
switch (signum) {
case SIGINT:
fprintf(stderr, "Got a SIGINT\n");
val = 1000;
+ if (count > 3)
+ dump_tree(cfghack);
break;
case SIGHUP:
fprintf(stderr, "Got a SIGHUP\n");
@@ -221,6 +235,7 @@ hack_handler(int signum)
}
write(hack_efd, &val, sizeof(val));
+ count++;
}
static void
@@ -264,6 +279,7 @@ signalfd_init(struct cfg *cfg)
uring_task_init(&sev->task, "sev", uring_parent(cfg), signalfd_free);
uring_task_set_fd(&sev->task, sfd);
cfg->sev = sev;
+ sev->cfg = cfg;
hack_efd = sfd;
uring_read(cfg, &sev->task, &sev->buf, sizeof(sev->buf), 0, signalfd_read);
}
@@ -275,6 +291,8 @@ main(int argc, char **argv)
cfg = cfg_init(argc, argv);
+ cfghack = cfg;
+
cfg_read(cfg);
uring_init(cfg);
@@ -287,7 +305,11 @@ main(int argc, char **argv)
announce_start(cfg->aev);
+ uring_task_put(cfg, &cfg->task);
+
uring_event_loop(cfg);
+ fprintf(stderr, "Event loop exited\n");
+
exit(EXIT_SUCCESS);
}