From ef03d8dc3724caf59c7ea4a551084ddc601e4597 Mon Sep 17 00:00:00 2001 From: Ludovic Courtès Date: Tue, 18 Jul 2017 15:29:45 +0200 Subject: syscalls: Delay resolution of "scm_set_automatic_finalization_enabled". * guix/build/syscalls.scm (%set-automatic-finalization-enabled?!) [guile-2.2]: Wrap in 'delay'. --- guix/build/syscalls.scm | 16 ++++++++++------ 1 file changed, 10 insertions(+), 6 deletions(-) (limited to 'guix/build') diff --git a/guix/build/syscalls.scm b/guix/build/syscalls.scm index 549612fa3c..41208e32a8 100644 --- a/guix/build/syscalls.scm +++ b/guix/build/syscalls.scm @@ -725,15 +725,19 @@ mounted at FILE." (cond-expand (guile-2.2 (define %set-automatic-finalization-enabled?! - (let ((proc (pointer->procedure int - (dynamic-func - "scm_set_automatic_finalization_enabled" - (dynamic-link)) - (list int)))) + ;; When using a statically-linked Guile, for instance in the initrd, we + ;; cannot resolve this symbol, but most of the time we don't need it + ;; anyway. Thus, delay it. + (let ((proc (delay + (pointer->procedure int + (dynamic-func + "scm_set_automatic_finalization_enabled" + (dynamic-link)) + (list int))))) (lambda (enabled?) "Switch on or off automatic finalization in a separate thread. Turning finalization off shuts down the finalization thread as a side effect." - (->bool (proc (if enabled? 1 0)))))) + (->bool ((force proc) (if enabled? 1 0)))))) (define-syntax-rule (without-automatic-finalization exp) "Turn off automatic finalization within the dynamic extent of EXP." -- cgit v1.2.3