Fix handling of session timeouts by using the session-id as the only
key.
This commit is contained in:
parent
ef819fa581
commit
8a2351a190
|
@ -120,28 +120,26 @@
|
|||
(define *timeout-queue*)
|
||||
|
||||
(define (timeout-queue-register-session! session-id timeout)
|
||||
(search-tree-set! *timeout-queue* (cons session-id timeout) 'ignore))
|
||||
(search-tree-set! *timeout-queue* session-id timeout))
|
||||
|
||||
(define (timeout-queue-remove-session! session-id)
|
||||
(search-tree-set! *timeout-queue* (cons session-id 0) #f))
|
||||
(search-tree-set! *timeout-queue* session-id #f))
|
||||
|
||||
(define (timeout-queue-adjust-session-timeout! session-id new-timeout)
|
||||
(search-tree-set! *timeout-queue* (cons session-id new-timeout) 'ignore))
|
||||
(search-tree-set! *timeout-queue* session-id new-timeout))
|
||||
|
||||
|
||||
(define (surveillance-thread)
|
||||
(set! *timeout-queue* (make-search-tree (lambda (p q) (eq? (car p) (car q)))
|
||||
(lambda (p q)
|
||||
(< (cdr p) (cdr q)))))
|
||||
(set! *timeout-queue* (make-search-tree = <))
|
||||
(let lp ()
|
||||
(with-lock *session-table-lock*
|
||||
(let ((now (time)))
|
||||
(let lp2 ()
|
||||
(receive (session-id.time ignore) (search-tree-min *timeout-queue*)
|
||||
(if session-id.time
|
||||
(if (<= (cdr session-id.time) now)
|
||||
(let ((session-id (car session-id.time)))
|
||||
(table-set! *session-table* session-id #f)
|
||||
(receive (session-id time) (search-tree-min *timeout-queue*)
|
||||
(if session-id
|
||||
(if (<= time now)
|
||||
(begin
|
||||
(timeout-queue-remove-session! session-id)
|
||||
(pop-search-tree-min! *timeout-queue*)
|
||||
(lp2))))))))
|
||||
(sleep 1000)
|
||||
|
|
Loading…
Reference in New Issue