aboutsummaryrefslogtreecommitdiff
path: root/src/or/circuituse.c
diff options
context:
space:
mode:
authorMarek Majkowski <marek@popcount.org>2013-06-20 16:56:54 +0100
committerMarek Majkowski <marek@popcount.org>2013-06-20 16:56:54 +0100
commit1555876d5f27acaa9326045e33b6e2bfc1013c7f (patch)
treee20e6c8074ba92ffb29c84b86fd1697c99f61772 /src/or/circuituse.c
parentd7538b57b49669afef0cb3dd03e0ed1a118a98fd (diff)
downloadtor-1555876d5f27acaa9326045e33b6e2bfc1013c7f.tar.gz
tor-1555876d5f27acaa9326045e33b6e2bfc1013c7f.zip
Fix #9108 - make global_circuitlist a doubly linked list
Diffstat (limited to 'src/or/circuituse.c')
-rw-r--r--src/or/circuituse.c24
1 files changed, 10 insertions, 14 deletions
diff --git a/src/or/circuituse.c b/src/or/circuituse.c
index 07bdbe6a2b..fdafa3fbf1 100644
--- a/src/or/circuituse.c
+++ b/src/or/circuituse.c
@@ -280,7 +280,7 @@ circuit_get_best(const entry_connection_t *conn,
tor_gettimeofday(&now);
- for (circ=circuit_get_global_list_();circ;circ = circ->next) {
+ TOR_LIST_FOREACH(circ, circuit_get_global_list_(), head) {
origin_circuit_t *origin_circ;
if (!CIRCUIT_IS_ORIGIN(circ))
continue;
@@ -321,7 +321,7 @@ count_pending_general_client_circuits(void)
int count = 0;
- for (circ = circuit_get_global_list_(); circ; circ = circ->next) {
+ TOR_LIST_FOREACH(circ, circuit_get_global_list_(), head) {
if (circ->marked_for_close ||
circ->state == CIRCUIT_STATE_OPEN ||
circ->purpose != CIRCUIT_PURPOSE_C_GENERAL ||
@@ -369,7 +369,7 @@ circuit_conforms_to_options(const origin_circuit_t *circ,
void
circuit_expire_building(void)
{
- circuit_t *victim, *next_circ = circuit_get_global_list_();
+ circuit_t *victim, *next_circ;
/* circ_times.timeout_ms and circ_times.close_ms are from
* circuit_build_times_get_initial_timeout() if we haven't computed
* custom timeouts yet */
@@ -387,10 +387,9 @@ circuit_expire_building(void)
* we want to be more lenient with timeouts, in case the
* user has relocated and/or changed network connections.
* See bug #3443. */
- while (next_circ) {
+ TOR_LIST_FOREACH(next_circ, circuit_get_global_list_(), head) {
if (!CIRCUIT_IS_ORIGIN(next_circ) || /* didn't originate here */
next_circ->marked_for_close) { /* don't mess with marked circs */
- next_circ = next_circ->next;
continue;
}
@@ -402,9 +401,7 @@ circuit_expire_building(void)
any_opened_circs = 1;
break;
}
- next_circ = next_circ->next;
}
- next_circ = circuit_get_global_list_();
#define SET_CUTOFF(target, msec) do { \
long ms = tor_lround(msec); \
@@ -475,10 +472,9 @@ circuit_expire_building(void)
MAX(circ_times.close_ms*2 + 1000,
options->SocksTimeout * 1000));
- while (next_circ) {
+ TOR_LIST_FOREACH(next_circ, circuit_get_global_list_(), head) {
struct timeval cutoff;
victim = next_circ;
- next_circ = next_circ->next;
if (!CIRCUIT_IS_ORIGIN(victim) || /* didn't originate here */
victim->marked_for_close) /* don't mess with marked circs */
continue;
@@ -812,7 +808,7 @@ circuit_stream_is_being_handled(entry_connection_t *conn,
get_options()->LongLivedPorts,
conn ? conn->socks_request->port : port);
- for (circ=circuit_get_global_list_();circ;circ = circ->next) {
+ TOR_LIST_FOREACH(circ, circuit_get_global_list_(), head) {
if (CIRCUIT_IS_ORIGIN(circ) &&
!circ->marked_for_close &&
circ->purpose == CIRCUIT_PURPOSE_C_GENERAL &&
@@ -863,7 +859,7 @@ circuit_predict_and_launch_new(void)
int flags = 0;
/* First, count how many of each type of circuit we have already. */
- for (circ=circuit_get_global_list_();circ;circ = circ->next) {
+ TOR_LIST_FOREACH(circ, circuit_get_global_list_(), head) {
cpath_build_state_t *build_state;
origin_circuit_t *origin_circ;
if (!CIRCUIT_IS_ORIGIN(circ))
@@ -1087,7 +1083,7 @@ circuit_expire_old_circuits_clientside(void)
cutoff.tv_sec -= get_options()->CircuitIdleTimeout;
}
- for (circ = circuit_get_global_list_(); circ; circ = circ->next) {
+ TOR_LIST_FOREACH(circ, circuit_get_global_list_(), head) {
if (circ->marked_for_close || !CIRCUIT_IS_ORIGIN(circ))
continue;
/* If the circuit has been dirty for too long, and there are no streams
@@ -1170,7 +1166,7 @@ circuit_expire_old_circuits_serverside(time_t now)
or_circuit_t *or_circ;
time_t cutoff = now - IDLE_ONE_HOP_CIRC_TIMEOUT;
- for (circ = circuit_get_global_list_(); circ; circ = circ->next) {
+ TOR_LIST_FOREACH(circ, circuit_get_global_list_(), head) {
if (circ->marked_for_close || CIRCUIT_IS_ORIGIN(circ))
continue;
or_circ = TO_OR_CIRCUIT(circ);
@@ -1217,7 +1213,7 @@ circuit_enough_testing_circs(void)
if (have_performed_bandwidth_test)
return 1;
- for (circ = circuit_get_global_list_(); circ; circ = circ->next) {
+ TOR_LIST_FOREACH(circ, circuit_get_global_list_(), head) {
if (!circ->marked_for_close && CIRCUIT_IS_ORIGIN(circ) &&
circ->purpose == CIRCUIT_PURPOSE_TESTING &&
circ->state == CIRCUIT_STATE_OPEN)