[elephant-cvs] CVS elephant/src/db-bdb
ieslick
ieslick at common-lisp.net
Sun Mar 4 20:22:48 UTC 2007
Update of /project/elephant/cvsroot/elephant/src/db-bdb
In directory clnet:/tmp/cvs-serv26542
Modified Files:
bdb-transactions.lisp
Log Message:
Fixed bdb execute transations to properly return multiple values
--- /project/elephant/cvsroot/elephant/src/db-bdb/bdb-transactions.lisp 2007/02/20 19:12:58 1.10
+++ /project/elephant/cvsroot/elephant/src/db-bdb/bdb-transactions.lisp 2007/03/04 20:22:47 1.11
@@ -40,21 +40,22 @@
:txn-sync txn-sync))))
(declare (type pointer-void txn))
(let ((result
- (let ((*current-transaction* (make-transaction-record sc txn))
- (*store-controller* sc))
- (declare (special *current-transaction* *store-controller*))
- (catch 'transaction
- (unwind-protect
- (multiple-value-prog1
- (funcall txn-fn)
- (db-transaction-commit txn
- :txn-nosync txn-nosync
- :txn-sync txn-sync)
- (setq success t))
- (unless success
- (db-transaction-abort txn)))))))
+ (multiple-value-list
+ (let ((*current-transaction* (make-transaction-record sc txn))
+ (*store-controller* sc))
+ (declare (special *current-transaction* *store-controller*))
+ (catch 'transaction
+ (unwind-protect
+ (multiple-value-prog1
+ (funcall txn-fn)
+ (db-transaction-commit txn
+ :txn-nosync txn-nosync
+ :txn-sync txn-sync)
+ (setq success t))
+ (unless success
+ (db-transaction-abort txn))))))))
(unless (and (eq result txn) (not success))
- (return result))))
+ (return (values-list result)))))
finally (error "Too many retries in transaction"))))
(defmethod controller-start-transaction ((sc bdb-store-controller)
More information about the Elephant-cvs
mailing list