diff options
author | Christian Grothoff <christian@grothoff.org> | 2011-09-26 19:25:25 +0000 |
---|---|---|
committer | Christian Grothoff <christian@grothoff.org> | 2011-09-26 19:25:25 +0000 |
commit | 10117d2445996b5b7bcff08393bd07639999e32a (patch) | |
tree | 0cbd35b7d70aa91e401891e5d3ca02c8793a1ddf | |
parent | 7c9073a4c961a23cfaadc2666ffba774c727a847 (diff) | |
download | libmicrohttpd-10117d2445996b5b7bcff08393bd07639999e32a.tar.gz libmicrohttpd-10117d2445996b5b7bcff08393bd07639999e32a.zip |
make sure to clean up response ASAP
-rw-r--r-- | src/daemon/daemon.c | 14 |
1 files changed, 8 insertions, 6 deletions
diff --git a/src/daemon/daemon.c b/src/daemon/daemon.c index 632db289..1c09bbe6 100644 --- a/src/daemon/daemon.c +++ b/src/daemon/daemon.c | |||
@@ -623,9 +623,7 @@ MHD_handle_connection (void *data) | |||
623 | if (FD_ISSET (con->socket_fd, &ws)) | 623 | if (FD_ISSET (con->socket_fd, &ws)) |
624 | con->write_handler (con); | 624 | con->write_handler (con); |
625 | if (MHD_NO == con->idle_handler (con)) | 625 | if (MHD_NO == con->idle_handler (con)) |
626 | { | 626 | goto exit; |
627 | return NULL; | ||
628 | } | ||
629 | } | 627 | } |
630 | #ifdef HAVE_POLL_H | 628 | #ifdef HAVE_POLL_H |
631 | else | 629 | else |
@@ -660,9 +658,7 @@ MHD_handle_connection (void *data) | |||
660 | if (0 != (p[0].revents & (POLLERR | POLLHUP))) | 658 | if (0 != (p[0].revents & (POLLERR | POLLHUP))) |
661 | MHD_connection_close (con, MHD_REQUEST_TERMINATED_WITH_ERROR); | 659 | MHD_connection_close (con, MHD_REQUEST_TERMINATED_WITH_ERROR); |
662 | if (MHD_NO == con->idle_handler (con)) | 660 | if (MHD_NO == con->idle_handler (con)) |
663 | { | 661 | goto exit; |
664 | return NULL; /* "instant" termination, 'con' no longer valid! */ | ||
665 | } | ||
666 | } | 662 | } |
667 | #endif | 663 | #endif |
668 | } | 664 | } |
@@ -678,6 +674,12 @@ MHD_handle_connection (void *data) | |||
678 | MHD_connection_close (con, MHD_REQUEST_TERMINATED_DAEMON_SHUTDOWN); | 674 | MHD_connection_close (con, MHD_REQUEST_TERMINATED_DAEMON_SHUTDOWN); |
679 | con->idle_handler (con); | 675 | con->idle_handler (con); |
680 | } | 676 | } |
677 | exit: | ||
678 | if (con->response != NULL) | ||
679 | { | ||
680 | MHD_destroy_response (con->response); | ||
681 | con->response = NULL; | ||
682 | } | ||
681 | return NULL; | 683 | return NULL; |
682 | } | 684 | } |
683 | 685 | ||