Merge branch 'connection-pool-fix'
[clsql.git] / sql / database.lisp
index d4d1d91e7b15dd7911add8d32f56376e77811d7a..bb87046fb6c8ce494976b9293efbc11d997b7e9d 100644 (file)
@@ -18,6 +18,8 @@
 CONNECT. Meaningful values are :new, :warn-new, :error, :warn-old
 and :old.")
 
+;;TODO: this variable appears to be global, not thread specific and is
+;; not protected when modifying the list.
 (defvar *connected-databases* nil
   "List of active database objects.")
 
@@ -174,6 +176,7 @@ from a pool it will be released to this pool."
                 (setf *default-database* (car *connected-databases*)))
               t))
           (when (database-disconnect database)
+           ;;TODO: RACE COND: 2 threads disconnecting could stomp on *connected-databases*
             (setf *connected-databases* (delete database *connected-databases*))
             (when (eq database *default-database*)
               (setf *default-database* (car *connected-databases*)))
@@ -317,7 +320,7 @@ system specified by DATABASE-TYPE."
   (when (typep db 'database)
     (setf (slot-value db 'encoding) encoding)
     (when (eql (slot-value db 'state) :open)
-      (case database-type
+      (case (database-type db)
         ;; FIXME: If database object is open then
         ;; send command to SQL engine specifying the character
         ;; encoding for the database