toggling DisableNetwork during bootstrap causes delay
While testing a fix for legacy/trac#11879, 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, legacy/trac#11069. Once release candidates for Tor Browser 4.5 are available, this should be reproducible by following these steps: 1. Start Tor Browser and click "Connect". 2. Click "Open Settings" in the connection progress window to interrupt the bootstrap process. 3. 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): 1. Remove all cached Tor data and start Tor like this: `./tor --defaults-torrc torrc-defaults -f torrc DisableNetwork 1` 2. Make a control port connection and issue this command: `SETCONF DisableNetwork=0` 3. Wait for bootstrapping to reach 25-50% and then do: `SETCONF DisableNetwork=1` 4. 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.
issue