connection_free(carray[i]);
}
+void connection_about_to_close_connection(connection_t *conn)
+{
+ if(conn->type == CONN_TYPE_DIR)
+ if(conn->purpose == DIR_PURPOSE_FETCH_RENDDESC)
+ rend_client_desc_fetched(conn->rend_query, 0);
+
+
+}
+
/** Close the underlying socket for <b>conn</b>, so we don't try to
* flush it. Must be used in conjunction with (right before)
* connection_mark_for_close().
case CONN_TYPE_AP_LISTENER:
case CONN_TYPE_DIR_LISTENER:
case CONN_TYPE_CPUWORKER:
- /* No special processing needed. */
- break;
case CONN_TYPE_DIR:
- if(conn->purpose == DIR_PURPOSE_FETCH_RENDDESC)
- rend_client_desc_fetched(conn->rend_query, 0);
+ /* No special processing needed immediately. */
break;
case CONN_TYPE_OR:
/* Remember why we're closing this connection. */
* flush and send destroys for all circuits on this conn
*/
circuit_about_to_close_connection(conn);
+ connection_about_to_close_connection(conn);
connection_remove(conn);
if(conn->type == CONN_TYPE_EXIT) {
assert_connection_edge_not_dns_pending(conn);
connection_t *connection_new(int type);
void connection_free(connection_t *conn);
void connection_free_all(void);
+void connection_about_to_close_connection(connection_t *conn);
void connection_close_immediate(connection_t *conn);
int _connection_mark_for_close(connection_t *conn, char reason);