signal(SIGALRM, Proc_GenericSignalHandler);
close(pipefds[0]);
alarm(timeout);
- Conn_CloseAllSockets();
return 0;
}
return 0;
Log(LOG_CRIT, "Can't read from child process %ld: %s",
proc->pid, strerror(errno));
+ Proc_Close(proc);
bytes_read = 0;
+ } else if (bytes_read == 0) {
+ /* EOF: clean up */
+ LogDebug("Child process %ld: EOF reached, closing pipe.",
+ proc->pid);
+ Proc_Close(proc);
}
-#if DEBUG
- else if (bytes_read == 0)
- LogDebug("Can't read from child process %ld: EOF", proc->pid);
-#endif
- Proc_InitStruct(proc);
return (size_t)bytes_read;
}
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);
}