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:
parent
181a34f38d
commit
cbd9eca6c3
@ -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:
|
||||||
|
Loading…
Reference in New Issue
Block a user