mirror of
https://github.com/NixOS/nix.git
synced 2025-12-24 09:50:55 +01:00
This fixes a bug I encountered where `nix-store -qR` will deadlock when the `--include-outputs` flag is passed and `max-connections=1`. The deadlock occurs because `RemoteStore::queryDerivationOutputs` takes the only connection from the connection pool and uses it to check the daemon version. If the version is new enough, it calls `Store::queryDerivationOutputs`, which eventually calls `RemoteStore::queryPartialDerivationOutputMap`, where we take another connection from the connection pool to check the version again. Because we still haven't released the connection from the caller, this waits for a connection to be available, causing a deadlock. This diff solves the issue by using `getProtocol` to check the protocol version in the caller `RemoteStore::queryDerivationOutputs`, which immediately frees the connection back to the pool before returning the protocol version. That way we've already freed the connection by the time we call `RemoteStore::queryPartialDerivationOutputMap`. |
||
|---|---|---|
| .. | ||
| build-remote | ||
| cpptoml | ||
| libexpr | ||
| libfetchers | ||
| libmain | ||
| libstore | ||
| libutil | ||
| nix | ||
| nix-build | ||
| nix-channel | ||
| nix-collect-garbage | ||
| nix-copy-closure | ||
| nix-daemon | ||
| nix-env | ||
| nix-instantiate | ||
| nix-prefetch-url | ||
| nix-store | ||
| resolve-system-dependencies | ||