Merge pull request 'Add backoff to handle slow android socket setup' (#1) from android_backoff into trunk

Reviewed-on: #1
This commit is contained in:
Dan Ballard 2020-11-16 15:35:35 -08:00
commit 5996d426c1
1 changed files with 16 additions and 2 deletions

View File

@ -173,11 +173,25 @@ func Start(ctx context.Context, conf *StartConf) (*Tor, error) {
if err == nil {
err = tor.startProcess(ctx, conf)
}
time.Sleep(time.Second)
// Connect the controller
if err == nil {
err = tor.connectController(ctx, conf)
for attempts := 0; attempts < 10; attempts++ {
err = tor.connectController(ctx, conf)
if err == nil {
break
} else {
// backoff and retry
// max is 1 + 2 + 3 + 4 + 5...+10 = ~55 seconds
// After which point there is probably something else very wrong
// TODO: It might be worth breaking out the error here so that we can distinguish a
// slow socket (on e.g. Android) with a failed setup.
time.Sleep(time.Duration(int(time.Second) * attempts))
}
}
}
// Attempt eager auth w/ no password
if err == nil && !conf.DisableEagerAuth {
err = tor.Control.Authenticate("")