#endif /* ! WAIT_ANY */
while ((pid = waitpid(WAIT_ANY, &status, WNOHANG)) > 0) {
- if ((fd = server_child_remove(server_children, pid)) != -1) {
- fdset_del_fd(&fdset, &polldata, &fdset_used, &fdset_size, fd);
- break;
- }
-
if (WIFEXITED(status)) {
if (WEXITSTATUS(status))
LOG(log_info, logtype_afpd, "child[%d]: exited %d", pid, WEXITSTATUS(status));
else
LOG(log_info, logtype_afpd, "child[%d]: died", pid);
}
+
+ fd = server_child_remove(server_children, pid);
+ if (fd == -1) {
+ LOG(log_error, logtype_afpd, "child[%d]: bad IPC fd", pid);
+ continue;
+ }
+ fdset_del_fd(&fdset, &polldata, &fdset_used, &fdset_size, fd);
}
}