stop leaking leftover listeners after sessions are closed
This commit is contained in:
parent
0afa0d17a9
commit
ed906b82a7
|
@ -151,18 +151,22 @@
|
||||||
(set-error-mode! listeners-agent :continue)
|
(set-error-mode! listeners-agent :continue)
|
||||||
|
|
||||||
|
|
||||||
(defn add-listener!
|
(defn- add-listener!
|
||||||
[session-id event-key f]
|
[session-id event-key f]
|
||||||
(send-off listeners-agent
|
(send-off listeners-agent
|
||||||
update-in [session-id event-key] #(conj (or % []) f)))
|
update-in [session-id event-key] #(conj (or % []) f)))
|
||||||
|
|
||||||
(defn notify-listeners!
|
(defn- notify-listeners!
|
||||||
[session-id request event-key & data]
|
[session-id request event-key & data]
|
||||||
(send-off listeners-agent
|
(send-off listeners-agent
|
||||||
(fn [listeners]
|
(fn [listeners]
|
||||||
(doseq [callback (get-in listeners [session-id event-key])]
|
(doseq [callback (get-in listeners [session-id event-key])]
|
||||||
(apply callback session-id request data))
|
(apply callback session-id request data))
|
||||||
listeners)))
|
listeners)))
|
||||||
|
|
||||||
|
(defn- remove-listeners!
|
||||||
|
[session-id]
|
||||||
|
(send-off listeners-agent dissoc session-id))
|
||||||
;; end of listeners
|
;; end of listeners
|
||||||
|
|
||||||
|
|
||||||
|
@ -541,6 +545,7 @@
|
||||||
(if on-error (on-error))))
|
(if on-error (on-error))))
|
||||||
; finally raise the session close event
|
; finally raise the session close event
|
||||||
(notify-listeners! id request :close message)
|
(notify-listeners! id request :close message)
|
||||||
|
(remove-listeners! id)
|
||||||
nil ;; the agent will no longer wrap a session
|
nil ;; the agent will no longer wrap a session
|
||||||
))
|
))
|
||||||
|
|
||||||
|
|
Reference in a new issue