Loading CHANGES +7 −2 Original line number Diff line number Diff line Loading @@ -6,9 +6,14 @@ Changelog Daniel (9 October 2006) - Bogdan Nicula's second test case (posted Sun, 08 Oct 2006) converted to test case 535 and it now runs fine. Again a problem with the pipelining code not taking all possible (error) conditions into account. Daniel (6 October 2006) - Bogdan Nicula's hanging test case was converted to test case 533 and the test now runs fine. - Bogdan Nicula's hanging test case (posted Wed, 04 Oct 2006) was converted to test case 533 and the test now runs fine. Daniel (4 October 2006) - Dmitriy Sergeyev provided an example source code that crashed CVS libcurl Loading lib/multi.c +7 −2 Original line number Diff line number Diff line Loading @@ -1081,9 +1081,14 @@ static CURLMcode multi_runsingle(struct Curl_multi *multi, break; case CURLM_STATE_WAITPERFORM: infof(easy->easy_handle, "Connection #%d: recv pipe size = %d\n", #ifdef CURLDEBUG infof(easy->easy_handle, "Conn %d recv pipe %d inuse %d athead %d\n", easy->easy_conn->connectindex, easy->easy_conn->recv_pipe->size); easy->easy_conn->recv_pipe->size, easy->easy_conn->readchannel_inuse, Curl_isHandleAtHead(easy->easy_handle, easy->easy_conn->recv_pipe)); #endif /* Wait for our turn to PERFORM */ if (!easy->easy_conn->readchannel_inuse && Curl_isHandleAtHead(easy->easy_handle, Loading lib/url.c +10 −3 Original line number Diff line number Diff line Loading @@ -1840,7 +1840,7 @@ void Curl_addHandleToPipeline(struct SessionHandle *data, } void Curl_removeHandleFromPipeline(struct SessionHandle *handle, int Curl_removeHandleFromPipeline(struct SessionHandle *handle, struct curl_llist *pipe) { struct curl_llist_element *curr; Loading @@ -1849,10 +1849,11 @@ void Curl_removeHandleFromPipeline(struct SessionHandle *handle, while (curr) { if (curr->ptr == handle) { Curl_llist_remove(pipe, curr, NULL); break; return 1; /* we removed a handle */ } curr = curr->next; } return 0; } #if 0 Loading Loading @@ -3975,8 +3976,14 @@ CURLcode Curl_done(struct connectdata **connp, conn->bits.done = TRUE; /* called just now! */ /* cleanups done even if the connection is re-used */ if(Curl_removeHandleFromPipeline(data, conn->recv_pipe) && conn->readchannel_inuse) conn->readchannel_inuse--; if(Curl_removeHandleFromPipeline(data, conn->send_pipe) && conn->writechannel_inuse) conn->writechannel_inuse--; /* cleanups done even if the connection is re-used */ if(data->reqdata.rangestringalloc) { free(data->reqdata.range); data->reqdata.rangestringalloc = FALSE; Loading lib/url.h +2 −2 Original line number Diff line number Diff line Loading @@ -64,7 +64,7 @@ int Curl_doing_getsock(struct connectdata *conn, void Curl_addHandleToPipeline(struct SessionHandle *handle, struct curl_llist *pipe); void Curl_removeHandleFromPipeline(struct SessionHandle *handle, int Curl_removeHandleFromPipeline(struct SessionHandle *handle, struct curl_llist *pipe); bool Curl_isHandleAtHead(struct SessionHandle *handle, struct curl_llist *pipe); Loading tests/data/Makefile.am +1 −1 Original line number Diff line number Diff line Loading @@ -36,4 +36,4 @@ EXTRA_DIST = test1 test108 test117 test127 test20 test27 test34 test46 \ test265 test266 test267 test268 test269 test270 test271 test272 test273 \ test274 test275 test524 test525 test276 test277 test526 test527 test528 \ test530 DISABLED test278 test279 test531 test280 test529 test532 test533 \ test534 test534 test535 Loading
CHANGES +7 −2 Original line number Diff line number Diff line Loading @@ -6,9 +6,14 @@ Changelog Daniel (9 October 2006) - Bogdan Nicula's second test case (posted Sun, 08 Oct 2006) converted to test case 535 and it now runs fine. Again a problem with the pipelining code not taking all possible (error) conditions into account. Daniel (6 October 2006) - Bogdan Nicula's hanging test case was converted to test case 533 and the test now runs fine. - Bogdan Nicula's hanging test case (posted Wed, 04 Oct 2006) was converted to test case 533 and the test now runs fine. Daniel (4 October 2006) - Dmitriy Sergeyev provided an example source code that crashed CVS libcurl Loading
lib/multi.c +7 −2 Original line number Diff line number Diff line Loading @@ -1081,9 +1081,14 @@ static CURLMcode multi_runsingle(struct Curl_multi *multi, break; case CURLM_STATE_WAITPERFORM: infof(easy->easy_handle, "Connection #%d: recv pipe size = %d\n", #ifdef CURLDEBUG infof(easy->easy_handle, "Conn %d recv pipe %d inuse %d athead %d\n", easy->easy_conn->connectindex, easy->easy_conn->recv_pipe->size); easy->easy_conn->recv_pipe->size, easy->easy_conn->readchannel_inuse, Curl_isHandleAtHead(easy->easy_handle, easy->easy_conn->recv_pipe)); #endif /* Wait for our turn to PERFORM */ if (!easy->easy_conn->readchannel_inuse && Curl_isHandleAtHead(easy->easy_handle, Loading
lib/url.c +10 −3 Original line number Diff line number Diff line Loading @@ -1840,7 +1840,7 @@ void Curl_addHandleToPipeline(struct SessionHandle *data, } void Curl_removeHandleFromPipeline(struct SessionHandle *handle, int Curl_removeHandleFromPipeline(struct SessionHandle *handle, struct curl_llist *pipe) { struct curl_llist_element *curr; Loading @@ -1849,10 +1849,11 @@ void Curl_removeHandleFromPipeline(struct SessionHandle *handle, while (curr) { if (curr->ptr == handle) { Curl_llist_remove(pipe, curr, NULL); break; return 1; /* we removed a handle */ } curr = curr->next; } return 0; } #if 0 Loading Loading @@ -3975,8 +3976,14 @@ CURLcode Curl_done(struct connectdata **connp, conn->bits.done = TRUE; /* called just now! */ /* cleanups done even if the connection is re-used */ if(Curl_removeHandleFromPipeline(data, conn->recv_pipe) && conn->readchannel_inuse) conn->readchannel_inuse--; if(Curl_removeHandleFromPipeline(data, conn->send_pipe) && conn->writechannel_inuse) conn->writechannel_inuse--; /* cleanups done even if the connection is re-used */ if(data->reqdata.rangestringalloc) { free(data->reqdata.range); data->reqdata.rangestringalloc = FALSE; Loading
lib/url.h +2 −2 Original line number Diff line number Diff line Loading @@ -64,7 +64,7 @@ int Curl_doing_getsock(struct connectdata *conn, void Curl_addHandleToPipeline(struct SessionHandle *handle, struct curl_llist *pipe); void Curl_removeHandleFromPipeline(struct SessionHandle *handle, int Curl_removeHandleFromPipeline(struct SessionHandle *handle, struct curl_llist *pipe); bool Curl_isHandleAtHead(struct SessionHandle *handle, struct curl_llist *pipe); Loading
tests/data/Makefile.am +1 −1 Original line number Diff line number Diff line Loading @@ -36,4 +36,4 @@ EXTRA_DIST = test1 test108 test117 test127 test20 test27 test34 test46 \ test265 test266 test267 test268 test269 test270 test271 test272 test273 \ test274 test275 test524 test525 test276 test277 test526 test527 test528 \ test530 DISABLED test278 test279 test531 test280 test529 test532 test533 \ test534 test534 test535