From 3373992ca5b7ea51900a4a821379235b20e308b8 Mon Sep 17 00:00:00 2001 From: Quentin Rameau Date: Mon, 24 Jul 2017 00:38:17 +0200 Subject: [PATCH] Get rid of atexit() This was a bad idea in a forking model where exit() is called from children. --- quark.c | 4 +++- 1 file changed, 3 insertions(+), 1 deletion(-) diff --git a/quark.c b/quark.c index 4e8c4ef..fd78c1d 100644 --- a/quark.c +++ b/quark.c @@ -916,14 +916,17 @@ getusock(char *udsname, uid_t uid, gid_t gid) } if (listen(insock, SOMAXCONN) < 0) { + cleanup(); die("%s: listen: %s\n", argv0, strerror(errno)); } if (chmod(udsname, sockmode) < 0) { + cleanup(); die("%s: chmod: %s\n", argv0, strerror(errno)); } if (chown(udsname, uid, gid) < 0) { + cleanup(); die("%s: chown: %s\n", argv0, strerror(errno)); } @@ -1002,7 +1005,6 @@ main(int argc, char *argv[]) usage(); } - atexit(cleanup); if (signal(SIGINT, sigcleanup) == SIG_ERR) { fprintf(stderr, "%s: signal: Failed to handle SIGINT\n", argv0);