From 8699f53e6a033a7b5b55a2b6356da7c6e220d01f Mon Sep 17 00:00:00 2001 From: Arnaud Porterie Date: Wed, 14 May 2014 22:24:11 +0200 Subject: [PATCH] Check channel closed state in /events loop When listener channel is closed, it becomes always available for reading: select becomes an active loop which writes default-constructed events (i.e: empty strings). Fixes #5766. Docker-DCO-1.1-Signed-off-by: Arnaud Porterie (github: icecrime) --- AUTHORS | 1 + server/server.go | 5 ++++- 2 files changed, 5 insertions(+), 1 deletion(-) diff --git a/AUTHORS b/AUTHORS index b8c58ab09a..014748e187 100644 --- a/AUTHORS +++ b/AUTHORS @@ -28,6 +28,7 @@ Anthony Bishopric Anton Nikitin Antony Messerli apocas +Arnaud Porterie Asbjørn Enge Barry Allard Bartłomiej Piotrowski diff --git a/server/server.go b/server/server.go index d82c5fe549..cab11bcf50 100644 --- a/server/server.go +++ b/server/server.go @@ -259,7 +259,10 @@ func (srv *Server) Events(job *engine.Job) engine.Status { } for { select { - case event := <-listener: + case event, ok := <-listener: + if !ok { // Channel is closed: listener was evicted + return engine.StatusOK + } err := sendEvent(&event) if err != nil && err.Error() == "JSON error" { continue