2
0
Эх сурвалжийг харах

device: linux: abort() on error

Daniele Bartolini 1 жил өмнө
parent
commit
1e630e8caf

+ 20 - 8
src/device/main_linux.cpp

@@ -1037,8 +1037,6 @@ int main(int argc, char **argv)
 {
 	using namespace crown;
 
-	struct sigaction old_SIGINT;
-	struct sigaction old_SIGTERM;
 	struct sigaction act;
 	// code-format off
 	act.sa_handler = [](int signum) {
@@ -1050,17 +1048,35 @@ int main(int argc, char **argv)
 					device()->quit();
 				break;
 
+			case SIGABRT:
+			case SIGBUS:
+			case SIGFPE:
+			case SIGILL:
+			case SIGPIPE:
+			case SIGSEGV:
+			case SIGSYS:
+				// FIXME: only use signal-safe functions.
+				error::abort("Signal %d\n", signum);
+				break;
+
 			default:
+				// FIXME: only use signal-safe functions.
+				error::abort("Unhandled signal %d\n", signum);
 				break;
 			}
 		};
 	// code-format on
 	sigemptyset(&act.sa_mask);
 	act.sa_flags = 0;
-	sigaction(SIGINT, NULL, &old_SIGINT);
 	sigaction(SIGINT, &act, NULL);
-	sigaction(SIGTERM, NULL, &old_SIGTERM);
 	sigaction(SIGTERM, &act, NULL);
+	sigaction(SIGABRT, &act, NULL);
+	sigaction(SIGBUS, &act, NULL);
+	sigaction(SIGFPE, &act, NULL);
+	sigaction(SIGILL, &act, NULL);
+	sigaction(SIGPIPE, &act, NULL);
+	sigaction(SIGSEGV, &act, NULL);
+	sigaction(SIGSYS, &act, NULL);
 
 #if CROWN_BUILD_UNIT_TESTS
 	CommandLine cl(argc, (const char **)argv);
@@ -1093,10 +1109,6 @@ int main(int argc, char **argv)
 		CE_DELETE(default_allocator(), s_linux_device);
 	}
 
-	// Restore original signal handlers.
-	sigaction(SIGINT, &old_SIGINT, NULL);
-	sigaction(SIGTERM, &old_SIGTERM, NULL);
-
 	return ec;
 }