From f7dfe2b87a3c79be41ab4e17764675f36dca3670 Mon Sep 17 00:00:00 2001 From: Yang Tse Date: Tue, 1 Nov 2011 14:38:21 +0100 Subject: [PATCH] multi.c: OOM handling fix --- lib/multi.c | 10 ++++++++-- 1 file changed, 8 insertions(+), 2 deletions(-) diff --git a/lib/multi.c b/lib/multi.c index 63aac69..ae70851 100644 --- a/lib/multi.c +++ b/lib/multi.c @@ -514,6 +514,9 @@ CURLMcode curl_multi_add_handle(CURLM *multi_handle, prev->next = next; else multi->closure = next; + /* removed from closure list now, this might reuse an existing + existing connection but we don't know that at this point */ + data->state.shared_conn = NULL; /* No need to continue, handle can only be present once in the list */ break; } @@ -1788,7 +1791,7 @@ CURLMcode curl_multi_cleanup(CURLM *multi_handle) able to close connections "properly" */ cl = multi->closure; while(cl) { - cl->easy_handle->state.shared_conn = NULL; /* no more shared */ + cl->easy_handle->state.shared_conn = NULL; /* allow cleanup */ if(cl->easy_handle->state.closed) /* close handle only if curl_easy_cleanup() already has been called for this easy handle */ @@ -2708,12 +2711,15 @@ static void multi_connc_remove_handle(struct Curl_multi *multi, /* out of memory - so much for graceful shutdown */ Curl_disconnect(conn, /* dead_connection */ FALSE); multi->connc->connects[i] = NULL; + data->state.shared_conn = NULL; } } - else + else { /* disconect the easy handle from the connection since the connection will now remain but this easy handle is going */ + data->state.shared_conn = NULL; conn->data = NULL; + } } } } -- 2.7.4