aboutsummaryrefslogtreecommitdiff
path: root/lib/multi.c
diff options
context:
space:
mode:
authorDan Fandrich <dan@coneharvesters.com>2007-05-02 19:13:56 +0000
committerDan Fandrich <dan@coneharvesters.com>2007-05-02 19:13:56 +0000
commit9f72db13c4608d57e8232f355e5b96335d2035f6 (patch)
treede9ff4e3178298dfa9aa8ae42760fd79135ed2f4 /lib/multi.c
parentacc4868b78c6fa0c4d2aba6a4155d2a11fb173ee (diff)
Fixed an out of memory handling issue with HTTP pipelines.
Diffstat (limited to 'lib/multi.c')
-rw-r--r--lib/multi.c53
1 files changed, 27 insertions, 26 deletions
diff --git a/lib/multi.c b/lib/multi.c
index 4b42981e8..c61958ea4 100644
--- a/lib/multi.c
+++ b/lib/multi.c
@@ -121,9 +121,9 @@ struct Curl_one_easy {
#define CURL_MULTI_HANDLE 0x000bab1e
#define GOOD_MULTI_HANDLE(x) \
- ((x)&&(((struct Curl_multi *)x)->type == CURL_MULTI_HANDLE))
+ ((x)&&(((struct Curl_multi *)(x))->type == CURL_MULTI_HANDLE))
#define GOOD_EASY_HANDLE(x) \
- (((struct SessionHandle *)x)->magic == CURLEASY_MAGIC_NUMBER)
+ (((struct SessionHandle *)(x))->magic == CURLEASY_MAGIC_NUMBER)
/* This is the struct known as CURLM on the outside */
struct Curl_multi {
@@ -180,7 +180,7 @@ static void add_closure(struct Curl_multi *multi,
static int update_timer(struct Curl_multi *multi);
#ifdef CURLDEBUG
-static const char *statename[]={
+static const char * const statename[]={
"INIT",
"CONNECT",
"WAITRESOLVE",
@@ -896,29 +896,30 @@ static CURLMcode multi_runsingle(struct Curl_multi *multi,
if(CURLE_OK == easy->result) {
/* Add this handle to the send pipeline */
- Curl_addHandleToPipeline(easy->easy_handle,
- easy->easy_conn->send_pipe);
-
- if(async)
- /* We're now waiting for an asynchronous name lookup */
- multistate(easy, CURLM_STATE_WAITRESOLVE);
- else {
- /* after the connect has been sent off, go WAITCONNECT unless the
- protocol connect is already done and we can go directly to
- WAITDO! */
- result = CURLM_CALL_MULTI_PERFORM;
-
- if(protocol_connect)
- multistate(easy, CURLM_STATE_WAITDO);
- else {
+ easy->result = Curl_addHandleToPipeline(easy->easy_handle,
+ easy->easy_conn->send_pipe);
+ if(CURLE_OK == easy->result) {
+ if(async)
+ /* We're now waiting for an asynchronous name lookup */
+ multistate(easy, CURLM_STATE_WAITRESOLVE);
+ else {
+ /* after the connect has been sent off, go WAITCONNECT unless the
+ protocol connect is already done and we can go directly to
+ WAITDO! */
+ result = CURLM_CALL_MULTI_PERFORM;
+
+ if(protocol_connect)
+ multistate(easy, CURLM_STATE_WAITDO);
+ else {
#ifndef CURL_DISABLE_HTTP
- if (easy->easy_conn->bits.tunnel_connecting)
- multistate(easy, CURLM_STATE_WAITPROXYCONNECT);
- else
+ if (easy->easy_conn->bits.tunnel_connecting)
+ multistate(easy, CURLM_STATE_WAITPROXYCONNECT);
+ else
#endif
- multistate(easy, CURLM_STATE_WAITCONNECT);
- }
- }
+ multistate(easy, CURLM_STATE_WAITCONNECT);
+ }
+ }
+ }
}
break;
@@ -1153,8 +1154,8 @@ static CURLMcode multi_runsingle(struct Curl_multi *multi,
Curl_removeHandleFromPipeline(easy->easy_handle,
easy->easy_conn->send_pipe);
/* Add ourselves to the recv pipeline */
- Curl_addHandleToPipeline(easy->easy_handle,
- easy->easy_conn->recv_pipe);
+ easy->result = Curl_addHandleToPipeline(easy->easy_handle,
+ easy->easy_conn->recv_pipe);
multistate(easy, CURLM_STATE_WAITPERFORM);
result = CURLM_CALL_MULTI_PERFORM;