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
1 (re-send without enigmail screwing up the code formatting)
2
3 On 06/02/2012 10:08 PM, Mike Frysinger wrote:
4 > # @FUNCTION: _multijob_fork
5 > # @INTERNAL
6 > # @DESCRIPTION:
7 > # Do the actual book keeping.
8 > _multijob_fork() {
9 > [[ $# -eq 1 ]] || die "incorrect number of arguments"
10 >
11 > local ret=0
12 > [[ $1 == "pre" ]] && : $(( ++mj_num_jobs ))
13 > if [[ ${mj_num_jobs} -ge ${mj_max_jobs} ]] ; then
14 > multijob_finish_one
15 > ret=$?
16 > fi
17 > [[ $1 == "post" ]] && : $(( ++mj_num_jobs ))
18 > return ${ret}
19 > }
20
21 The "pre" logic seems wrong. Consider an initial state of
22 mj_num_jobs=0 and mj_max_jobs=1. It will increment mj_num_jobs to 1,
23 so [[ 1 -ge 1 ]] is true, and then call multijob_finish_one even
24 though no jobs have started yet? Wouldn't that deadlock
25 multijob_finish_one, as it waits for a reply from a job that doesn't
26 exist yet?
27 --
28 Thanks,
29 Zac