-
Notifications
You must be signed in to change notification settings - Fork 736
New issue
Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.
By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.
Already on GitHub? Sign in to your account
Fix race condition in clang_macro_fallback #3111
base: main
Are you sure you want to change the base?
Conversation
fabe930
to
b002407
Compare
Cc @jbaublitz since he is probably interested. |
I will do the rebase after your PR is merged so I don't have to rebase it multiple times in case your PR needs further changes, and to keep the diff clean if you or anyone else want to review it in the meantime. |
@HKalbasi Okay, it looks like the PR got merged. |
b002407
to
24a0f20
Compare
24a0f20
to
6927cf5
Compare
@jbaublitz What is your opinion on this PR? |
@HKalbasi I'm not the maintainer so I'm not whether they're expecting concurrent builds or not. I'd assume they'd probably want to support that use case but you'd have to ask one of the maintainers. As for my thoughts on this PR, I think this is one way to solve this problem and I'm not entirely against it but I noticed in your original statement of the issue that you mentioned that it makes temporary noise in git. This is the rationale for |
The main problem this PR addresses is that if you run two instance of bindgen on the same set of files (which is easy with build scripts) you will get a hard to debug race condition on build with the default settings, and also with constant |
@ojeda What do you think here? Is relying on I can think of a few additional options we could also explore. For one, we could create a new randomized alphanumeric subdirectory under |
In general, I would say not allowing to configure the folder for temporaries is not a good idea. In the kernel, we create some temporary directories inside the build folder (which is configurable) rather than So I would say allowing users to override the See: https://gcc.gnu.org/onlinedocs/gcc/Environment-Variables.html#index-TMPDIR |
Is |
If |
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.