Adding some TODO notes about potential race conditions.
authorNathan Bird <nathan@acceleration.net>
Mon, 1 Mar 2010 19:08:41 +0000 (14:08 -0500)
committerNathan Bird <nathan@acceleration.net>
Tue, 2 Mar 2010 23:16:45 +0000 (18:16 -0500)
TODO
sql/database.lisp

diff --git a/TODO b/TODO
index 4b85e96bb72fbe6c5f49732d197e16d39a48fa50..795ec6a6d6d441ee916e4cce90c06816582654d3 100644 (file)
--- a/TODO
+++ b/TODO
@@ -22,3 +22,6 @@ POSSIBLE EXTENSIONS
 
 * improve large object api and extend to databases beyond postgresql 
 * add support for prepared statements
+
+RACE CONDITIONS
+* sql/databases.lisp: *connected-databases* is shared globally but not modified in a threadsafe manner.
index 382f552955219276e2ba935f8e194b3156b9f5ea..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*)))