Make directory fail-and-retry logic happen in connection_about_to_close(); fixes win32 bug.

svn:r3253
This commit is contained in:
Nick Mathewson 2005-01-03 19:51:10 +00:00
parent b50263f740
commit 5f40d6bf72

View File

@ -205,6 +205,17 @@ void connection_about_to_close_connection(connection_t *conn)
switch (conn->type) { switch (conn->type) {
case CONN_TYPE_DIR: case CONN_TYPE_DIR:
if (conn->state == DIR_CONN_STATE_CONNECTING) {
/* it's a directory server and connecting failed: forget about
this router */
router_mark_as_down(conn->identity_digest);
if (conn->purpose == DIR_PURPOSE_FETCH_DIR &&
!all_trusted_directory_servers_down()) {
log_fn(LOG_INFO,"Giving up on dirserver %s; trying another.",
conn->address);
directory_get_from_dirserver(DIR_PURPOSE_FETCH_DIR, NULL);
}
}
if (conn->purpose == DIR_PURPOSE_FETCH_RENDDESC) if (conn->purpose == DIR_PURPOSE_FETCH_RENDDESC)
rend_client_desc_fetched(conn->rend_query, 0); rend_client_desc_fetched(conn->rend_query, 0);
break; break;
@ -854,17 +865,6 @@ loop_again:
conn->cpath_layer); conn->cpath_layer);
} }
connection_mark_for_close(conn); connection_mark_for_close(conn);
if (conn->type == CONN_TYPE_DIR &&
conn->state == DIR_CONN_STATE_CONNECTING) {
/* it's a directory server and connecting failed: forget about this router */
/* XXX I suspect pollerr may make Windows not get to this point. :( */
router_mark_as_down(conn->identity_digest);
if (conn->purpose == DIR_PURPOSE_FETCH_DIR &&
!all_trusted_directory_servers_down()) {
log_fn(LOG_INFO,"Giving up on dirserver %s; trying another.", conn->address);
directory_get_from_dirserver(DIR_PURPOSE_FETCH_DIR, NULL);
}
}
return -1; return -1;
} }
if (CONN_IS_EDGE(conn) && if (CONN_IS_EDGE(conn) &&