diff options
Diffstat (limited to 'event-httpd.c')
-rw-r--r-- | event-httpd.c | 14 |
1 files changed, 13 insertions, 1 deletions
diff --git a/event-httpd.c b/event-httpd.c index 27590dd..865f82f 100644 --- a/event-httpd.c +++ b/event-httpd.c @@ -97,19 +97,28 @@ static void update(GObject *source, GAsyncResult *res, gpointer user_data) GError *error = NULL; char *line; gsize len; + int r; line = g_data_input_stream_read_line_finish(c->data, res, &len, &error); if (error || !line) { + if (c->resource->ops->update_close) + c->resource->ops->update_close(c, c->resource); + if (error) g_free(error); close_client(c); return; } - c->resource->ops->update(c, c->resource, line); + r = c->resource->ops->update(c, c->resource, line); g_free(line); + // If the update function returns an error, close this connection. + // This could be because we have a "newer" updater, or an error. + if (r == -1) + close_client(c); + g_data_input_stream_read_line_async(c->data, 0, NULL, update, c); } @@ -257,6 +266,9 @@ static void receive(GObject *source, GAsyncResult *res, gpointer user_data) return; } + if (resource->ops->update_open) + resource->ops->update_open(c, resource); + g_data_input_stream_read_line_async(c->data, 0, NULL, update, c); break; |