From 495a791b2dd5f0e2daff8ea9baf3779e2bf74243 Mon Sep 17 00:00:00 2001 From: aler9 <46489434+aler9@users.noreply.github.com> Date: Sat, 19 Sep 2020 13:51:55 +0200 Subject: [PATCH] fix crash when closing --- main.go | 3 +++ utils.go | 30 ++++++++++++++++++++++-------- 2 files changed, 25 insertions(+), 8 deletions(-) diff --git a/main.go b/main.go index d85d1a75..6abf901b 100644 --- a/main.go +++ b/main.go @@ -314,6 +314,9 @@ outer: } }() + p.udpPublishersMap.clear() + p.readersMap.clear() + for _, p := range p.paths { p.onClose(true) } diff --git a/utils.go b/utils.go index bc15bbe5..266fa364 100644 --- a/utils.go +++ b/utils.go @@ -211,15 +211,11 @@ func newUdpPublisherMap() *udpPublishersMap { } } -func (m *udpPublishersMap) get(addr udpPublisherAddr) *udpPublisher { - m.mutex.RLock() - defer m.mutex.RUnlock() +func (m *udpPublishersMap) clear() { + m.mutex.Lock() + defer m.mutex.Unlock() - el, ok := m.ma[addr] - if !ok { - return nil - } - return el + m.ma = make(map[udpPublisherAddr]*udpPublisher) } func (m *udpPublishersMap) add(addr udpPublisherAddr, pub *udpPublisher) { @@ -236,6 +232,17 @@ func (m *udpPublishersMap) remove(addr udpPublisherAddr) { delete(m.ma, addr) } +func (m *udpPublishersMap) get(addr udpPublisherAddr) *udpPublisher { + m.mutex.RLock() + defer m.mutex.RUnlock() + + el, ok := m.ma[addr] + if !ok { + return nil + } + return el +} + type readersMap struct { mutex sync.RWMutex ma map[*client]struct{} @@ -247,6 +254,13 @@ func newReadersMap() *readersMap { } } +func (m *readersMap) clear() { + m.mutex.Lock() + defer m.mutex.Unlock() + + m.ma = make(map[*client]struct{}) +} + func (m *readersMap) add(reader *client) { m.mutex.Lock() defer m.mutex.Unlock()