Index: easy.c
===================================================================
RCS file: /cvsroot/curl/curl/lib/easy.c,v
retrieving revision 1.124
diff -u -r1.124 easy.c
--- easy.c	5 Sep 2008 09:37:37 -0000	1.124
+++ easy.c	5 Sep 2008 12:07:56 -0000
@@ -846,9 +846,16 @@
 
       result = Curl_client_write(data->state.current_conn,
                                  temptype, tempwrite, chunklen);
-      if(result)
+      if(result) {
+        if (result == CURLE_WRITE_ERROR) {
+          /* Remember write callback error and ignore it for now. Error will
+             be detected in multi_runsingle later. */
+          data->state.pauseerror = CURLE_WRITE_ERROR;
+          result = CURLE_OK;
+        }
         /* failures abort the loop at once */
         break;
+      }
 
       if(data->state.tempwrite && (tempsize - chunklen)) {
         /* Ouch, the reading is again paused and the block we send is now
Index: multi.c
===================================================================
RCS file: /cvsroot/curl/curl/lib/multi.c,v
retrieving revision 1.176
diff -u -r1.176 multi.c
--- multi.c	23 Aug 2008 12:11:38 -0000	1.176
+++ multi.c	5 Sep 2008 12:10:44 -0000
@@ -1261,8 +1261,15 @@
         break;
       }
 
-      /* read/write data if it is ready to do so */
-      easy->result = Curl_readwrite(easy->easy_conn, &done);
+      /* check if error appeared previously at curl_easy_pause */
+      if (easy->easy_handle->state.pauseerror) {
+        /* use stored error */
+        easy->result = easy->easy_handle->state.pauseerror;
+      }
+      else {
+        /* read/write data if it is ready to do so */
+        easy->result = Curl_readwrite(easy->easy_conn, &done);
+      }
 
       k = &easy->easy_handle->req;
 
Index: urldata.h
===================================================================
RCS file: /cvsroot/curl/curl/lib/urldata.h,v
retrieving revision 1.386
diff -u -r1.386 urldata.h
--- urldata.h	4 Sep 2008 19:43:38 -0000	1.386
+++ urldata.h	5 Sep 2008 11:29:20 -0000
@@ -1174,6 +1174,9 @@
   size_t tempwritesize; /* size of the 'tempwrite' allocated buffer */
   int tempwritetype;    /* type of the 'tempwrite' buffer as a bitmask that is
                            used with Curl_client_write() */
+  CURLcode pauseerror;  /* error code storage to remember errors appeared on
+                           curl_easy_pause, which should be revealed later on
+                           curl_mutli_perform */
   char *scratch; /* huge buffer[BUFSIZE*2] when doing upload CRLF replacing */
   bool errorbuf; /* Set to TRUE if the error buffer is already filled in.
                     This must be set to FALSE every time _easy_perform() is

