diff -ur curl-7.19.3-20081209.orig/lib/multi.c curl-7.19.3-20081209.fix/lib/multi.c
--- curl-7.19.3-20081209.orig/lib/multi.c	2008-12-04 05:00:04.000000000 +0200
+++ curl-7.19.3-20081209.fix/lib/multi.c	2008-12-09 09:58:10.728221000 +0200
@@ -1662,6 +1662,8 @@
   curl_socket_t s;
   int num;
   unsigned int curraction;
+  struct Curl_one_easy *easy_by_hash;
+  bool remove;
 
   memset(&socks, 0, sizeof(socks));
   for(i=0; i< MAX_SOCKSPEREASYHANDLE; i++)
@@ -1730,12 +1732,39 @@
     }
     if(s != CURL_SOCKET_BAD) {
       /* this socket has been removed. Remove it */
+      remove = TRUE;
 
       entry = Curl_hash_pick(multi->sockhash, (char *)&s, sizeof(s));
       if(entry) {
+
+        /* check if the socket to be removed serves the connection which has
+           other easy-s in pipelines. In this case the socket should not be
+           removed. */
+        easy_by_hash = entry->easy->multi_pos;
+        if(easy_by_hash->easy_conn) {
+           if (easy_by_hash->easy_conn->recv_pipe  &&
+               easy_by_hash->easy_conn->recv_pipe->size > 0  &&
+               !isHandleAtHead(easy->easy_handle, easy_by_hash->easy_conn->recv_pipe)) {
+
+             remove = FALSE;
+             entry->easy = easy_by_hash->easy_conn->recv_pipe->head->ptr;
+           }
+           if (easy_by_hash->easy_conn->send_pipe  &&
+               easy_by_hash->easy_conn->send_pipe->size > 0  &&
+               !isHandleAtHead(easy->easy_handle, easy_by_hash->easy_conn->send_pipe)) {
+
+             remove = FALSE;
+             entry->easy = easy_by_hash->easy_conn->send_pipe->head->ptr;
+           }
+        }
+      }
+      else
         /* just a precaution, this socket really SHOULD be in the hash already
            but in case it isn't, we don't have to tell the app to remove it
            either since it never got to know about it */
+        remove = FALSE;
+
+      if (remove == TRUE) {
         multi->socket_cb(easy->easy_handle,
                          s,
                          CURL_POLL_REMOVE,
@@ -1744,6 +1773,7 @@
 
         sh_delentry(multi->sockhash, s);
       }
+
     }
   }
 
