Bug: Race Condition – sessions-Map ohne Mutex aus mehreren Goroutinen zugreifbar #13
Reference in New Issue
Block a user
Delete Branch "%!s()"
Deleting a branch is permanent. Although the deleted branch may continue to exist for a short time before it actually gets removed, it CANNOT be undone in most cases. Continue?
Bug Report – Race Condition (Data Race)
Beschreibung
Die globale
sessions-Map wird ohne jegliche Synchronisation aus mehreren Goroutinen gleichzeitig gelesen und geschrieben:voiceUpdate-Handler wird von discordgo in einer eigenen Goroutine aufgerufen*/5 * * * *) läuft ebenfalls in einer eigenen Goroutinemain()über die MapDas ist ein klassischer Data Race in Go. Wenn mehrere Voice-Events gleichzeitig eintreffen und der Cron gleichzeitig läuft, kann es zu Panic (concurrent map read and write) oder korrupten Daten kommen.
Betroffene Stellen
main.go:for uid, sess := range sessions(Cron + Shutdown)main.go:sessions[uid] = ...,delete(sessions, uid)invoiceUpdate()main.go:processAndSave()– liest und mutiertsess-FelderFix
Einen
sync.RWMutex(odersync.Mutex) einfügen:Vor jedem Zugriff auf
sessionssperren:Schweregrad
Hoch – kann zu Panic und Datenverlust führen, besonders wenn viele User gleichzeitig den Voice-Channel wechseln.