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 static void
stream_end(struct stream_ctx *st, int failed) 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) if (!failed)
evhttp_send_reply_end(st->req); 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"); 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) if (ur == update_requests)
update_requests = ur->next; update_requests = ur->next;
@ -2873,7 +2874,9 @@ daap_deinit(void)
{ {
update_requests = ur->next; 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); 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"); 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) if (ur == update_requests)
update_requests = ur->next; update_requests = ur->next;
@ -1703,7 +1704,9 @@ dacp_deinit(void)
{ {
update_requests = ur->next; 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); free(ur);
} }