Add a simple signal handler for SIGCHLD on Unix
This fixes #6631
(cherry picked from commit cff6840ff7
)
This commit is contained in:
parent
9f536e3962
commit
c67b08300a
@ -115,6 +115,13 @@ int OS_Unix::unix_initialize_audio(int p_audio_driver) {
|
|||||||
static MemoryPoolStaticMalloc *mempool_static=NULL;
|
static MemoryPoolStaticMalloc *mempool_static=NULL;
|
||||||
static MemoryPoolDynamicStatic *mempool_dynamic=NULL;
|
static MemoryPoolDynamicStatic *mempool_dynamic=NULL;
|
||||||
|
|
||||||
|
// 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() {
|
||||||
|
|
||||||
@ -146,6 +153,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() {
|
||||||
|
Loading…
Reference in New Issue
Block a user