Fix concurrent map writes in presence queue

This commit is contained in:
Bohdan Horbeshko 2022-01-29 00:19:33 -05:00
parent 540c6cd546
commit f052d633ac
2 changed files with 6 additions and 0 deletions

View file

@ -90,7 +90,9 @@ func heartbeat(component *xmpp.Component) {
if err != nil {
gateway.LogBadPresence(presence)
} else {
gateway.QueueLock.Lock()
delete(gateway.Queue, key)
gateway.QueueLock.Unlock()
}
}

View file

@ -3,6 +3,7 @@ package gateway
import (
"encoding/xml"
"strings"
"sync"
"dev.narayana.im/narayana/telegabber/xmpp/extensions"
@ -14,6 +15,7 @@ import (
// Queue stores presences to send later
var Queue = make(map[string]*stanza.Presence)
var QueueLock = sync.Mutex{}
// Jid stores the component's JID object
var Jid *stanza.Jid
@ -178,7 +180,9 @@ func SendPresence(component *xmpp.Component, to string, args ...args.V) error {
return err
}
} else {
QueueLock.Lock()
Queue[presence.From+presence.To] = &presence
QueueLock.Unlock()
}
return nil