From da0288b27363583e9cfecd6c983f169ee5c02821 Mon Sep 17 00:00:00 2001 From: Marten Seemann Date: Tue, 24 Sep 2019 20:32:53 +0700 Subject: [PATCH] destroy sessions when deleting them from the packet handler map --- packet_handler_map.go | 3 +++ packet_handler_map_test.go | 4 +++- 2 files changed, 6 insertions(+), 1 deletion(-) diff --git a/packet_handler_map.go b/packet_handler_map.go index 2ee085808..08c83d486 100644 --- a/packet_handler_map.go +++ b/packet_handler_map.go @@ -86,6 +86,9 @@ func (h *packetHandlerMap) Retire(id protocol.ConnectionID) { func (h *packetHandlerMap) retireByConnectionIDAsString(id string) { time.AfterFunc(h.deleteRetiredSessionsAfter, func() { h.mutex.Lock() + if sess, ok := h.handlers[id]; ok { + sess.destroy(errors.New("deleting")) + } h.removeByConnectionIDAsString(id) h.mutex.Unlock() }) diff --git a/packet_handler_map_test.go b/packet_handler_map_test.go index a4c15798f..436ccb1ed 100644 --- a/packet_handler_map_test.go +++ b/packet_handler_map_test.go @@ -137,7 +137,9 @@ var _ = Describe("Packet Handler Map", func() { It("deletes retired session entries after a wait time", func() { handler.deleteRetiredSessionsAfter = scaleDuration(10 * time.Millisecond) connID := protocol.ConnectionID{1, 2, 3, 4, 5, 6, 7, 8} - handler.Add(connID, NewMockPacketHandler(mockCtrl)) + sess := NewMockPacketHandler(mockCtrl) + handler.Add(connID, sess) + sess.EXPECT().destroy(gomock.Any()) handler.Retire(connID) time.Sleep(scaleDuration(30 * time.Millisecond)) handler.handlePacket(nil, nil, getPacket(connID))