Skip to content

Fix #16450 atomic renames

Tamar Christina requested to merge Phyx/ghc:fix-gh-16450-atomic-renames into master

GHC Should make calls using process jobs when calling out to GCC and LD.

The reason is these use the exec () family of posix functions. Window's process model doesn't allow replacement of processes so this is emulated by creating a new process and immediately exiting the old one.

Because of this when using normal Windows wait functions you would return even without the child process having finished. In this case if you are depending on data from the child you will enter a race condition.

The usual fix for this is to use process jobs and wait for the termination of all children that have ever been spawn by the process you called. But also waiting for the freeing of all resources.

This fixes #16450 and I believe should fix #17691 (closed).

Merge request reports