diff options
author | Yang Tse <yangsita@gmail.com> | 2011-11-01 14:38:21 +0100 |
---|---|---|
committer | Yang Tse <yangsita@gmail.com> | 2011-11-01 14:38:21 +0100 |
commit | f7dfe2b87a3c79be41ab4e17764675f36dca3670 (patch) | |
tree | 642aec9ba0d49b33d608cbaa916e1ceb038233ce | |
parent | af425efe833b0b0fd6e8d85954d18bbe9c940401 (diff) |
multi.c: OOM handling fix
-rw-r--r-- | lib/multi.c | 10 |
1 files changed, 8 insertions, 2 deletions
diff --git a/lib/multi.c b/lib/multi.c index 63aac69fa..ae708510a 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; + } } } } |