Actually disable NEED_NET periodic events when DisableNetwork is set

Fixes bug 28348; bugfix on 0.3.4.1-alpha
This commit is contained in:
Nick Mathewson 2018-11-06 07:40:02 -05:00
parent 5acf6f8717
commit 2aff02eb3d
2 changed files with 9 additions and 3 deletions

5
changes/bug28348_034 Normal file
View file

@ -0,0 +1,5 @@
o Major bugfixes (embedding, main loop):
- When DisableNetwork becomes set, actually disable periodic events that
are already enabled. (Previously, we would refrain from enabling new
ones, but we would leave the old ones turned on.)
Fixes bug 28348; bugfix on 0.3.4.1-alpha.

View file

@ -1597,15 +1597,17 @@ rescan_periodic_events(const or_options_t *options)
for (int i = 0; periodic_events[i].name; ++i) {
periodic_event_item_t *item = &periodic_events[i];
int enable = !!(item->roles & roles);
/* Handle the event flags. */
if (net_is_disabled() &&
(item->flags & PERIODIC_EVENT_FLAG_NEED_NET)) {
continue;
enable = 0;
}
/* Enable the event if needed. It is safe to enable an event that was
* already enabled. Same goes for disabling it. */
if (item->roles & roles) {
if (enable) {
log_debug(LD_GENERAL, "Launching periodic event %s", item->name);
periodic_event_enable(item);
} else {
@ -4319,4 +4321,3 @@ tor_run_main(const tor_main_configuration_t *tor_cfg)
tor_cleanup();
return result;
}