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.