Uh oh!
There was an error while loading.Please reload this page.
- Notifications
You must be signed in to change notification settings - Fork33.3k
Description
Bug report
setup.py has a helper methodadd_multiarch_paths. The method creates a temporary filebuild/lib.{platform}/multiarch and unlinks it at the end of the function call. This is not parallel-safe.
PGO builds of Python use$(MAKE), so calledrecursive make.Recursive makes are considered harmful because the main make process has no understanding what the child make process is doing. With heavy parallel makes this can cause race conditions.
The combination of unsafeadd_multiarch_paths(), recursive make and loooots of CPU cores can lead to build issues like#84461 (comment).
Possible workarounds
- Rewrite our Makefile to not use
$(MAKE) - Move
CC -print-multiarchanddpkg-architecture ... -qDEB_HOST_MULTIARCHcalls toconfigure.ac - Fix
_bootsubprocess.check_output()andadd_multiarch_paths()to use a more safe tmp file
Option (3) is the simplest approach. Eventmpfile = os.path.join(self.build_temp, f'multiarch-{os.getpid()}') would be good enough to avoid file conflicts in parallel builds.