From 5145dd3aa0c02c9fc496d1432fc4410674206e1d Mon Sep 17 00:00:00 2001 From: Bryan Newbold Date: Mon, 20 Feb 2017 00:05:31 -0800 Subject: Import Upstream version 3a2 --- dbutil.scm | 26 ++++++++++++++++---------- 1 file changed, 16 insertions(+), 10 deletions(-) (limited to 'dbutil.scm') diff --git a/dbutil.scm b/dbutil.scm index 5e5c86d..5df7b49 100644 --- a/dbutil.scm +++ b/dbutil.scm @@ -113,11 +113,13 @@ (if (null? *base-table-implementations*) (require 'alist-table)) (cond ((and (not (and mutable? (not certificate))) (loop *base-table-implementations*))) - ((memq 'alist-table *base-table-implementations*) #f) - ((let () - (require 'alist-table) - (loop (list (car *base-table-implementations*))))) - (else #f))) + ((and (not (memq 'alist-table *base-table-implementations*)) + (let () + (require 'alist-table) + (loop (list (car *base-table-implementations*)))))) + (else + (and certificate (file-unlock! filename certificate)) + #f))) (define (mdbm:open-type filename type mutable?) (require type) @@ -126,7 +128,9 @@ (let* ((sys (cadr (assq type *base-table-implementations*))) (open (and sys (sys 'open-database))) (ndb (and open (open filename mutable?)))) - (and ndb (list ndb 1 type certificate)))))) + (cond (ndb (list ndb 1 type certificate)) + (else (and certificate (file-unlock! filename certificate)) + #f)))))) ;;@args filename base-table-type ;;@1 should be a string naming a file; or @code{#f}. @2 must be a @@ -302,14 +306,16 @@ (define certificate #f) (and entry (set! rdb (car entry))) (and (procedure? rdb) - (set! certificate (or (and entry (cadddr entry)) - (and (rdb 'filename) - (file-lock! (rdb 'filename)))))) + (set! certificate (and entry (cadddr entry)))) (cond ((and entry (not (eqv? 1 (cadr entry)))) (set-car! (cdr entry) (+ -1 (cadr entry))) #f) - ((or (not certificate) (not (procedure? rdb))) + ((not (procedure? rdb)) + (slib:warn 'close-database 'not 'procedure? rdb) #f) + ((not certificate) + (and dbs (set! dbs (mdbm:remove-entry dbs entry))) + #t) (else (let* ((filename (rdb 'filename)) (dbclose (rdb 'close-database)) -- cgit v1.2.3