diff options
| author | ckonstanski <carlos.konstanski@olo.com> | 2024-12-31 10:22:02 -0700 |
|---|---|---|
| committer | ckonstanski <carlos.konstanski@olo.com> | 2024-12-31 10:22:02 -0700 |
| commit | 8d03a2d976234197191eed05c821e675c10c36fc (patch) | |
| tree | e1f5616e8756e772cc37b69f50756911084bccb2 | |
| parent | 9c88a7c6c71d6109c69a54fc8f4a3a9047b00621 (diff) | |
user session mutex
| -rw-r--r-- | lisp/sql/user-session-pkg.lisp | 26 | ||||
| -rw-r--r-- | lisp/webapps/webapp-loader.lisp | 4 |
2 files changed, 14 insertions, 16 deletions
diff --git a/lisp/sql/user-session-pkg.lisp b/lisp/sql/user-session-pkg.lisp index f33e2c8..0adba55 100644 --- a/lisp/sql/user-session-pkg.lisp +++ b/lisp/sql/user-session-pkg.lisp @@ -85,6 +85,7 @@ "Ensures that the user has a valid sessionid cookie. Returns the `sessionid'. If the session does exist, update its timestamp." (sb-thread:with-mutex (*user-session-mutex*) + (run-garbage-collect-cycle) (with-bogenherr-database (let* ((user-session-pkg (make-instance 'user-session-pkg)) (sessionid (when (not force-new-sessionid-p) @@ -101,16 +102,15 @@ "Goes through all the user sessions, expiring any that have remained inactive for a period of time determined by the `*session-timeout*' variable." - (sb-thread:with-mutex (*user-session-mutex*) - (when (> (- (get-universal-time) org-ckons-session::*gc-last-cycle-timestamp*) org-ckons-session::*gc-interval*) - (setf org-ckons-session::*gc-last-cycle-timestamp* (get-universal-time)) - (with-bogenherr-database - (let ((user-session-pkg (make-instance 'user-session-pkg))) - (loop for user-session in (get-user-sessions user-session-pkg) do - (let ((inactive-time (- org-ckons-session::*gc-last-cycle-timestamp* (datetime user-session)))) - (when (and (> inactive-time org-ckons-session::*session-timeout*) - (sessionid user-session)) - (org-ckons-core::logger (format nil "Deleting expired session: id = [~a] ; sessionid = [~a]" (id user-session) (sessionid user-session))) - (loop for user-session-object in (get-user-session-objects user-session-pkg user-session) do - (delete-record user-session-pkg user-session-object)) - (delete-record user-session-pkg user-session))))))))) + (when (> (- (get-universal-time) org-ckons-session::*gc-last-cycle-timestamp*) org-ckons-session::*gc-interval*) + (setf org-ckons-session::*gc-last-cycle-timestamp* (get-universal-time)) + (with-bogenherr-database + (let ((user-session-pkg (make-instance 'user-session-pkg))) + (loop for user-session in (get-user-sessions user-session-pkg) do + (let ((inactive-time (- org-ckons-session::*gc-last-cycle-timestamp* (datetime user-session)))) + (when (and (> inactive-time org-ckons-session::*session-timeout*) + (sessionid user-session)) + (org-ckons-core::logger (format nil "Deleting expired session: id = [~a] ; sessionid = [~a]" (id user-session) (sessionid user-session))) + (loop for user-session-object in (get-user-session-objects user-session-pkg user-session) do + (delete-record user-session-pkg user-session-object)) + (delete-record user-session-pkg user-session)))))))) diff --git a/lisp/webapps/webapp-loader.lisp b/lisp/webapps/webapp-loader.lisp index 5ac5b1c..6b1775b 100644 --- a/lisp/webapps/webapp-loader.lisp +++ b/lisp/webapps/webapp-loader.lisp @@ -158,9 +158,7 @@ with the new one." (let* ((*webapp* (get-webapp ,package)) (*uri* ,uri) (*header-register* (make-instance 'org-ckons-session::header-register)) - (*sessionid* (progn - (run-garbage-collect-cycle) - (ensure-user-session-exists)))) + (*sessionid* (ensure-user-session-exists))) (ensure-user-exists) (setf output (,page-function ,@args)) (org-ckons-session::ship-headers *header-register*)) |
