gnunet-svn
[Top][All Lists]
Advanced

[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]

[GNUnet-SVN] [gnurl] 97/125: easy: fix connection ownership in curl_easy


From: gnunet
Subject: [GNUnet-SVN] [gnurl] 97/125: easy: fix connection ownership in curl_easy_pause
Date: Sun, 21 Jan 2018 23:42:32 +0100

This is an automated email from the git hooks/post-receive script.

ng0 pushed a commit to branch master
in repository gnurl.

commit 2a6dbb8155d3e96640d74f56a3be5cd557c33769
Author: Basuke Suzuki <address@hidden>
AuthorDate: Fri Jan 5 15:39:07 2018 -0800

    easy: fix connection ownership in curl_easy_pause
    
    Before calling Curl_client_chop_write(), change the owner of connection
    to the current Curl_easy handle. This will fix the issue #2217.
    
    Fixes https://github.com/curl/curl/issues/2217
    Closes https://github.com/curl/curl/pull/2221
---
 lib/easy.c | 15 ++++++++++++++-
 1 file changed, 14 insertions(+), 1 deletion(-)

diff --git a/lib/easy.c b/lib/easy.c
index 75f332b07..d34887913 100644
--- a/lib/easy.c
+++ b/lib/easy.c
@@ -1045,6 +1045,8 @@ CURLcode curl_easy_pause(struct Curl_easy *data, int 
action)
     unsigned int i;
     unsigned int count = data->state.tempcount;
     struct tempbuf writebuf[3]; /* there can only be three */
+    struct connectdata *conn = data->easy_conn;
+    struct Curl_easy *saved_data = NULL;
 
     /* copy the structs to allow for immediate re-pausing */
     for(i = 0; i < data->state.tempcount; i++) {
@@ -1053,16 +1055,27 @@ CURLcode curl_easy_pause(struct Curl_easy *data, int 
action)
     }
     data->state.tempcount = 0;
 
+    /* set the connection's current owner */
+    if(conn->data != data) {
+      saved_data = conn->data;
+      conn->data = data;
+    }
+
     for(i = 0; i < count; i++) {
       /* even if one function returns error, this loops through and frees all
          buffers */
       if(!result)
-        result = Curl_client_chop_write(data->easy_conn,
+        result = Curl_client_chop_write(conn,
                                         writebuf[i].type,
                                         writebuf[i].buf,
                                         writebuf[i].len);
       free(writebuf[i].buf);
     }
+
+    /* recover previous owner of the connection */
+    if(saved_data)
+      conn->data = saved_data;
+
     if(result)
       return result;
   }

-- 
To stop receiving notification emails like this one, please contact
address@hidden



reply via email to

[Prev in Thread] Current Thread [Next in Thread]