|
@@ -117,7 +117,13 @@ int OS_Unix::unix_initialize_audio(int p_audio_driver) {
|
|
return 0;
|
|
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() {
|
|
void OS_Unix::initialize_core() {
|
|
|
|
|
|
@@ -148,6 +154,14 @@ void OS_Unix::initialize_core() {
|
|
|
|
|
|
ticks_start=0;
|
|
ticks_start=0;
|
|
ticks_start=get_ticks_usec();
|
|
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() {
|
|
void OS_Unix::finalize_core() {
|