X-Git-Url: https://arthur.barton.de/gitweb/?a=blobdiff_plain;f=etc%2Fafpd%2Fmain.c;h=87c07b0eb96b13c79ecc5216118b7248b0e53eeb;hb=e4e8f3a8;hp=ac1ce217b31904593f30b0ce4aa5d57617df323a;hpb=0a4d3f729499937ca9c1ff4f927a940ec556757b;p=netatalk.git diff --git a/etc/afpd/main.c b/etc/afpd/main.c index ac1ce217..87c07b0e 100644 --- a/etc/afpd/main.c +++ b/etc/afpd/main.c @@ -141,11 +141,6 @@ static void child_handler(void) #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)); @@ -157,6 +152,13 @@ static void child_handler(void) 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); } }