libmicrohttpd

HTTP/1.x server C library (MHD 1.x, stable)
Log | Files | Refs | Submodules | README | LICENSE

commit 959b2e8d5d7375353e12ef69cc3587be30cc88d3
parent 44de6eb7e1545ce7476fbfb5146474b47810d1aa
Author: Andrey Uzunov <andrey.uzunov@gmail.com>
Date:   Sun,  8 Sep 2013 11:48:01 +0000

mhd2spdy: memory leaks (cleaning up proxy structs) fixed now

Diffstat:
Msrc/examples/mhd2spdy_http.c | 14++++++++++----
Msrc/examples/mhd2spdy_spdy.c | 18+++++++++---------
Msrc/examples/mhd2spdy_structures.c | 2+-
3 files changed, 20 insertions(+), 14 deletions(-)

diff --git a/src/examples/mhd2spdy_http.c b/src/examples/mhd2spdy_http.c @@ -190,6 +190,8 @@ http_cb_request (void *cls, if(NULL == (proxy = au_malloc(sizeof(struct Proxy)))) { + free(http_uri->uri); + free(http_uri); PRINT_INFO("No memory"); return MHD_NO; } @@ -391,19 +393,23 @@ http_cb_request_completed (void *cls, if(MHD_REQUEST_TERMINATED_COMPLETED_OK != toe) { proxy->http_error = true; - if(proxy->stream_id > 0 && NULL != proxy->spdy_connection->session) + if(proxy->stream_id > 0 /*&& NULL != proxy->spdy_connection->session*/) { //send RST_STREAM_STATUS_CANCEL PRINT_INFO2("send rst_stream %i",proxy->spdy_active ); spdylay_submit_rst_stream(proxy->spdy_connection->session, proxy->stream_id, 5); } + /*else + { + DLL_remove(proxy->spdy_connection->proxies_head, proxy->spdy_connection->proxies_tail, proxy); + free_proxy(proxy); + }*/ } } else { - PRINT_INFO2("proxy free http id %i ", proxy->id); - //DLL_remove(proxy->spdy_connection->proxies_head, proxy->spdy_connection->proxies_tail, proxy); - //free_proxy(proxy); + PRINT_INFO2("proxy free http id %i ", proxy->id); + free_proxy(proxy); } --glob_opt.responses_pending; diff --git a/src/examples/mhd2spdy_spdy.c b/src/examples/mhd2spdy_spdy.c @@ -371,17 +371,15 @@ spdy_cb_on_stream_close(spdylay_session *session, --glob_opt.streams_opened; --proxy->spdy_connection->streams_opened; PRINT_INFO2("closing stream: str opened %i; remove proxy %i", glob_opt.streams_opened, proxy->id); - + + DLL_remove(proxy->spdy_connection->proxies_head, proxy->spdy_connection->proxies_tail, proxy); if(proxy->http_active) { proxy->spdy_active = false; - //DLL_remove(proxy->spdy_connection->proxies_head, proxy->spdy_connection->proxies_tail, proxy); } else { - PRINT_INFO2("proxy free close id %i ", proxy->id); - //DLL_remove(proxy->spdy_connection->proxies_head, proxy->spdy_connection->proxies_tail, proxy); - //free_proxy(proxy); + free_proxy(proxy); } } @@ -773,25 +771,27 @@ void spdy_free_connection(struct SPDY_Connection * connection) { struct Proxy *proxy; + struct Proxy *proxy_next; if(NULL != connection) { - for(proxy = connection->proxies_head; NULL != proxy; proxy=proxy->next) + for(proxy = connection->proxies_head; NULL != proxy; proxy=proxy_next) { + proxy_next = proxy->next; DLL_remove(connection->proxies_head, connection->proxies_tail, proxy); proxy->spdy_active = false; proxy->spdy_error = true; PRINT_INFO2("spdy_free_connection for id %i", proxy->id); if(!proxy->http_active) { - //free_proxy(proxy); + free_proxy(proxy); } } spdylay_session_del(connection->session); SSL_free(connection->ssl); free(connection->host); - //free(connection); - connection->session = NULL; + free(connection); + //connection->session = NULL; } } diff --git a/src/examples/mhd2spdy_structures.c b/src/examples/mhd2spdy_structures.c @@ -127,7 +127,7 @@ free_proxy(struct Proxy *proxy) free(proxy); } -//TODO remove this + void *au_malloc(size_t size) { void *new_memory;