toggling DisableNetwork during bootstrap causes delay
While testing a fix for #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: #9229 (moved), #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:
- Wait for bootstrapping to reach 25-50% and then do:
- Re-enable network access:
SETCONF DisableNetwork=0Notice 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.