summary refs log tree commit diff
diff options
context:
space:
mode:
authorLudovic Courtès <ludo@gnu.org>2017-11-17 10:47:56 +0100
committerLudovic Courtès <ludo@gnu.org>2017-11-17 10:47:56 +0100
commitd5ce7bcfa2f4d9a1d3da669ade155cc7042f84ec (patch)
tree6cb280502aef5222f3f4ae6e33773b1127771f09
parent19fd7229bc668e5b34adc5357557aff3f62b9308 (diff)
downloadguix-d5ce7bcfa2f4d9a1d3da669ade155cc7042f84ec.tar.gz
workers: Display backtrace in pre-unwind handler.
* guix/workers.scm (worker-thunk): Add (const #f) as the 'catch'
handler, and move previous handler as pre-unwind handler.  Protect
against 'make-stack' returning #f.
-rw-r--r--guix/workers.scm4
1 files changed, 3 insertions, 1 deletions
diff --git a/guix/workers.scm b/guix/workers.scm
index 0f6f54bab0..3cd683c96d 100644
--- a/guix/workers.scm
+++ b/guix/workers.scm
@@ -75,12 +75,14 @@
        ;; Release MUTEX while executing PROC.
        (without-mutex mutex
          (catch #t proc
+           (const #f)
            (lambda (key . args)
              ;; XXX: In Guile 2.0 ports are not thread-safe, so this could
              ;; crash (Guile 2.2 is fine).
              (display-backtrace (make-stack #t) (current-error-port))
              (print-exception (current-error-port)
-                              (stack-ref (make-stack #t) 0)
+                              (and=> (make-stack #t)
+                                     (cut stack-ref <> 0))
                               key args))))))
     (loop))