mirror of
https://gitlab.torproject.org/tpo/core/tor.git
synced 2024-11-28 14:23:30 +01:00
Disable recording new broken conns when we have bootstrapped
Rationale: right now there seems to be no way for our bootstrap status to dip under 100% once it has reached 100%. Thus, recording broken connections after that point is useless, and wastes memory. If at some point in the future we allow our bootstrap level to go backwards, then we should change this rule so that we disable recording broken connection states _as long as_ the bootstrap status is 100%.
This commit is contained in:
parent
e253e9577f
commit
2a594fcde9
@ -2117,7 +2117,7 @@ circuit_send_next_onion_skin(origin_circuit_t *circ)
|
|||||||
"Looks like client functionality is working.");
|
"Looks like client functionality is working.");
|
||||||
control_event_bootstrap(BOOTSTRAP_STATUS_DONE, 0);
|
control_event_bootstrap(BOOTSTRAP_STATUS_DONE, 0);
|
||||||
control_event_client_status(LOG_NOTICE, "CIRCUIT_ESTABLISHED");
|
control_event_client_status(LOG_NOTICE, "CIRCUIT_ESTABLISHED");
|
||||||
clear_broken_connection_map();
|
clear_broken_connection_map(1);
|
||||||
if (server_mode(options) && !check_whether_orport_reachable()) {
|
if (server_mode(options) && !check_whether_orport_reachable()) {
|
||||||
inform_testing_reachability();
|
inform_testing_reachability();
|
||||||
consider_testing_reachability(1, 1);
|
consider_testing_reachability(1, 1);
|
||||||
|
@ -555,7 +555,7 @@ connection_free_all(void)
|
|||||||
connection_or_clear_identity_map();
|
connection_or_clear_identity_map();
|
||||||
|
|
||||||
/* Clear out our list of broken connections */
|
/* Clear out our list of broken connections */
|
||||||
clear_broken_connection_map();
|
clear_broken_connection_map(0);
|
||||||
|
|
||||||
SMARTLIST_FOREACH(conns, connection_t *, conn, _connection_free(conn));
|
SMARTLIST_FOREACH(conns, connection_t *, conn, _connection_free(conn));
|
||||||
|
|
||||||
|
@ -158,12 +158,18 @@ connection_or_set_identity_digest(or_connection_t *conn, const char *digest)
|
|||||||
*/
|
*/
|
||||||
static strmap_t *broken_connection_counts;
|
static strmap_t *broken_connection_counts;
|
||||||
|
|
||||||
|
/** If true, do not record information in <b>broken_connection_counts</b>. */
|
||||||
|
static int disable_broken_connection_counts = 0;
|
||||||
|
|
||||||
/** Record that an OR connection failed in <b>state</b>. */
|
/** Record that an OR connection failed in <b>state</b>. */
|
||||||
static void
|
static void
|
||||||
note_broken_connection(const char *state)
|
note_broken_connection(const char *state)
|
||||||
{
|
{
|
||||||
void *ptr;
|
void *ptr;
|
||||||
intptr_t val;
|
intptr_t val;
|
||||||
|
if (disable_broken_connection_counts)
|
||||||
|
return;
|
||||||
|
|
||||||
if (!broken_connection_counts)
|
if (!broken_connection_counts)
|
||||||
broken_connection_counts = strmap_new();
|
broken_connection_counts = strmap_new();
|
||||||
|
|
||||||
@ -174,13 +180,16 @@ note_broken_connection(const char *state)
|
|||||||
strmap_set(broken_connection_counts, state, ptr);
|
strmap_set(broken_connection_counts, state, ptr);
|
||||||
}
|
}
|
||||||
|
|
||||||
/** Forget all recorded states for failed connections. */
|
/** Forget all recorded states for failed connections. If
|
||||||
|
* <b>stop_recording</b> is true, don't record any more. */
|
||||||
void
|
void
|
||||||
clear_broken_connection_map(void)
|
clear_broken_connection_map(int stop_recording)
|
||||||
{
|
{
|
||||||
if (broken_connection_counts)
|
if (broken_connection_counts)
|
||||||
strmap_free(broken_connection_counts, NULL);
|
strmap_free(broken_connection_counts, NULL);
|
||||||
broken_connection_counts = NULL;
|
broken_connection_counts = NULL;
|
||||||
|
if (stop_recording)
|
||||||
|
disable_broken_connection_counts = 1;
|
||||||
}
|
}
|
||||||
|
|
||||||
/** Write a detailed description the state of <b>orconn</b> into the
|
/** Write a detailed description the state of <b>orconn</b> into the
|
||||||
@ -209,6 +218,8 @@ static void
|
|||||||
connection_or_note_state_when_broken(or_connection_t *orconn)
|
connection_or_note_state_when_broken(or_connection_t *orconn)
|
||||||
{
|
{
|
||||||
char buf[256];
|
char buf[256];
|
||||||
|
if (disable_broken_connection_counts)
|
||||||
|
return;
|
||||||
connection_or_get_state_description(orconn, buf, sizeof(buf));
|
connection_or_get_state_description(orconn, buf, sizeof(buf));
|
||||||
log_info(LD_HANDSHAKE,"Connection died in state '%s'", buf);
|
log_info(LD_HANDSHAKE,"Connection died in state '%s'", buf);
|
||||||
note_broken_connection(buf);
|
note_broken_connection(buf);
|
||||||
@ -240,7 +251,7 @@ connection_or_report_broken_states(int severity, int domain)
|
|||||||
int total = 0;
|
int total = 0;
|
||||||
smartlist_t *items;
|
smartlist_t *items;
|
||||||
|
|
||||||
if (!broken_connection_counts)
|
if (!broken_connection_counts || disable_broken_connection_counts)
|
||||||
return;
|
return;
|
||||||
|
|
||||||
items = smartlist_create();
|
items = smartlist_create();
|
||||||
|
@ -14,7 +14,7 @@
|
|||||||
|
|
||||||
void connection_or_remove_from_identity_map(or_connection_t *conn);
|
void connection_or_remove_from_identity_map(or_connection_t *conn);
|
||||||
void connection_or_clear_identity_map(void);
|
void connection_or_clear_identity_map(void);
|
||||||
void clear_broken_connection_map(void);
|
void clear_broken_connection_map(int disable);
|
||||||
or_connection_t *connection_or_get_for_extend(const char *digest,
|
or_connection_t *connection_or_get_for_extend(const char *digest,
|
||||||
const tor_addr_t *target_addr,
|
const tor_addr_t *target_addr,
|
||||||
const char **msg_out,
|
const char **msg_out,
|
||||||
|
Loading…
Reference in New Issue
Block a user