diff -ru cmake-2.6.4.orig/Source/kwsys/ProcessUNIX.c cmake-2.6.4/Source/kwsys/ProcessUNIX.c --- cmake-2.6.4.orig/Source/kwsys/ProcessUNIX.c 2010-02-18 08:47:44 +0100 +++ cmake-2.6.4/Source/kwsys/ProcessUNIX.c 2010-02-18 09:19:25 +0100 @@ -2444,6 +2444,9 @@ /* The old SIGCHLD handler. */ static struct sigaction kwsysProcessesOldSigChldAction; +#ifdef __INTERIX +static struct sigaction kwsysProcessesOldSigAlrmAction; +#endif /*--------------------------------------------------------------------------*/ static void kwsysProcessesUpdate(kwsysProcessInstances* newProcesses) @@ -2561,6 +2564,14 @@ while((sigaction(SIGCHLD, &newSigChldAction, &kwsysProcessesOldSigChldAction) < 0) && (errno == EINTR)); + +#ifdef __INTERIX + while((sigaction(SIGALRM, &newSigChldAction, + &kwsysProcessesOldSigAlrmAction) < 0) && + (errno == EINTR)); + + alarm(1); +#endif } } @@ -2599,6 +2610,13 @@ while((sigaction(SIGCHLD, &kwsysProcessesOldSigChldAction, 0) < 0) && (errno == EINTR)); +#ifdef __INTERIX + alarm(0); + + while((sigaction(SIGALRM, &kwsysProcessesOldSigAlrmAction, 0) < 0) && + (errno == EINTR)); +#endif + /* Free the table of process pointers since it is now empty. This is safe because the signal handler has been removed. */ newProcesses.Size = 0; @@ -2653,6 +2671,11 @@ while((sigaction(SIGCHLD, &newSigChldAction, &kwsysProcessesOldSigChldAction) < 0) && (errno == EINTR)); +#ifdef __INTERIX + while((sigaction(SIGALRM, &newSigChldAction, + &kwsysProcessesOldSigAlrmAction) < 0) && + (errno == EINTR)); +#endif } #endif }