Browse code

Support CloseNotifier for events

Signed-off-by: Alexander Morozov <lk4d4@docker.com>
(cherry picked from commit 9e7fc245a79535984c3e0dd3d2c4f042e92cdc6a)

Alexander Morozov authored on 2015/06/04 03:42:51
Showing 1 changed files
... ...
@@ -462,6 +462,12 @@ func (s *Server) getEvents(version version.Version, w http.ResponseWriter, r *ht
462 462
 			return err
463 463
 		}
464 464
 	}
465
+
466
+	var closeNotify <-chan bool
467
+	if closeNotifier, ok := w.(http.CloseNotifier); ok {
468
+		closeNotify = closeNotifier.CloseNotify()
469
+	}
470
+
465 471
 	for {
466 472
 		select {
467 473
 		case ev := <-l:
... ...
@@ -474,6 +480,9 @@ func (s *Server) getEvents(version version.Version, w http.ResponseWriter, r *ht
474 474
 			}
475 475
 		case <-timer.C:
476 476
 			return nil
477
+		case <-closeNotify:
478
+			logrus.Debug("Client disconnected, stop sending events")
479
+			return nil
477 480
 		}
478 481
 	}
479 482
 }