Hi! Ricardo Wurmus skribis: > The following derivation will be built: > /gnu/store/z5bhk17nxmdhvj0g4cy038p25mzh1gys-guix-latest.drv > copying and compiling to '/gnu/store/s3s7xlqa10mvf8v0ypxz8gzw3lcf1x5z-guix-latest' with Guile 2.2.2... > loading... 25.7% of 635 filesrandom seed for tests: 1506720257 > loading... 99.8% of 635 files > compiling... 69.1% of 635 filesice-9/threads.scm:289:22: In procedure loop: > ice-9/threads.scm:289:22: Syntax error: > guix/scripts/graph.scm:103:10: return: return used outside of 'with-monad' in form (return (package-node-edges a)) The program below crashes with completely surreal backtraces in less than a minute on my 4-thread laptop: --8<---------------cut here---------------start------------->8--- (use-modules (ice-9 threads) (srfi srfi-1) (guix monads) (guix store)) (define threads (unfold (lambda (x) (> x 100)) (lambda (x) (call-with-new-thread (lambda () (define monad (symbol-append 'foo-monad (string->symbol (number->string x)))) (while #t (macroexpand `(begin (define-monad ,monad (bind +) (return -)) (with-monad ,monad (return 3)) (mapm ,monad + '(1 2 3)))))))) 1+ 0)) (for-each join-thread threads) --8<---------------cut here---------------end--------------->8--- Can you check if that also happens on your many-core machine? The patch below seems to fix the problem: (guix monads) has shared state (hash tables) used both at expansion-time and run-time, and it wasn’t protected. My hypothesis is that this was causing random memory corruption. The weird thing, though, is that the errors we were getting were not so random. Also, the load phase of ‘guix pull’ is sequential. Could you test it and report back? Thanks, Ludo’.