(re-send without enigmail screwing up the code formatting)
On 06/02/2012 10:08 PM, Mike Frysinger wrote:
> # @FUNCTION: _multijob_fork
> # @INTERNAL
> # @DESCRIPTION:
> # Do the actual book keeping.
> _multijob_fork() {
> [[ $# -eq 1 ]] || die "incorrect number of arguments"
>
> local ret=0
> [[ $1 == "pre" ]] && : $(( ++mj_num_jobs ))
> if [[ ${mj_num_jobs} -ge ${mj_max_jobs} ]] ; then
> multijob_finish_one
> ret=$?
> fi
> [[ $1 == "post" ]] && : $(( ++mj_num_jobs ))
> return ${ret}
> }
The "pre" logic seems wrong. Consider an initial state of
mj_num_jobs=0 and mj_max_jobs=1. It will increment mj_num_jobs to 1,
so [[ 1 -ge 1 ]] is true, and then call multijob_finish_one even
though no jobs have started yet? Wouldn't that deadlock
multijob_finish_one, as it waits for a reply from a job that doesn't
exist yet?
--
Thanks,
Zac