Daniele Bartolini 11 месяцев назад
Родитель
Сommit
cbac35f1dc
1 измененных файлов с 9 добавлено и 3 удалено
  1. 9 3
      src/core/error/callstack_linux.cpp

+ 9 - 3
src/core/error/callstack_linux.cpp

@@ -53,11 +53,11 @@ namespace error
 		return "<addr2line missing>";
 	}
 
-	static void demangler_main()
+	static int demangler_main()
 	{
 		FILE *fp = fdopen(symbol_fds[0], "r");
 		if (fp == NULL)
-			return;
+			return EXIT_FAILURE;
 
 		while (true) {
 			fd_set fdset;
@@ -121,6 +121,7 @@ namespace error
 		}
 
 		fclose(fp);
+		return EXIT_SUCCESS;
 	}
 
 	void callstack_shutdown()
@@ -156,10 +157,15 @@ namespace error
 			close(exit_fds[1]);
 			return -1;
 		} else if (demangler == 0) {
+			// Block all signals.
+			sigset_t set;
+			sigfillset(&set);
+			sigprocmask(SIG_BLOCK, &set, NULL);
+
 			close(symbol_fds[1]);
 			close(demangled_fds[0]);
 			close(exit_fds[1]);
-			demangler_main();
+			exit(demangler_main());
 		} else {
 			ret = 0;
 		}