Commit a1de9367 authored by Daniel Stenberg's avatar Daniel Stenberg
Browse files

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.
parent eceb37bd
Loading
Loading
Loading
Loading
+7 −2
Original line number Diff line number Diff line
@@ -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
+7 −2
Original line number Diff line number Diff line
@@ -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,
+10 −3
Original line number Diff line number Diff line
@@ -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;
@@ -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
@@ -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;
+2 −2
Original line number Diff line number Diff line
@@ -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);
+1 −1
Original line number Diff line number Diff line
@@ -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