0a5f474a25c46d9e02031893263c693920177f23
Closes #1064 The culprit here is that `genGraphString` is only invoked with the store-paths associated with the outputs of the derivation, so when filling `dependents`, the `graph_data.find(p)` call would return the end of the iterator when doing this for references to other store-paths. As a result, the code wrote information behind the graph data-structure causing a corruption. For me, this resulted in a SIGSEGV most of the time and in a few cases in an uncaught `map::at`-exception as reported by Niklas. This patch changes two aspects of the original implementation: * When filling `dependents` in the node-set, use `map.at()` instead of `map.find()->second`. The latter doesn't make any sense and was the cause of corrupting memory. The `at` would've made it far easier to spot this in the first place. * Filter out store-paths that don't belong to a different output of the derivation when creating `outputGraph`. This variable is used on two places, `genGraphString` and for topological sorting. The latter already filters out store-paths from a different drv, so this is happening now when creating the variable in the first place such that `genGraphString` never ends up with corrupt data in the first place. This is the actual bugfix. Implemented a regression-test for this case to be sure. Change-Id: Ie02144d89c32b0a776cb1ece0601d0229315ebc3
Lix
Lix is an implementation of Nix, a powerful package management system for Linux and other Unix systems that makes package management reliable and reproducible.
Read more about us at https://lix.systems.
Installation
On Linux and macOS the easiest way to install Lix is to run the following shell command (as a user other than root):
$ curl -sSf -L https://install.lix.systems/lix | sh -s -- install
For systems that already have a Nix implementation installed, such as NixOS systems, read our install page
Building And Developing
See our Hacking guide in our manual for instruction on how to set up a development environment and build Lix from source.
Additional Resources
- The Lix reference manual:
- Our wiki
- Matrix - #space:lix.systems
License
Lix is released under LGPL-2.1-or-later.
Description
Working fork of Lix - carries the adaptive load-aware build-remote patch. Upstream: gerrit.lix.systems
92 MiB
Languages
C++
74.9%
Python
11.7%
Nix
6.1%
Shell
3.6%
Meson
2%
Other
1.6%