Account for new evhttp behaviour on failed incoming connections

The evcon associated with a request is freed by evhttp when the connection
fails. Protect against a NULL evcon when handling the connection failure.
This commit is contained in:
Julien BLACHE 2010-07-23 18:15:18 +02:00
parent e396906fee
commit 81d09ed234
3 changed files with 12 additions and 5 deletions

View File

@ -129,7 +129,8 @@ static pthread_t tid_httpd;
static void
stream_end(struct stream_ctx *st, int failed)
{
evhttp_connection_set_closecb(st->req->evcon, NULL, NULL);
if (st->req->evcon)
evhttp_connection_set_closecb(st->req->evcon, NULL, NULL);
if (!failed)
evhttp_send_reply_end(st->req);

View File

@ -647,7 +647,8 @@ update_fail_cb(struct evhttp_connection *evcon, void *arg)
DPRINTF(E_DBG, L_DAAP, "Update request: client closed connection\n");
evhttp_connection_set_closecb(ur->req->evcon, NULL, NULL);
if (ur->req->evcon)
evhttp_connection_set_closecb(ur->req->evcon, NULL, NULL);
if (ur == update_requests)
update_requests = ur->next;
@ -2873,7 +2874,9 @@ daap_deinit(void)
{
update_requests = ur->next;
evhttp_connection_set_closecb(ur->req->evcon, NULL, NULL);
if (ur->req->evcon)
evhttp_connection_set_closecb(ur->req->evcon, NULL, NULL);
free(ur);
}
}

View File

@ -351,7 +351,8 @@ update_fail_cb(struct evhttp_connection *evcon, void *arg)
DPRINTF(E_DBG, L_DACP, "Update request: client closed connection\n");
evhttp_connection_set_closecb(ur->req->evcon, NULL, NULL);
if (ur->req->evcon)
evhttp_connection_set_closecb(ur->req->evcon, NULL, NULL);
if (ur == update_requests)
update_requests = ur->next;
@ -1703,7 +1704,9 @@ dacp_deinit(void)
{
update_requests = ur->next;
evhttp_connection_set_closecb(ur->req->evcon, NULL, NULL);
if (ur->req->evcon)
evhttp_connection_set_closecb(ur->req->evcon, NULL, NULL);
free(ur);
}