diff -rN -U20 ../curl-7.19.1-20080905.orig/lib/multi.c ./lib/multi.c
--- ../curl-7.19.1-20080905.orig/lib/multi.c	2008-09-05 15:38:30.000000000 +0400
+++ ./lib/multi.c	2008-09-05 15:42:02.000000000 +0400
@@ -1971,57 +1971,58 @@
 
   if(!Curl_isPipeliningEnabled(handle) ||
      pipeLen == 0)
     pipeline = conn->send_pipe;
   else {
     if(conn->server_supports_pipelining &&
        pipeLen < MAX_PIPELINE_LENGTH)
       pipeline = conn->send_pipe;
     else
       pipeline = conn->pend_pipe;
   }
 
   return Curl_addHandleToPipeline(handle, pipeline);
 }
 
 static int checkPendPipeline(struct connectdata *conn)
 {
   int result = 0;
   struct curl_llist_element *sendhead = conn->send_pipe->head;
 
-  if (conn->server_supports_pipelining) {
-    size_t pipeLen = conn->send_pipe->size + conn->recv_pipe->size;
+  size_t pipeLen = conn->send_pipe->size + conn->recv_pipe->size;
+  if (conn->server_supports_pipelining || pipeLen == 0) {
     struct curl_llist_element *curr = conn->pend_pipe->head;
+    const size_t maxPipeLen =
+      conn->server_supports_pipelining ? MAX_PIPELINE_LENGTH : 1;
 
-    while(pipeLen < MAX_PIPELINE_LENGTH && curr) {
+    while(pipeLen < maxPipeLen && curr) {
       Curl_llist_move(conn->pend_pipe, curr,
                       conn->send_pipe, conn->send_pipe->tail);
       Curl_pgrsTime(curr->ptr, TIMER_PRETRANSFER);
       ++result; /* count how many handles we moved */
       curr = conn->pend_pipe->head;
       ++pipeLen;
     }
-    if (result > 0)
-      conn->now = Curl_tvnow();
   }
 
-  if(result) {
+  if (result) {
+    conn->now = Curl_tvnow();
     /* something moved, check for a new send pipeline leader */
     if(sendhead != conn->send_pipe->head) {
       /* this is a new one as head, expire it */
       conn->writechannel_inuse = FALSE; /* not in use yet */
       infof(conn->data, "%p is at send pipe head!\n",
             conn->send_pipe->head->ptr);
       Curl_expire(conn->send_pipe->head->ptr, 1);
     }
   }
 
   return result;
 }
 
 /* Move this transfer from the sending list to the receiving list.
 
    Pay special attention to the new sending list "leader" as it needs to get
    checked to update what sockets it acts on.
 
  */
 static void moveHandleFromSendToRecvPipeline(struct SessionHandle *handle,
