Hello! I just stumbled upon this bug (here I use Guix to feed Texinfo strings but I suppose we could reduce the test case to be Guix-less.)
Test case:
(use-modules (guix) (gnu) (texinfo) (ice-9 threads)) (define sequential? (getenv "SEQUENTIAL")) (define (for-each/maybe-parallel proc lst) (if (pk 'sequential? sequential?) (for-each proc lst) (n-par-for-each 10 proc lst))) (for-each/maybe-parallel (lambda (package) (and=> (package-description package) (lambda (str) (catch 'parser-error (lambda () (texi-fragment->stexi str)) (lambda args (pk 'bah! args) (error "failed")))))) (fold-packages cons '()))
This code crashes when using ‘n-par-for-each’ but passes when run sequentially: --8<---------------cut here---------------start------------->8--- $ guix time-machine --commit=9cda21cf20a5c9bdf97e3a6d6c8f901fc3e4307d -- repl -- bug-texi-parser-parallel.scm ;;; (sequential? #f) ;;; (bah! (parser-error #f "Unknown command" codeand)) In thread: failed ;;; (bah! (parser-error #f "Unknown command" endm)) In thread: failed ;;; (bah! (parser-error #f "Unknown command" cod)) In thread: failed ;;; (bah! (parser-error #f "Unknown command" comm)) In thread: failed ;;; (bah! (parser-error #f "Unknown command" enum)) In thread: failed ;;; (bah! (parser-error #f "Unknown command" cod)) In thread: failed ;;; (bah! (parser-error #f "Unknown command" enem)) In thread: failed ;;; (bah! (parser-error #f "Unknown command" endmand)) In thread: failed ;;;;; (bah! (parser-error #f "Unknown command" eomm)) In thread: failed $ SEQUENTIAL=y guix time-machine --commit=9cda21cf20a5c9bdf97e3a6d6c8f901fc3e4307d -- repl -- bug-texi-parser-parallel.scm ;;; (sequential? "y") $ guix repl -- <(echo '(pk (version))') ;;; ("3.0.7") --8<---------------cut here---------------end--------------->8--- The bits shown in the ‘parser-error’ arguments suggests memory corruption. Ludo’.