diff options
author | Ludovic Courtès <ludo@gnu.org> | 2020-04-04 17:36:31 +0200 |
---|---|---|
committer | Ludovic Courtès <ludo@gnu.org> | 2020-04-04 18:52:35 +0200 |
commit | 8ed597f4a261fe188de82cd1f5daed83dba948eb (patch) | |
tree | 11a5d45ad494bf6d0244fd3248664c536e9fa333 /guix | |
parent | d8c8bfcc1f7c2e8226abebc6227261c8617f90d0 (diff) | |
download | gnu-guix-8ed597f4a261fe188de82cd1f5daed83dba948eb.tar gnu-guix-8ed597f4a261fe188de82cd1f5daed83dba948eb.tar.gz |
store: 'with-store' doesn't close the store upon abort.
Fixes <https://bugs.gnu.org/40428>.
Reported by Marius Bakke <mbakke@fastmail.com> and 白い熊.
Regression introduced with the first uses of 'with-build-handler' in
commit 62195b9a8fd6846117c5d7698842748300d13e31 and subsequent.
* guix/store.scm (call-with-store): Use 'catch #t' instead of
'dynamic-wind'. This ensures STORE remains open when a non-local exit
other than an exception occurs, such as an abort to the build handler
prompt.
* tests/store.scm ("with-build-handler + with-store"): New test.
Diffstat (limited to 'guix')
-rw-r--r-- | guix/store.scm | 12 |
1 files changed, 7 insertions, 5 deletions
diff --git a/guix/store.scm b/guix/store.scm index ca8c0e5ef8..1dd5c9545b 100644 --- a/guix/store.scm +++ b/guix/store.scm @@ -623,14 +623,16 @@ connection. Use with care." (define (call-with-store proc) "Call PROC with an open store connection." (let ((store (open-connection))) - (dynamic-wind - (const #f) + (catch #t (lambda () (parameterize ((current-store-protocol-version (store-connection-version store))) - (proc store))) - (lambda () - (false-if-exception (close-connection store)))))) + (let ((result (proc store))) + (close-connection store) + result))) + (lambda (key . args) + (close-connection store) + (apply throw key args))))) (define-syntax-rule (with-store store exp ...) "Bind STORE to an open connection to the store and evaluate EXPs; |