... | ... |
@@ -218,20 +218,21 @@ func getInfo(srv *Server, version float64, w http.ResponseWriter, r *http.Reques |
218 | 218 |
} |
219 | 219 |
|
220 | 220 |
func getEvents(srv *Server, version float64, w http.ResponseWriter, r *http.Request, vars map[string]string) error { |
221 |
- sendEvent := func(wf *utils.WriteFlusher, event *utils.JSONMessage) (bool, error) { |
|
221 |
+ sendEvent := func(wf *utils.WriteFlusher, event *utils.JSONMessage) (error) { |
|
222 | 222 |
b, err := json.Marshal(event) |
223 | 223 |
if err != nil { |
224 |
- return true, nil |
|
224 |
+ return fmt.Errorf("JSON error") |
|
225 | 225 |
} |
226 | 226 |
_, err = wf.Write(b) |
227 | 227 |
if err != nil { |
228 |
+ // On error, evict the listener |
|
228 | 229 |
utils.Debugf("%s", err) |
229 | 230 |
srv.Lock() |
230 | 231 |
delete(srv.listeners, r.RemoteAddr) |
231 | 232 |
srv.Unlock() |
232 |
- return false, err |
|
233 |
+ return err |
|
233 | 234 |
} |
234 |
- return false, nil |
|
235 |
+ return nil |
|
235 | 236 |
} |
236 | 237 |
|
237 | 238 |
if err := parseForm(r); err != nil { |
... | ... |
@@ -248,10 +249,11 @@ func getEvents(srv *Server, version float64, w http.ResponseWriter, r *http.Requ |
248 | 248 |
w.Header().Set("Content-Type", "application/json") |
249 | 249 |
wf := utils.NewWriteFlusher(w) |
250 | 250 |
if since != 0 { |
251 |
+ // If since, send previous events that happened after the timestamp |
|
251 | 252 |
for _, event := range srv.events { |
252 | 253 |
if event.Time >= since { |
253 |
- skip, err := sendEvent(wf, &event) |
|
254 |
- if skip { |
|
254 |
+ err := sendEvent(wf, &event) |
|
255 |
+ if err != nil && err.Error() == "JSON error" { |
|
255 | 256 |
continue |
256 | 257 |
} |
257 | 258 |
if err != nil { |
... | ... |
@@ -262,8 +264,8 @@ func getEvents(srv *Server, version float64, w http.ResponseWriter, r *http.Requ |
262 | 262 |
} |
263 | 263 |
for { |
264 | 264 |
event := <-listener |
265 |
- skip, err := sendEvent(wf, &event) |
|
266 |
- if skip { |
|
265 |
+ err := sendEvent(wf, &event) |
|
266 |
+ if err != nil && err.Error() == "JSON error" { |
|
267 | 267 |
continue |
268 | 268 |
} |
269 | 269 |
if err != nil { |