From a1d03ff2645a003878e084d5ed92ebca75efc77f Mon Sep 17 00:00:00 2001 From: Fabricio Date: Sun, 2 Dec 2018 12:17:23 -0200 Subject: [PATCH] signals items change with closed channel --- capture.go | 22 ++++++++++++---------- main.go | 2 +- 2 files changed, 13 insertions(+), 11 deletions(-) diff --git a/capture.go b/capture.go index a95951f..2dfd7d9 100644 --- a/capture.go +++ b/capture.go @@ -14,8 +14,7 @@ type CaptureList struct { items []Capture mux sync.Mutex maxItems int - // signals any change in "items" - Updated chan struct{} + updated chan struct{} // signals any change in "items" } // Capture saves our traffic data @@ -54,7 +53,7 @@ func (c *Capture) Metadata() CaptureMetadata { func NewCaptureList(maxItems int) *CaptureList { return &CaptureList{ maxItems: maxItems, - Updated: make(chan struct{}), + updated: make(chan struct{}), } } @@ -67,7 +66,7 @@ func (c *CaptureList) Insert(capture Capture) { if len(c.items) > c.maxItems { c.items = c.items[1:] } - c.signalsItemsChange() + c.signalsChange() } // Find finds a capture by its id @@ -88,7 +87,7 @@ func (c *CaptureList) RemoveAll() { c.mux.Lock() defer c.mux.Unlock() c.items = nil - c.signalsItemsChange() + c.signalsChange() } // Items returns all the captures @@ -112,9 +111,12 @@ func newID() int { return captureID } -func (c *CaptureList) signalsItemsChange() { - select { - case c.Updated <- struct{}{}: - default: - } +func (c *CaptureList) signalsChange() { + close(c.updated) + c.updated = make(chan struct{}) +} + +// Updated signals any change in the list +func (c *CaptureList) Updated() <-chan struct{} { + return c.updated } diff --git a/main.go b/main.go index bbcfb20..53b2d32 100644 --- a/main.go +++ b/main.go @@ -68,7 +68,7 @@ func NewDashboardConnHandler(list *CaptureList) http.HandlerFunc { rw.(http.Flusher).Flush() select { - case <-list.Updated: + case <-list.Updated(): case <-req.Context().Done(): return }