toggling DisableNetwork during bootstrap causes delay
While testing a fix for legacy/trac#11879 (moved), Kathy and I noticed that if the bootstrap process is interrupted by setting DisableNetwork=1 via the control port, Tor waits about a minute after DisableNetwork is set back to 0 before continuing network activity. We observed this problem on a Mac OS 10.8.5 system. Possibly related tickets: legacy/trac#9229 (moved), legacy/trac#11069 (moved).
Once release candidates for Tor Browser 4.5 are available, this should be reproducible by following these steps:
- Start Tor Browser and click "Connect".
- Click "Open Settings" in the connection progress window to interrupt the bootstrap process.
- Click "Connect" again. Notice that there is a delay before the bootstrap makes more progress.
We are also able to reproduce it using Tor 0.2.6.6 and a manual (telnet) control port connection. Follow these steps (control port authentication is up to you):
- Remove all cached Tor data and start Tor like this:
./tor --defaults-torrc torrc-defaults -f torrc DisableNetwork 1
- Make a control port connection and issue this command:
SETCONF DisableNetwork=0
- Wait for bootstrapping to reach 25-50% and then do:
SETCONF DisableNetwork=1
- Re-enable network access:
SETCONF DisableNetwork=0
Notice that there is a delay before the bootstrap makes more progress.
We used the torrc-defaults file that ships with Tor Browser 4.5a5:
# If non-zero, try to write to disk less frequently than we would otherwise.
AvoidDiskWrites 1
# Where to send logging messages. Format is minSeverity[-maxSeverity]
# (stderr|stdout|syslog|file FILENAME).
Log notice stdout
# Bind to this address to listen to connections from SOCKS-speaking
# applications.
SocksPort 9150
ControlPort 9151
CookieAuthentication 1
## fteproxy configuration
ClientTransportPlugin fte exec PluggableTransports/fteproxy.bin --managed
## obfs4proxy configuration
ClientTransportPlugin obfs2,obfs3,obfs4,scramblesuit exec PluggableTransports/obfs4proxy
## flash proxy configuration
#
# Change the second number here (9000) to the number of a port that can
# receive connections from the Internet (the port for which you
# configured port forwarding).
ClientTransportPlugin flashproxy exec PluggableTransports/flashproxy-client --register :0 :9000
## meek configuration
ClientTransportPlugin meek exec PluggableTransports/meek-client-torbrowser -- PluggableTransports/meek-client
Our torrc is also from Tor Browser and it just contains a few paths:
DataDirectory /Users/.../tb-11879.app/TorBrowser/Data/Tor
GeoIPFile /Users/.../tb-11879.app/TorBrowser/Data/Tor/geoip
GeoIPv6File /Users/.../tb-11879.app/TorBrowser/Data/Tor/geoip6
I will attach some log output.