Loading CHANGES +7 −2 Original line number Original line Diff line number Diff line Loading @@ -6,9 +6,14 @@ Changelog 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) Daniel (6 October 2006) - Bogdan Nicula's hanging test case was converted to test case 533 and the test - Bogdan Nicula's hanging test case (posted Wed, 04 Oct 2006) was converted to now runs fine. test case 533 and the test now runs fine. Daniel (4 October 2006) Daniel (4 October 2006) - Dmitriy Sergeyev provided an example source code that crashed CVS libcurl - Dmitriy Sergeyev provided an example source code that crashed CVS libcurl Loading lib/multi.c +7 −2 Original line number Original line Diff line number Diff line Loading @@ -1081,9 +1081,14 @@ static CURLMcode multi_runsingle(struct Curl_multi *multi, break; break; case CURLM_STATE_WAITPERFORM: 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->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 */ /* Wait for our turn to PERFORM */ if (!easy->easy_conn->readchannel_inuse && if (!easy->easy_conn->readchannel_inuse && Curl_isHandleAtHead(easy->easy_handle, Curl_isHandleAtHead(easy->easy_handle, Loading lib/url.c +10 −3 Original line number Original line 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 *pipe) { { struct curl_llist_element *curr; struct curl_llist_element *curr; Loading @@ -1849,10 +1849,11 @@ void Curl_removeHandleFromPipeline(struct SessionHandle *handle, while (curr) { while (curr) { if (curr->ptr == handle) { if (curr->ptr == handle) { Curl_llist_remove(pipe, curr, NULL); Curl_llist_remove(pipe, curr, NULL); break; return 1; /* we removed a handle */ } } curr = curr->next; curr = curr->next; } } return 0; } } #if 0 #if 0 Loading Loading @@ -3975,8 +3976,14 @@ CURLcode Curl_done(struct connectdata **connp, conn->bits.done = TRUE; /* called just now! */ 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) { if(data->reqdata.rangestringalloc) { free(data->reqdata.range); free(data->reqdata.range); data->reqdata.rangestringalloc = FALSE; data->reqdata.rangestringalloc = FALSE; Loading lib/url.h +2 −2 Original line number Original line Diff line number Diff line Loading @@ -64,7 +64,7 @@ int Curl_doing_getsock(struct connectdata *conn, void Curl_addHandleToPipeline(struct SessionHandle *handle, void Curl_addHandleToPipeline(struct SessionHandle *handle, struct curl_llist *pipe); struct curl_llist *pipe); void Curl_removeHandleFromPipeline(struct SessionHandle *handle, int Curl_removeHandleFromPipeline(struct SessionHandle *handle, struct curl_llist *pipe); struct curl_llist *pipe); bool Curl_isHandleAtHead(struct SessionHandle *handle, bool Curl_isHandleAtHead(struct SessionHandle *handle, struct curl_llist *pipe); struct curl_llist *pipe); Loading tests/data/Makefile.am +1 −1 Original line number Original line 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 \ test265 test266 test267 test268 test269 test270 test271 test272 test273 \ test274 test275 test524 test525 test276 test277 test526 test527 test528 \ test274 test275 test524 test525 test276 test277 test526 test527 test528 \ test530 DISABLED test278 test279 test531 test280 test529 test532 test533 \ test530 DISABLED test278 test279 test531 test280 test529 test532 test533 \ test534 test534 test535 Loading
CHANGES +7 −2 Original line number Original line Diff line number Diff line Loading @@ -6,9 +6,14 @@ Changelog 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) Daniel (6 October 2006) - Bogdan Nicula's hanging test case was converted to test case 533 and the test - Bogdan Nicula's hanging test case (posted Wed, 04 Oct 2006) was converted to now runs fine. test case 533 and the test now runs fine. Daniel (4 October 2006) Daniel (4 October 2006) - Dmitriy Sergeyev provided an example source code that crashed CVS libcurl - Dmitriy Sergeyev provided an example source code that crashed CVS libcurl Loading
lib/multi.c +7 −2 Original line number Original line Diff line number Diff line Loading @@ -1081,9 +1081,14 @@ static CURLMcode multi_runsingle(struct Curl_multi *multi, break; break; case CURLM_STATE_WAITPERFORM: 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->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 */ /* Wait for our turn to PERFORM */ if (!easy->easy_conn->readchannel_inuse && if (!easy->easy_conn->readchannel_inuse && Curl_isHandleAtHead(easy->easy_handle, Curl_isHandleAtHead(easy->easy_handle, Loading
lib/url.c +10 −3 Original line number Original line 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 *pipe) { { struct curl_llist_element *curr; struct curl_llist_element *curr; Loading @@ -1849,10 +1849,11 @@ void Curl_removeHandleFromPipeline(struct SessionHandle *handle, while (curr) { while (curr) { if (curr->ptr == handle) { if (curr->ptr == handle) { Curl_llist_remove(pipe, curr, NULL); Curl_llist_remove(pipe, curr, NULL); break; return 1; /* we removed a handle */ } } curr = curr->next; curr = curr->next; } } return 0; } } #if 0 #if 0 Loading Loading @@ -3975,8 +3976,14 @@ CURLcode Curl_done(struct connectdata **connp, conn->bits.done = TRUE; /* called just now! */ 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) { if(data->reqdata.rangestringalloc) { free(data->reqdata.range); free(data->reqdata.range); data->reqdata.rangestringalloc = FALSE; data->reqdata.rangestringalloc = FALSE; Loading
lib/url.h +2 −2 Original line number Original line Diff line number Diff line Loading @@ -64,7 +64,7 @@ int Curl_doing_getsock(struct connectdata *conn, void Curl_addHandleToPipeline(struct SessionHandle *handle, void Curl_addHandleToPipeline(struct SessionHandle *handle, struct curl_llist *pipe); struct curl_llist *pipe); void Curl_removeHandleFromPipeline(struct SessionHandle *handle, int Curl_removeHandleFromPipeline(struct SessionHandle *handle, struct curl_llist *pipe); struct curl_llist *pipe); bool Curl_isHandleAtHead(struct SessionHandle *handle, bool Curl_isHandleAtHead(struct SessionHandle *handle, struct curl_llist *pipe); struct curl_llist *pipe); Loading
tests/data/Makefile.am +1 −1 Original line number Original line 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 \ test265 test266 test267 test268 test269 test270 test271 test272 test273 \ test274 test275 test524 test525 test276 test277 test526 test527 test528 \ test274 test275 test524 test525 test276 test277 test526 test527 test528 \ test530 DISABLED test278 test279 test531 test280 test529 test532 test533 \ test530 DISABLED test278 test279 test531 test280 test529 test532 test533 \ test534 test534 test535