improve robustness: connection_get_by_* ignores conns marked for close

svn:r352
This commit is contained in:
Roger Dingledine 2003-06-24 23:09:21 +00:00
parent 23b1586c26
commit dfdc93eccb

View File

@ -119,7 +119,7 @@ connection_t *connection_twin_get_by_addr_port(uint32_t addr, uint16_t port) {
/* first check if it's there exactly */ /* first check if it's there exactly */
conn = connection_exact_get_by_addr_port(addr,port); conn = connection_exact_get_by_addr_port(addr,port);
if(conn && connection_state_is_open(conn)) { if(conn && connection_state_is_open(conn) && !conn->marked_for_close) {
log(LOG_INFO,"connection_twin_get_by_addr_port(): Found exact match."); log(LOG_INFO,"connection_twin_get_by_addr_port(): Found exact match.");
return conn; return conn;
} }
@ -150,7 +150,7 @@ connection_t *connection_exact_get_by_addr_port(uint32_t addr, uint16_t port) {
for(i=0;i<nfds;i++) { for(i=0;i<nfds;i++) {
conn = connection_array[i]; conn = connection_array[i];
assert(conn); assert(conn);
if(conn->addr == addr && conn->port == port) if(conn->addr == addr && conn->port == port && !conn->marked_for_close)
return conn; return conn;
} }
return NULL; return NULL;
@ -162,7 +162,7 @@ connection_t *connection_get_by_type(int type) {
for(i=0;i<nfds;i++) { for(i=0;i<nfds;i++) {
conn = connection_array[i]; conn = connection_array[i];
if(conn->type == type) if(conn->type == type && !conn->marked_for_close)
return conn; return conn;
} }
return NULL; return NULL;
@ -174,7 +174,7 @@ connection_t *connection_get_by_type_state(int type, int state) {
for(i=0;i<nfds;i++) { for(i=0;i<nfds;i++) {
conn = connection_array[i]; conn = connection_array[i];
if(conn->type == type && conn->state == state) if(conn->type == type && conn->state == state && !conn->marked_for_close)
return conn; return conn;
} }
return NULL; return NULL;