summaryrefslogtreecommitdiff
path: root/src/common/core.cpp
diff options
context:
space:
mode:
Diffstat (limited to 'src/common/core.cpp')
-rw-r--r--src/common/core.cpp18
1 files changed, 13 insertions, 5 deletions
diff --git a/src/common/core.cpp b/src/common/core.cpp
index 727babd..fe2f660 100644
--- a/src/common/core.cpp
+++ b/src/common/core.cpp
@@ -10,6 +10,8 @@
#include "../strings/zstring.hpp"
+#include "../io/cxxstdio.hpp"
+
#include "random.hpp"
#include "socket.hpp"
#include "timer.hpp"
@@ -46,12 +48,15 @@ sigfunc compat_signal(int signo, sigfunc func)
return oact.sa_handler;
}
+volatile
+bool runflag = true;
+
static
void chld_proc(int)
{
wait(NULL);
}
-static __attribute__((noreturn))
+static
void sig_proc(int)
{
for (int i = 1; i < 31; ++i)
@@ -59,12 +64,9 @@ void sig_proc(int)
#pragma GCC diagnostic ignored "-Wold-style-cast"
compat_signal(i, SIG_IGN);
#pragma GCC diagnostic pop
- term_func();
- _exit(0);
+ runflag = false;
}
-bool runflag = true;
-
/*
Note about fatal signals:
@@ -83,6 +85,12 @@ int main(int argc, char **argv)
for (int i = 0; i < argc; ++i)
args[i] = ZString(strings::really_construct_from_a_pointer, argv[i], nullptr);
do_init(argc, args);
+
+ if (!runflag)
+ {
+ PRINTF("Fatal error during startup; exiting\n");
+ return 1;
+ }
// set up exit handlers *after* the initialization has happened.
// This is because term_func is likely to depend on successful init.