diff --git a/etcdserver2/etcdhttp/http.go b/etcdserver2/etcdhttp/http.go index 23491bf7d..bf4b56580 100644 --- a/etcdserver2/etcdhttp/http.go +++ b/etcdserver2/etcdhttp/http.go @@ -58,8 +58,15 @@ func encodeResponse(ctx context.Context, w http.ResponseWriter, resp etcdserver. case resp.Watcher != nil: // TODO(bmizerany): support streaming? defer resp.Watcher.Remove() + var nch <-chan bool + if x, ok := w.(http.CloseNotifier); ok { + nch = x.CloseNotify() + } select { case ev = <-resp.Watcher.EventChan: + case <-nch: + // TODO: log something? + return nil case <-ctx.Done(): return ctx.Err() }