summaryrefslogtreecommitdiff
path: root/event-httpd.c
diff options
context:
space:
mode:
Diffstat (limited to 'event-httpd.c')
-rw-r--r--event-httpd.c14
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;