[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