stop leaking leftover listeners after sessions are closed

This commit is contained in:
Gered 2016-05-17 16:26:27 -04:00
parent 0afa0d17a9
commit ed906b82a7

View file

@ -151,18 +151,22 @@
(set-error-mode! listeners-agent :continue)
(defn add-listener!
(defn- add-listener!
[session-id event-key f]
(send-off listeners-agent
update-in [session-id event-key] #(conj (or % []) f)))
(defn notify-listeners!
(defn- notify-listeners!
[session-id request event-key & data]
(send-off listeners-agent
(fn [listeners]
(doseq [callback (get-in listeners [session-id event-key])]
(apply callback session-id request data))
listeners)))
(defn- remove-listeners!
[session-id]
(send-off listeners-agent dissoc session-id))
;; end of listeners
@ -541,6 +545,7 @@
(if on-error (on-error))))
; finally raise the session close event
(notify-listeners! id request :close message)
(remove-listeners! id)
nil ;; the agent will no longer wrap a session
))