- David James brought a patch that make libcurl close (all) dead connections
whenever you attempt to open a new connection.
This commit is contained in:
32
lib/url.c
32
lib/url.c
@@ -2565,6 +2565,22 @@ ConnectionExists(struct SessionHandle *data,
|
||||
from the multi */
|
||||
}
|
||||
|
||||
if(!pipeLen && !check->inuse) {
|
||||
/* The check for a dead socket makes sense only if there are no
|
||||
handles in pipeline and the connection isn't already marked in
|
||||
use */
|
||||
bool dead = SocketIsDead(check->sock[FIRSTSOCKET]);
|
||||
if(dead) {
|
||||
check->data = data;
|
||||
infof(data, "Connection #%d seems to be dead!\n", i);
|
||||
|
||||
Curl_disconnect(check); /* disconnect resources */
|
||||
data->state.connc->connects[i]=NULL; /* nothing here */
|
||||
|
||||
continue;
|
||||
}
|
||||
}
|
||||
|
||||
if(canPipeline) {
|
||||
/* Make sure the pipe has only GET requests */
|
||||
struct SessionHandle* sh = gethandleathead(check->send_pipe);
|
||||
@@ -2688,22 +2704,6 @@ ConnectionExists(struct SessionHandle *data,
|
||||
}
|
||||
|
||||
if(match) {
|
||||
if(!pipeLen && !check->inuse) {
|
||||
/* The check for a dead socket makes sense only if there are no
|
||||
handles in pipeline and the connection isn't already marked in
|
||||
use */
|
||||
bool dead = SocketIsDead(check->sock[FIRSTSOCKET]);
|
||||
if(dead) {
|
||||
check->data = data;
|
||||
infof(data, "Connection #%d seems to be dead!\n", i);
|
||||
|
||||
Curl_disconnect(check); /* disconnect resources */
|
||||
data->state.connc->connects[i]=NULL; /* nothing here */
|
||||
|
||||
return FALSE;
|
||||
}
|
||||
}
|
||||
|
||||
check->inuse = TRUE; /* mark this as being in use so that no other
|
||||
handle in a multi stack may nick it */
|
||||
|
||||
|
Reference in New Issue
Block a user