X-Git-Url: https://git.jankratochvil.net/?p=middleman.git;a=blobdiff_plain;f=src%2Fmain.c;fp=src%2Fmain.c;h=d8706286bed213113fcc9477478f024eb8df1ea0;hp=f188421f52641a9c67caf88b3689d454ae230589;hb=466328df4b09c9af6adfe8151f38dc455acadb1c;hpb=957d29c5ad17a7649f9829fccff049b422ab97e9 diff --git a/src/main.c b/src/main.c index f188421..d870628 100644 --- a/src/main.c +++ b/src/main.c @@ -27,6 +27,7 @@ #include #include #include +#include #include "proto.h" #ifdef USE_SYSLOG @@ -512,6 +513,11 @@ void mainloop() } } +static void sigchld(int signo) +{ + while (waitpid(-1,NULL,WNOHANG)>0); +} + /* create new thread */ @@ -548,7 +554,12 @@ int process_new(CONNECTION * connection) if (getuid() == 0) pthread_attr_setschedpolicy(&thread_attr, SCHED_FIFO); - perr = pthread_create(&thread_id, &thread_attr, (void *) process_entry, (void *) connection); + signal(SIGCHLD,sigchld); + if (0==(perr=fork())) { + process_entry(connection); + _exit(0); + } + perr=close(connection->client->fd) pthread_attr_destroy(&thread_attr);