Proc_Fork(PROC_STAT *proc, int *pipefds, void (*cbfunc)(int, short), int timeout)
{
pid_t pid;
+#ifndef HAVE_ARC4RANDOM
unsigned int seed;
+#endif
assert(proc != NULL);
assert(pipefds != NULL);
return -1;
}
+#ifndef HAVE_ARC4RANDOM
seed = (unsigned int)rand();
+#endif
pid = fork();
switch (pid) {
case -1:
return -1;
case 0:
/* New child process: */
+#ifndef HAVE_ARC4RANDOM
srand(seed ^ (unsigned int)time(NULL) ^ getpid());
+#endif
Signals_Exit();
signal(SIGTERM, Proc_GenericSignalHandler);
signal(SIGALRM, Proc_GenericSignalHandler);
close(pipefds[0]);
alarm(timeout);
- Conn_CloseAllSockets();
return 0;
}
GLOBAL void
Proc_Close(PROC_STAT *proc)
{
- io_close(proc->pipe_fd);
+ /* Close socket, if it exists */
+ if (proc->pipe_fd >= 0)
+ io_close(proc->pipe_fd);
+
Proc_InitStruct(proc);
}