diff --git a/src/or/connection_or.c b/src/or/connection_or.c index ecbd7eb70e..0c3d932a18 100644 --- a/src/or/connection_or.c +++ b/src/or/connection_or.c @@ -224,6 +224,11 @@ static int connection_tls_finish_handshake(connection_t *conn) { } log_fn(LOG_DEBUG,"The router's pk matches the one we meant to connect to. Good."); } else { + if(connection_exact_get_by_addr_port(router->addr,router->or_port)) { + log_fn(LOG_INFO,"Router %s is already connected. Dropping.", router->nickname); + crypto_free_pk_env(pk); + return -1; + } connection_or_init_conn_from_router(conn, router); } crypto_free_pk_env(pk); @@ -232,11 +237,6 @@ static int connection_tls_finish_handshake(connection_t *conn) { nickname, conn->nickname); return -1; } - otherconn = connection_exact_get_by_addr_port(router->addr,router->or_port); - if(otherconn && connection_state_is_open(otherconn)) { - log_fn(LOG_INFO,"Router %s is already connected. Dropping.", router->nickname); - return -1; - } if (!options.OnionRouter) { /* If I'm an OP... */ conn->receiver_bucket = conn->bandwidth = DEFAULT_BANDWIDTH_OP; circuit_n_conn_open(conn); /* send the pending creates, if any. */