X-Git-Url: https://mattmccutchen.net/rsync/rsync.git/blobdiff_plain/c579310a009dc21a0f2b378c711980336f79add6..7a176e87d56de890fed07b1621277ab74b21b706:/util.c diff --git a/util.c b/util.c index c1e04710..245f3b29 100644 --- a/util.c +++ b/util.c @@ -478,27 +478,47 @@ int robust_rename(char *from, char *to) static pid_t all_pids[10]; static int num_pids; -/* fork and record the pid of the child */ +/** Fork and record the pid of the child. **/ pid_t do_fork(void) { pid_t newpid = fork(); - if (newpid) { + if (newpid != 0 && newpid != -1) { all_pids[num_pids++] = newpid; } return newpid; } -/* kill all children */ +/** + * Kill all children. + * + * @todo It would be kind of nice to make sure that they are actually + * all our children before we kill them, because their pids may have + * been recycled by some other process. Perhaps when we wait for a + * child, we should remove it from this array. Alternatively we could + * perhaps use process groups, but I think that would not work on + * ancient Unix versions that don't support them. + **/ void kill_all(int sig) { int i; - for (i=0;i