Number: 1471
Title: Parallel build causes error "librbtree_C.a: Resource temporarily unavailable"
Submitter: Ryan Schmidt
Date: Fri Oct 10 01:57:56 2008
Subsys: Build/Installation
Version: 2.21.20081009.1842
System: x86-OSX-10.4.11
Severity: minor
Problem:
Building in parallel using "make -j 2" causes an error while making inkpot:


Making all in inkpot
/mp/bin/tclsh8.5 inkpot_lib_tk.tcl data/xcolors.c
/mp/bin/tclsh8.5 inkpot_lib_svg.tcl data/types.html
/mp/bin/tclsh8.5 inkpot_lib_x11.tcl data/rgb.txt
/mp/bin/tclsh8.5 inkpot_lib_brewer.tcl data/brewer_colors
/bin/sh ../../libtool --tag=CC   --mode=compile /usr/bin/gcc-4.0 -DHAVE_CONFIG_H -I. -I../..   -I/mp/include -I/mp/include  -O2 -fno-common -Wall -DNDEBUG -MT inkpot_xlate.lo -MD -MP -MF .deps/inkpot_xlate.Tpo -c -o inkpot_xlate.lo inkpot_xlate.c

"oranges j" is not unique and rgb doesn't match: 217 72 1 != 217 71 1 In record: ,,,,6,j,217,72,1, Retaining first value found, discarding second.

mkdir .libs /usr/bin/gcc-4.0 -DHAVE_CONFIG_H -I. -I../.. -I/mp/include -I/mp/include -O2 -fno-common -Wall -DNDEBUG -MT inkpot_xlate.lo -MD -MP -MF .deps/inkpot_xlate.Tpo -c inkpot_xlate.c -fno-common -DPIC -o .libs/inkpot_xlate.o /usr/bin/gcc-4.0 -DHAVE_CONFIG_H -I. -I../.. -I/mp/include -I/mp/include -O2 -fno-common -Wall -DNDEBUG -MT inkpot.o -MD -MP -MF .deps/inkpot.Tpo -c -o inkpot.o inkpot.c mv -f .deps/inkpot_xlate.Tpo .deps/inkpot_xlate.Plo /mp/bin/tclsh8.5 inkpot_lib.tcl ./inkpot_lib_tk.dat ./inkpot_lib_svg.dat ./inkpot_lib_x11.dat ./inkpot_lib_brewer.dat mv -f .deps/inkpot.Tpo .deps/inkpot.Po /bin/sh ../../libtool --tag=CC --mode=compile /usr/bin/gcc-4.0 -DHAVE_CONFIG_H -I. -I../.. -I/mp/include -I/mp/include -O2 -fno-common -Wall -DNDEBUG -MT inkpot_scheme.lo -MD -MP -MF .deps/inkpot_scheme.Tpo -c -o inkpot_scheme.lo inkpot_scheme.c /bin/sh ../../libtool --tag=CC --mode=compile /usr/bin/gcc-4.0 -DHAVE_CONFIG_H -I. -I../.. -I/mp/include -I/mp/include -O2 -fno-common -Wall -DNDEBUG -MT inkpot_value.lo -MD -MP -MF .deps/inkpot_value.Tpo -c -o inkpot_value.lo inkpot_value.c /usr/bin/gcc-4.0 -DHAVE_CONFIG_H -I. -I../.. -I/mp/include -I/mp/include -O2 -fno-common -Wall -DNDEBUG -MT inkpot_scheme.lo -MD -MP -MF .deps/inkpot_scheme.Tpo -c inkpot_scheme.c -fno-common -DPIC -o .libs/inkpot_scheme.o /usr/bin/gcc-4.0 -DHAVE_CONFIG_H -I. -I../.. -I/mp/include -I/mp/include -O2 -fno-common -Wall -DNDEBUG -MT inkpot_value.lo -MD -MP -MF .deps/inkpot_value.Tpo -c inkpot_value.c -fno-common -DPIC -o .libs/inkpot_value.o mv -f .deps/inkpot_value.Tpo .deps/inkpot_value.Plo mv -f .deps/inkpot_scheme.Tpo .deps/inkpot_scheme.Plo /bin/sh ../../libtool --tag=CC --mode=link /usr/bin/gcc-4.0 -O2 -fno-common -Wall -DNDEBUG -version-info 4:0:0 -no-undefined -L/mp/lib -L/mp/lib -o libinkpot.la -rpath /mp/lib inkpot_scheme.lo inkpot_value.lo inkpot_xlate.lo ../../lib/rbtree/librbtree_C.la /bin/sh ../../libtool --tag=CC --mode=link /usr/bin/gcc-4.0 -O2 -fno-common -Wall -DNDEBUG -L/mp/lib -L/mp/lib -o libinkpot_C.la inkpot_scheme.lo inkpot_value.lo inkpot_xlate.lo ../../lib/rbtree/librbtree_C.la rm -fr .libs/libinkpot_C.lax mkdir .libs/libinkpot_C.lax rm -fr .libs/libinkpot.lax mkdir .libs/libinkpot.lax rm -fr .libs/libinkpot_C.lax/librbtree_C.a rm -fr .libs/libinkpot.lax/librbtree_C.a mkdir .libs/libinkpot_C.lax/librbtree_C.a mkdir .libs/libinkpot.lax/librbtree_C.a Extracting /mp/var/macports/build/_Users_rschmidt_macports_dports_graphics_graphviz-devel/work/graphviz-2.21.20081009.1842/lib/inkpot/../../lib/rbtree/.libs/librbtree_C.a Extracting /mp/var/macports/build/_Users_rschmidt_macports_dports_graphics_graphviz-devel/work/graphviz-2.21.20081009.1842/lib/inkpot/../../lib/rbtree/.libs/librbtree_C.a (cd .libs/libinkpot_C.lax/librbtree_C.a && ar x /mp/var/macports/build/_Users_rschmidt_macports_dports_graphics_graphviz-devel/work/graphviz-2.21.20081009.1842/lib/inkpot/../../lib/rbtree/.libs/librbtree_C.a) (cd .libs/libinkpot.lax/librbtree_C.a && ar x /mp/var/macports/build/_Users_rschmidt_macports_dports_graphics_graphviz-devel/work/graphviz-2.21.20081009.1842/lib/inkpot/../../lib/rbtree/.libs/librbtree_C.a) ar: /mp/var/macports/build/_Users_rschmidt_macports_dports_graphics_graphviz-devel/work/graphviz-2.21.20081009.1842/lib/inkpot/../../lib/rbtree/.libs/librbtree_C.a: Resource temporarily unavailable make[3]: *** [libinkpot_C.la] Error 1 make[3]: *** Waiting for unfinished jobs.... [snip]

At this point you can repeat the "make -j 2" command and it completes the build.
Comments:
[ellson] > "oranges j" is not unique and rgb doesn't match: 217 72 1 != 217 71 1 > In record: ,,,,6,j,217,72,1, > Retaining first value found, discarding second.

This is a bug in the brewer color data, as far as I can tell. Anyway, its not related to the problem with "make -j2"

I think what is happening is that the inkpot make is running ahead of the rbrtee make. I've made a couple of changes to prevent this, I hope. We'll see with the next snapshot build.

[north] This inkpot feature could have been phased in more carefully.

However, in general make -j tends to fail on a high performance machine (e.g. 4 CPU Mac Pro).

[ellson] Its strange because I don't get these failures on other multi-core machines with make -j. Perhaps Macs are just that much faster.

There are other cross-library dependencies in the code that have the potential for the same problem. I'm not convinced that the automake DEPENDENCIES feature that I just tried actually works, unless the dependency is in a subdirectory.

I also rearranged the build order such that this specific problem should have gone away in the nightly builds but I still need a more rigorous solution...

Note that this problem only affects package builders, not users of binary packages. If "make -j" doesn't work for package builds, then the immediate solution is to not use it. It not like its important when running a build from a cron job in the middle of the night.
Owner: *
Status: *