- 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:
		
							
								
								
									
										11
									
								
								CHANGES
									
									
									
									
									
								
							
							
						
						
									
										11
									
								
								CHANGES
									
									
									
									
									
								
							| @@ -6,6 +6,17 @@ | |||||||
|  |  | ||||||
|                                   Changelog |                                   Changelog | ||||||
|  |  | ||||||
|  | Daniel Stenberg (3 Mar 2009) | ||||||
|  | - David James brought a patch that make libcurl close (all) dead connections | ||||||
|  |   whenever you attempt to open a new connection. | ||||||
|  |  | ||||||
|  |   1. After cleaning up a dead connection, "continue" instead of | ||||||
|  |      returning FALSE. This ensures that we clean up all dead connections, | ||||||
|  |      rather than just cleaning up the first dead connection. | ||||||
|  |   2. Move up the cleanup for dead connections so that it occurs for | ||||||
|  |      all connections, rather than just the connections which have the same | ||||||
|  |      preferences as our current new connection. | ||||||
|  |  | ||||||
| Version 7.19.4 (3 March 2009) | Version 7.19.4 (3 March 2009) | ||||||
|  |  | ||||||
| Daniel Stenberg (3 Mar 2009) | Daniel Stenberg (3 Mar 2009) | ||||||
|   | |||||||
| @@ -9,7 +9,8 @@ Curl and libcurl 7.19.5 | |||||||
|  |  | ||||||
| This release includes the following changes: | This release includes the following changes: | ||||||
|  |  | ||||||
|  o  |  o libcurl now closes all dead connections whenever you attempt to open a new | ||||||
|  |    connection | ||||||
|  |  | ||||||
| This release includes the following bugfixes: | This release includes the following bugfixes: | ||||||
|  |  | ||||||
| @@ -22,6 +23,6 @@ This release includes the following known bugs: | |||||||
| This release would not have looked like this without help, code, reports and | This release would not have looked like this without help, code, reports and | ||||||
| advice from friends like these: | advice from friends like these: | ||||||
|  |  | ||||||
|   |  David James | ||||||
|  |  | ||||||
|         Thanks! (and sorry if I forgot to mention someone) |         Thanks! (and sorry if I forgot to mention someone) | ||||||
|   | |||||||
							
								
								
									
										32
									
								
								lib/url.c
									
									
									
									
									
								
							
							
						
						
									
										32
									
								
								lib/url.c
									
									
									
									
									
								
							| @@ -2565,6 +2565,22 @@ ConnectionExists(struct SessionHandle *data, | |||||||
|                                   from the multi */ |                                   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) { |     if(canPipeline) { | ||||||
|       /* Make sure the pipe has only GET requests */ |       /* Make sure the pipe has only GET requests */ | ||||||
|       struct SessionHandle* sh = gethandleathead(check->send_pipe); |       struct SessionHandle* sh = gethandleathead(check->send_pipe); | ||||||
| @@ -2688,22 +2704,6 @@ ConnectionExists(struct SessionHandle *data, | |||||||
|     } |     } | ||||||
|  |  | ||||||
|     if(match) { |     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 |       check->inuse = TRUE; /* mark this as being in use so that no other | ||||||
|                               handle in a multi stack may nick it */ |                               handle in a multi stack may nick it */ | ||||||
|  |  | ||||||
|   | |||||||
		Reference in New Issue
	
	Block a user
	 Daniel Stenberg
					Daniel Stenberg