Hi, ludo@gnu.org (Ludovic Courtès) skribis: > This comes from the fact that ‘LocalStore::buildPaths’ takes the > user-supplied derivation list as is, without sorting it, and then > acquires locks in that order in ‘Worker::run’. This diagnostic is incorrect: ‘Goals’ is a set sorted according to ‘CompareGoalPtrs’, which is lexical sort that arranges so substitution goals come before derivation goals. Thus, ‘_topGoals’ and ‘awake2’ in Worker::run are sorted in a deterministic fashion. The problem is that ‘Worker::waitForAWhile’ reshuffles the order of goals by temporarily moving goals out of the way. This can happen when offloading replies “postpone”, which is inherently non-deterministic (which goals are put to sleep will vary from one session to another session.) When those goals are eventually woken up from ‘Worker::waitForInput’, they’re reprocessed, in sorted order, but potentially with “holes” compared to other ‘guix-daemon’ processes. That’s only a partial explanation; we need to go further to come up with an actual deadlock scenario. Ludo’.