This way, the crates can be published without interfering with
potential future non-bindings `nix-` crates, if Nix proper wants to
have native rust code, for instance.
This builds on the previous commit to make it compatible with the
currently locked build configuration.
(cherry picked from commit bd1edec2fa5251263c768c3e2b312eb4f21d2bb4)
Fixes#106
The Nix settings system uses global mutable state without internal
synchronization. When multiple threads call settings::set concurrently
(as happens in parallel test execution), this causes a segfault in the
C++ std::set implementation.
Changes:
- Add mutex to serialize access through the Rust API
- Add documentation explaining thread safety limitations
- Add Once guard in nix-flake tests to minimize concurrent access
The mutex provides protection between Rust callers, though it cannot
completely prevent C++ Nix code from modifying settings concurrently.
(cherry picked from commit 203917657b60c4e1dcbaf442bec64c37c634abc4)