5
0
mirror of https://github.com/wailsapp/wails.git synced 2025-05-16 08:59:29 +08:00

Don't manipulate listeners array when expired

This commit is contained in:
Lea Anthony 2021-02-05 15:46:44 +11:00
parent 181a34f38d
commit cbd9eca6c3
No known key found for this signature in database
GPG Key ID: 33DAF7BB90A58405

View File

@ -139,18 +139,17 @@ func (e *Manager) Start(renderer interfaces.Renderer) {
e.mu.Lock() e.mu.Lock()
// Notify Go listeners
var listenersToRemove int
// Iterate listeners // Iterate listeners
for _, listener := range e.listeners[event.Name] { for _, listener := range e.listeners[event.Name] {
// Call listener, perhaps with data if !listener.expired {
if event.Data == nil { // Call listener, perhaps with data
go listener.callback() if event.Data == nil {
} else { go listener.callback()
unpacked := event.Data.([]interface{}) } else {
go listener.callback(unpacked...) unpacked := event.Data.([]interface{})
go listener.callback(unpacked...)
}
} }
// Update listen counter // Update listen counter
@ -158,22 +157,10 @@ func (e *Manager) Start(renderer interfaces.Renderer) {
listener.counter = listener.counter - 1 listener.counter = listener.counter - 1
if listener.counter == 0 { if listener.counter == 0 {
listener.expired = true listener.expired = true
listenersToRemove++
} }
} }
} }
// Remove expired listeners in place
if listenersToRemove > 0 {
listeners := e.listeners[event.Name]
for index, listener := range listeners {
if listener.expired {
listeners[index] = listeners[len(listeners)-1]
listeners[len(listeners)-1] = nil
e.listeners[event.Name] = listeners[:len(listeners)-1]
}
}
}
e.mu.Unlock() e.mu.Unlock()
case <-e.quitChannel: case <-e.quitChannel: