From 4167624fd56f67ca02b6bf5f4b791bf5c4ccf7ef Mon Sep 17 00:00:00 2001 From: Nathan Bird Date: Mon, 1 Mar 2010 14:08:41 -0500 Subject: [PATCH] Adding some TODO notes about potential race conditions. --- TODO | 3 +++ sql/database.lisp | 3 +++ 2 files changed, 6 insertions(+) diff --git a/TODO b/TODO index 4b85e96..795ec6a 100644 --- 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. diff --git a/sql/database.lisp b/sql/database.lisp index 382f552..bb87046 100644 --- a/sql/database.lisp +++ b/sql/database.lisp @@ -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*))) -- 2.34.1