[Bug libstdc++/106162] libstdc++v3: bits/largefile-config.h.tmp: No such file or directory race condition

redi at gcc dot gnu.org gcc-bugzilla@gcc.gnu.org
Fri Jul 1 20:49:26 GMT 2022


https://gcc.gnu.org/bugzilla/show_bug.cgi?id=106162

--- Comment #2 from Jonathan Wakely <redi at gcc dot gnu.org> ---
(In reply to Sergei Trofimovich from comment #0)
> There is a race condition when (I speculate) libstdcv++v3 is built in
> parallel from different 'make' processes. Perhaps for c++98 | c++11 | x++17
> instances?

There are no such instances. It is built separately for each multilib, but each
of those has its own $host_builddir

> 
> From libstdc++-v3/include/Makefile.am:
> 
>   # This header is not installed, it's only used to build libstdc++ itself.
>   ${host_builddir}/largefile-config.h: ${CONFIG_HEADER}
>         @rm -f $@.tmp
>         @-grep 'define _DARWIN_USE_64_BIT_INODE' ${CONFIG_HEADER} >> $@.tmp
>         @-grep 'define _FILE_OFFSET_BITS' ${CONFIG_HEADER} >> $@.tmp
>         @-grep 'define _LARGE_FILES' ${CONFIG_HEADER} >> $@.tmp
>         @mv $@.tmp $@
> 
> As a result 'bits/largefile-config.h' rule gets executed in parallel and

I don't see how that's possible. It's a prerequisite of c++config.h which is
built once per multilib, and parallel make processes will coordinate to only
build the prereq once.

Are you 100% sure you didn't actually run multiple make processes yourself, e.g
by using & instead of && in a shell command?


More information about the Gcc-bugs mailing list