[Author Prev][Author Next][Thread Prev][Thread Next][Author Index][Thread Index]
[tor-commits] [tor/master] Enable/disable per-second callback as needed.
commit 8b4cf7771e869bea4550452ad2cf5634278e0e87
Author: Nick Mathewson <nickm@xxxxxxxxxxxxxx>
Date: Wed May 9 12:47:59 2018 -0400
Enable/disable per-second callback as needed.
There are three cases where this can happen: changes in our
controller events, changes in our DisableNetwork setting, and
changes in our hibernation state.
Closes ticket 26063.
---
changes/ticket26063 | 5 +++++
src/or/config.c | 3 +++
src/or/control.c | 5 +++++
src/or/hibernate.c | 2 ++
4 files changed, 15 insertions(+)
diff --git a/changes/ticket26063 b/changes/ticket26063
new file mode 100644
index 000000000..c11eb2d15
--- /dev/null
+++ b/changes/ticket26063
@@ -0,0 +1,5 @@
+ o Major features (CPU usage, mobile):
+ - When Tor is disabled (via DisableNetwork or via hibernation), it
+ no longer needs to run any per-second events. This change should
+ make it easier for mobile applications to disable Tor while the
+ device is sleeping, or Tor is not running. Closes ticket 26063.
diff --git a/src/or/config.c b/src/or/config.c
index e695947f0..2cc28b6d7 100644
--- a/src/or/config.c
+++ b/src/or/config.c
@@ -2001,6 +2001,9 @@ options_act(const or_options_t *old_options)
finish_daemon(options->DataDirectory);
}
+ /* See whether we need to enable/disable our once-a-second timer. */
+ reschedule_per_second_timer();
+
/* We want to reinit keys as needed before we do much of anything else:
keys are important, and other things can depend on them. */
if (transition_affects_workers ||
diff --git a/src/or/control.c b/src/or/control.c
index 44439b6d5..237a8572d 100644
--- a/src/or/control.c
+++ b/src/or/control.c
@@ -277,6 +277,7 @@ control_update_global_event_mask(void)
smartlist_t *conns = get_connection_array();
event_mask_t old_mask, new_mask;
old_mask = global_event_mask;
+ int any_old_per_sec_events = control_any_per_second_event_enabled();
global_event_mask = 0;
SMARTLIST_FOREACH(conns, connection_t *, _conn,
@@ -316,6 +317,10 @@ control_update_global_event_mask(void)
uint64_t r, w;
control_get_bytes_rw_last_sec(&r, &w);
}
+ if (any_old_per_sec_events != control_any_per_second_event_enabled()) {
+ reschedule_per_second_timer();
+ }
+
#undef NEWLY_ENABLED
}
diff --git a/src/or/hibernate.c b/src/or/hibernate.c
index f73b0420d..24479cff9 100644
--- a/src/or/hibernate.c
+++ b/src/or/hibernate.c
@@ -1137,6 +1137,8 @@ on_hibernate_state_change(hibernate_state_t prev_state)
if (prev_state != HIBERNATE_STATE_INITIAL) {
rescan_periodic_events(get_options());
}
+
+ reschedule_per_second_timer();
}
#ifdef TOR_UNIT_TESTS
_______________________________________________
tor-commits mailing list
tor-commits@xxxxxxxxxxxxxxxxxxxx
https://lists.torproject.org/cgi-bin/mailman/listinfo/tor-commits