Browse Source

r18066@catbus: nickm | 2008-02-13 11:22:19 -0500
Bugfix from Karsten: "Reversed r13439; v2 rendezvous descriptors were only re-fetched when a directory connection did not finish, not when a directory correctly replied with an error code like 404; bug found by nwf.


svn:r13492

Nick Mathewson 17 years ago
parent
commit
d48f6425e5
1 changed files with 6 additions and 3 deletions
  1. 6 3
      src/or/connection.c

+ 6 - 3
src/or/connection.c

@@ -477,12 +477,15 @@ connection_about_to_close_connection(connection_t *conn)
         /* It's a directory connection and connecting or fetching
          * failed: forget about this router, and maybe try again. */
         connection_dir_request_failed(dir_conn);
-        /* if we were trying to fetch a v2 rend desc, retry as needed */
-        if (conn->purpose == DIR_PURPOSE_FETCH_RENDDESC_V2)
-          rend_client_refetch_v2_renddesc(dir_conn->rend_query);
       }
       if (conn->purpose == DIR_PURPOSE_FETCH_RENDDESC)
         rend_client_desc_here(dir_conn->rend_query); /* give it a try */
+      /* If we were trying to fetch a v2 rend desc and did not succeed,
+       * retry as needed. (If a fetch is successful, the connection state
+       * is changed to DIR_PURPOSE_HAS_FETCHED_RENDDESC to mark that
+       * refetching is unnecessary.) */
+      if (conn->purpose == DIR_PURPOSE_FETCH_RENDDESC_V2)
+        rend_client_refetch_v2_renddesc(dir_conn->rend_query);
       break;
     case CONN_TYPE_OR:
       or_conn = TO_OR_CONN(conn);