[Gtkradiant] parallell cons, attempt #2
Timothee Besset
gtkradiant@zerowing.idsoftware.com
Thu, 16 May 2002 11:14:07 +0200
I already posted here in February about this:
http://mail.gnu.org/pipermail/cons-discuss/2002-February/001736.html
I'm back at it now, with more information and a real will to see this
fixed. See http://zerowing.idsoftware.com/pcons/ for a summary.
I wrote a test case, and a verbosive version of pcons 2.3.1:
http://zerowing.idsoftware.com/pcons/testcase.tar.gz
http://zerowing.idsoftware.com/pcons/pcons-2.3.1-verbose
Here's what happens:
timo@antares:~/Id/cons/pcons/test$ ../pcons-2.3.1-verbose -j4
pcons max jobs set to: 4
./gcc-slow.sh -c func.c -o func.o
wait_on_all_children
Waiting to build (1): func.o
waited: func.o on: 3369parent
./gcc-slow.sh -c main.c -o main.o
wait_on_all_children
Waiting to build (1): main.o
waited: main.o on: parent3375
./gcc-slow.sh -o test main.o func.o
wait_on_all_children
Waiting to build (1): test
waited: test on: parent3381
Basically the wait_on_all_children in _pbuild (line 3962) is called
systematically, and blocks any parallelizing possibility. It looks like
this code block is problematic:
my $sig;
{
# print "in ", $self->path, "\n";
local ($file::child_queue) = {parent => $self};
for my $dep (@$rdeps)
{
if ((pbuild $dep) eq 'errors')
{
# Propagate dependent errors to target.
# but try to build all dependents regardless of errors.
$self->{status} = 'errors';
}
}
wait_on_all_children();
}
My limited perl knowledge doesn't really allow me to investigate further
though.
There .. I hope I'll get answers this time .. I'm even willing to fund
(reasonably) cons maintenance if we can have a reliable 2.3.1 final
release at some point.
TTimo