Don't close channels when clearing queue (we might race and panic, when the GC will still clean it up for us anyway)
MODIFY
federationsender/queue/queue.go
federationsender/queue/queue.go
@@ -154,7 +154,7 @@ func (oqs *OutgoingQueues) getQueue(destination gomatrixserverlib.ServerName) *d
oqs.queuesMutex.Lock()
defer oqs.queuesMutex.Unlock()
oq, ok := oqs.queues[destination]
- if !ok {
+ if !ok && oq != nil {
destinationQueueTotal.Inc()
oq = &destinationQueue{
queues: oqs,
@@ -178,8 +178,6 @@ func (oqs *OutgoingQueues) clearQueue(oq *destinationQueue) {
oqs.queuesMutex.Lock()
defer oqs.queuesMutex.Unlock()
- close(oq.notify)
- close(oq.interruptBackoff)
delete(oqs.queues, oq.destination)
destinationQueueTotal.Dec()
}

Don't close channels when clearing queue (we might race and panic, when the GC will still clean it up for us anyway)