if (job->writefn) JobFds[njobs].events |= POLLOUT;
if (JobFds[njobs].events) njobs++;
}
+
/* Poll until a job is ready, call the functions based on events */
long ret = poll(JobFds, njobs, ms);
- telem_send("POLL(njobs: %d, ms: %d, ret: %d)\n", njobs, ms, ret);
- if (ret < 0)
+ if (ret != 0)
{
- perror("poll() failed: ");
- exit(1);
+ telem_send("POLL(njobs: %d, ms: %d, ret: %d)\n", njobs, ms, ret);
}
+
+ /* process all jobs with events reported */
for (int i = 0; i < njobs; i++)
{
job_process(JobFds[i].fd, JobFds[i].revents);
}
+
/* reap zombie processes */
for (int status; waitpid(-1, &status, WNOHANG) > 0;);
return (ret > 0);