Commit 121d0295 authored by Roger Dingledine's avatar Roger Dingledine
Browse files

fix subtle race condition

If you weren't connected to a given router, and you made a directory
request to it simultaneously with a new web query that caused you to
want to connect to that OR... it would think you're already connected.


svn:r135
parent 84a34edf
...@@ -37,7 +37,8 @@ void directory_initiate_fetch(routerinfo_t *router) { ...@@ -37,7 +37,8 @@ void directory_initiate_fetch(routerinfo_t *router) {
return; return;
/* set up conn so it's got all the data we need to remember */ /* set up conn so it's got all the data we need to remember */
conn->addr = router->addr, conn->port = router->or_port; /* NOTE we store or_port here always */ conn->addr = router->addr;
conn->port = router->dir_port;
conn->address = strdup(router->address); conn->address = strdup(router->address);
conn->receiver_bucket = -1; /* edge connections don't do receiver buckets */ conn->receiver_bucket = -1; /* edge connections don't do receiver buckets */
conn->bandwidth = -1; conn->bandwidth = -1;
...@@ -279,7 +280,7 @@ int connection_dir_create_listener(struct sockaddr_in *bindaddr) { ...@@ -279,7 +280,7 @@ int connection_dir_create_listener(struct sockaddr_in *bindaddr) {
} }
int connection_dir_handle_listener_read(connection_t *conn) { int connection_dir_handle_listener_read(connection_t *conn) {
log(LOG_NOTICE,"Dir: Received a connection request. Waiting for command."); log(LOG_INFO,"Dir: Received a connection request. Waiting for command.");
return connection_handle_listener_read(conn, CONN_TYPE_DIR, DIR_CONN_STATE_COMMAND_WAIT); return connection_handle_listener_read(conn, CONN_TYPE_DIR, DIR_CONN_STATE_COMMAND_WAIT);
} }
Supports Markdown
0% or .
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment