[Author Prev][Author Next][Thread Prev][Thread Next][Author Index][Thread Index]

[or-cvs] Make directory fail-and-retry logic happen in connection_ab...



Update of /home/or/cvsroot/tor/src/or
In directory moria.mit.edu:/tmp/cvs-serv28089/src/or

Modified Files:
	connection.c 
Log Message:
Make directory fail-and-retry logic happen in connection_about_to_close(); fixes win32 bug.

Index: connection.c
===================================================================
RCS file: /home/or/cvsroot/tor/src/or/connection.c,v
retrieving revision 1.311
retrieving revision 1.312
diff -u -d -r1.311 -r1.312
--- connection.c	22 Dec 2004 02:55:26 -0000	1.311
+++ connection.c	3 Jan 2005 19:51:10 -0000	1.312
@@ -205,6 +205,17 @@
 
   switch (conn->type) {
     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)
         rend_client_desc_fetched(conn->rend_query, 0);
       break;
@@ -854,17 +865,6 @@
                           conn->cpath_layer);
     }
     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;
   }
   if (CONN_IS_EDGE(conn) &&