]> git.ipfire.org Git - thirdparty/curl.git/commitdiff
pause: force-drain the transfer on unpause
authorDaniel Stenberg <daniel@haxx.se>
Fri, 28 Feb 2020 22:55:05 +0000 (23:55 +0100)
committerDaniel Stenberg <daniel@haxx.se>
Sat, 29 Feb 2020 09:53:09 +0000 (10:53 +0100)
... since the socket might not actually be readable anymore when for
example the data is already buffered in the TLS layer.

Fixes #4966
Reported-by: Anders Berg
Closes #5000

lib/easy.c
lib/transfer.c

index 454621076ab2bc015f53177c6b361d0f59f24c36..1a6912748e80a4c786310d957e9965b1c46d8984 100644 (file)
@@ -1033,6 +1033,7 @@ CURLcode curl_easy_pause(struct Curl_easy *data, int action)
      to have this handle checked soon */
   if((newstate & (KEEP_RECV_PAUSE|KEEP_SEND_PAUSE)) !=
      (KEEP_RECV_PAUSE|KEEP_SEND_PAUSE)) {
+    data->state.drain++;
     Curl_expire(data, 0, EXPIRE_RUN_NOW); /* get this handle going again */
     if(data->multi)
       Curl_update_timer(data->multi);
index ead8b36db9bd1700425271b451322c541b312faa..827076183fcc9005f26468aa140524b244796dd1 100644 (file)
@@ -5,7 +5,7 @@
  *                            | (__| |_| |  _ <| |___
  *                             \___|\___/|_| \_\_____|
  *
- * Copyright (C) 1998 - 2019, Daniel Stenberg, <daniel@haxx.se>, et al.
+ * Copyright (C) 1998 - 2020, Daniel Stenberg, <daniel@haxx.se>, et al.
  *
  * This software is licensed as described in the file COPYING, which
  * you should have received as part of this distribution. The terms
@@ -1217,7 +1217,8 @@ CURLcode Curl_readwrite(struct connectdata *conn,
   else
     fd_write = CURL_SOCKET_BAD;
 
-  if(conn->data->state.drain) {
+  if(data->state.drain) {
+    data->state.drain--;
     select_res |= CURL_CSELECT_IN;
     DEBUGF(infof(data, "Curl_readwrite: forcibly told to drain data\n"));
   }