On Tuesday 07 October 2008 02:54:55 Moritz Lenz wrote:

> I've just updated from r31667 to HEAD (r31745), and ran my usual build
> incantation:
>
> $ make realclean; perl Configure --cc='ccache gcc' && make -j 2 test
>
> This time it died:
>
> find_sub_not_null_p_s     1391       experimental, not in ops.num
> find_sub_not_null_p_sc    1392       experimental, not in ops.num
> tools/build/ops2pm.pl: Could not mkdir
> /home/moritz/src/parrot/lib/Parrot/OpLib: File exists!
> make: *** [include/parrot/oplib/ops.h] Error 17
> make: *** Waiting for unfinished jobs....
>
> Running 'make realclean' again solved the problem, but I think this
> should never be necessary.

That's an odd occurrence.  Parrot::Ops2pm::Utils::new has:

    if ( !$flagref->{dynamic} && !-d $incdir ) {
        mkdir( $incdir, 0755 )
            or die "ops2c.pl: Could not mkdir $incdir $!!\n";
    }

There's a race condition, if that directory doesn't exist and multiple 
processes execute that code simultaneously.  Fortunately, 
Parrot::Ops2pm::print_module() creates that directly when it writes 
Parrot::OpLib::core -- the only file in that directory.

Fixed in r32016.

-- c

Reply via email to