summaryrefslogtreecommitdiff
path: root/guix/store.scm
diff options
context:
space:
mode:
authorLudovic Courtès <ludo@gnu.org>2020-04-04 17:36:31 +0200
committerLudovic Courtès <ludo@gnu.org>2020-04-04 18:52:35 +0200
commit8ed597f4a261fe188de82cd1f5daed83dba948eb (patch)
tree11a5d45ad494bf6d0244fd3248664c536e9fa333 /guix/store.scm
parentd8c8bfcc1f7c2e8226abebc6227261c8617f90d0 (diff)
downloadpatches-8ed597f4a261fe188de82cd1f5daed83dba948eb.tar
patches-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/store.scm')
-rw-r--r--guix/store.scm12
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;