mirror of https://github.com/docker/docs.git
Merge pull request #551 from noxiouz/fix_eventsHandler
[eventsHandler] Use Lock/Unlock to sync a write access
This commit is contained in:
commit
4da6b2b093
|
@ -54,11 +54,12 @@ func (eh *eventsHandler) Handle(e *cluster.Event) error {
|
||||||
"Addr", e.Engine.Addr,
|
"Addr", e.Engine.Addr,
|
||||||
"Ip", e.Engine.IP)
|
"Ip", e.Engine.IP)
|
||||||
|
|
||||||
|
var failed []string
|
||||||
|
|
||||||
for key, w := range eh.ws {
|
for key, w := range eh.ws {
|
||||||
if _, err := fmt.Fprintf(w, str); err != nil {
|
if _, err := fmt.Fprintf(w, str); err != nil {
|
||||||
close(eh.cs[key])
|
// collect them to handle later under Lock
|
||||||
delete(eh.ws, key)
|
failed = append(failed, key)
|
||||||
delete(eh.cs, key)
|
|
||||||
continue
|
continue
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -67,7 +68,24 @@ func (eh *eventsHandler) Handle(e *cluster.Event) error {
|
||||||
}
|
}
|
||||||
|
|
||||||
}
|
}
|
||||||
|
|
||||||
eh.RUnlock()
|
eh.RUnlock()
|
||||||
|
|
||||||
|
if len(failed) > 0 {
|
||||||
|
eh.Lock()
|
||||||
|
|
||||||
|
for _, key := range failed {
|
||||||
|
if ch, ok := eh.cs[key]; ok {
|
||||||
|
close(ch)
|
||||||
|
// the maps are expected to have the same keys
|
||||||
|
delete(eh.cs, key)
|
||||||
|
delete(eh.ws, key)
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
eh.Unlock()
|
||||||
|
}
|
||||||
|
|
||||||
return nil
|
return nil
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
Loading…
Reference in New Issue