mirror of
https://github.com/curl/curl.git
synced 2026-06-01 23:04:15 +03:00
multi_done: if multiplexed, make conn->data point to another transfer
... since the current transfer is being killed. Setting to NULL is wrong, leaving it pointing to 'data' is wrong since that handle might be about to get freed. Fixes #4845 Closes #4858 Reported-by: dmitrmax on github
This commit is contained in:
parent
8b7fff3311
commit
db9af34634
2 changed files with 5 additions and 0 deletions
|
|
@ -592,6 +592,9 @@ static CURLcode multi_done(struct Curl_easy *data,
|
|||
detach_connnection(data);
|
||||
if(CONN_INUSE(conn)) {
|
||||
/* Stop if still used. */
|
||||
/* conn->data must not remain pointing to this transfer since it is going
|
||||
away! Find another to own it! */
|
||||
conn->data = conn->easyq.head->ptr;
|
||||
CONN_UNLOCK(data);
|
||||
DEBUGF(infof(data, "Connection still in use %zu, "
|
||||
"no more multi_done now!\n",
|
||||
|
|
|
|||
|
|
@ -1213,6 +1213,8 @@ ConnectionExists(struct Curl_easy *data,
|
|||
}
|
||||
}
|
||||
|
||||
DEBUGASSERT(!check->data || GOOD_EASY_HANDLE(check->data));
|
||||
|
||||
if(!canmultiplex && check->data)
|
||||
/* this request can't be multiplexed but the checked connection is
|
||||
already in use so we skip it */
|
||||
|
|
|
|||
Loading…
Add table
Add a link
Reference in a new issue