mirror of
https://github.com/prometheus/alertmanager
synced 2025-03-03 10:17:50 +00:00
Fix listener broadcasting implementation
This commit is contained in:
parent
856d5091c1
commit
7271ea0907
@ -56,12 +56,14 @@ type MemAlerts struct {
|
|||||||
data *MemData
|
data *MemData
|
||||||
|
|
||||||
mtx sync.RWMutex
|
mtx sync.RWMutex
|
||||||
listeners []chan *types.Alert
|
listeners map[int]chan *types.Alert
|
||||||
|
next int
|
||||||
}
|
}
|
||||||
|
|
||||||
func NewMemAlerts(data *MemData) *MemAlerts {
|
func NewMemAlerts(data *MemData) *MemAlerts {
|
||||||
return &MemAlerts{
|
return &MemAlerts{
|
||||||
data: data,
|
data: data,
|
||||||
|
listeners: map[int]chan *types.Alert{},
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
@ -77,13 +79,15 @@ func (a *MemAlerts) Subscribe() AlertIterator {
|
|||||||
done = make(chan struct{})
|
done = make(chan struct{})
|
||||||
)
|
)
|
||||||
|
|
||||||
i := len(a.listeners)
|
i := a.next
|
||||||
a.listeners = append(a.listeners, ch)
|
a.next++
|
||||||
|
|
||||||
|
a.listeners[i] = ch
|
||||||
|
|
||||||
go func() {
|
go func() {
|
||||||
defer func() {
|
defer func() {
|
||||||
a.mtx.Lock()
|
a.mtx.Lock()
|
||||||
a.listeners = append(a.listeners[:i], a.listeners[i+1:]...)
|
delete(a.listeners, i)
|
||||||
close(ch)
|
close(ch)
|
||||||
a.mtx.Unlock()
|
a.mtx.Unlock()
|
||||||
}()
|
}()
|
||||||
|
Loading…
Reference in New Issue
Block a user