Gentoo Archives: gentoo-dev

From: Zac Medico <zmedico@g.o>
To: gentoo-dev@l.g.o
Cc: Mike Frysinger <vapier@g.o>
Subject: Re: [gentoo-dev] multiprocessing.eclass: doing parallel work in bash
Date: Sun, 03 Jun 2012 22:22:35
Message-Id: 4FCBE360.7030104@gentoo.org
In Reply to: Re: [gentoo-dev] multiprocessing.eclass: doing parallel work in bash by Mike Frysinger
(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