Fix race condition in clang_macro_fallback by HKalbasi · Pull Request #3111 · rust-lang/rust-bindgen (original) (raw)
Previously, bindgen by default used the same directory of the headers as the directory for temporary files of the clang_macro_fallback
feature. Aside from its other problems like making temporary noises in git or failing to remove these files on failing or aborted builds, this caused a race condition in build of retina that I spend two DAYS to figure it out.
The problem is, if you run bindgen on the same set of files multiple times simultaneously (which happened in retina since a crate was included two times in the crate graph due different features, and it ran bindgen in its build script) one of them can remove clang_macro_fallback
files of the other one and break it.
I fixed it by moving the files generated by clang_macro_fallback
in a new temp directory each time bindgen is invoked.