diff options
author | Max Kellermann <max@duempel.org> | 2009-03-15 19:06:10 +0100 |
---|---|---|
committer | Max Kellermann <max@duempel.org> | 2009-03-15 19:06:10 +0100 |
commit | 58844aabac6407a95a8c2fb5ad22f969628c6bed (patch) | |
tree | 99e0befa7a14fd62b20790a8839ec09bd540832c | |
parent | 50c2dde5b50dcd864db362c47c859ea23f2ec16b (diff) | |
download | mpd-58844aabac6407a95a8c2fb5ad22f969628c6bed.tar.gz mpd-58844aabac6407a95a8c2fb5ad22f969628c6bed.tar.xz mpd-58844aabac6407a95a8c2fb5ad22f969628c6bed.zip |
httpd_output: clear the client's page queue on cancel
When the httpd output is cancelled, it freed all pages, but didn't
remove them from the queue. Call g_queue_clear() and remove the
write source id.
-rw-r--r-- | src/output/httpd_client.c | 13 | ||||
-rw-r--r-- | src/output/httpd_client.h | 2 |
2 files changed, 13 insertions, 2 deletions
diff --git a/src/output/httpd_client.c b/src/output/httpd_client.c index fb3f0548a..6f87b972a 100644 --- a/src/output/httpd_client.c +++ b/src/output/httpd_client.c @@ -409,13 +409,24 @@ httpd_client_queue_size(const struct httpd_client *client) return size; } +/* g_queue_clear() was introduced in GLib 2.14 */ +#if !GLIB_CHECK_VERSION(2,14,0) +#define g_queue_clear(q) do { g_queue_free(q); q = g_queue_new(); } while (0) +#endif + void -httpd_client_cancel(const struct httpd_client *client) +httpd_client_cancel(struct httpd_client *client) { if (client->state != RESPONSE) return; g_queue_foreach(client->pages, httpd_client_unref_page, NULL); + g_queue_clear(client->pages); + + if (client->write_source_id != 0 && client->current_page == NULL) { + g_source_remove(client->write_source_id); + client->write_source_id = 0; + } } static GIOStatus diff --git a/src/output/httpd_client.h b/src/output/httpd_client.h index 56a0203a3..c81cdb12f 100644 --- a/src/output/httpd_client.h +++ b/src/output/httpd_client.h @@ -54,7 +54,7 @@ httpd_client_queue_size(const struct httpd_client *client); * Clears the page queue. */ void -httpd_client_cancel(const struct httpd_client *client); +httpd_client_cancel(struct httpd_client *client); /** * Appends a page to the client's queue. |