浏览代码

Merge pull request #7774 from hpvb/master

Add a simple signal handler for SIGCHLD on Unix
Rémi Verschelde 8 年之前
父节点
当前提交
00b093d24d
共有 1 个文件被更改,包括 15 次插入1 次删除
  1. 15 1
      drivers/unix/os_unix.cpp

+ 15 - 1
drivers/unix/os_unix.cpp

@@ -117,7 +117,13 @@ int OS_Unix::unix_initialize_audio(int p_audio_driver) {
 	return 0;
 }
 	
-	
+// Very simple signal handler to reap processes where ::execute was called with
+// !p_blocking
+void handle_sigchld(int sig) {
+	int saved_errno = errno;
+	while (waitpid((pid_t)(-1), 0, WNOHANG) > 0) {}
+	errno = saved_errno;
+}
 	
 void OS_Unix::initialize_core() {
 
@@ -148,6 +154,14 @@ void OS_Unix::initialize_core() {
 
 	ticks_start=0;
 	ticks_start=get_ticks_usec();
+
+	struct sigaction sa;
+	sa.sa_handler = &handle_sigchld;
+	sigemptyset(&sa.sa_mask);
+	sa.sa_flags = SA_RESTART | SA_NOCLDSTOP;
+	if (sigaction(SIGCHLD, &sa, 0) == -1) {
+		perror("ERROR sigaction() failed:");
+	}
 }
 
 void OS_Unix::finalize_core() {