[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]
bug#31785: Multiple client 'build-paths' RPCs can lead to daemon deadloc
From: |
Ludovic Courtès |
Subject: |
bug#31785: Multiple client 'build-paths' RPCs can lead to daemon deadlock |
Date: |
Wed, 04 Nov 2020 16:21:39 +0100 |
User-agent: |
Gnus/5.13 (Gnus v5.13) Emacs/27.1 (gnu/linux) |
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’.
[Prev in Thread] |
Current Thread |
[Next in Thread] |
- bug#31785: Multiple client 'build-paths' RPCs can lead to daemon deadlock,
Ludovic Courtès <=