[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