commit d98686dd808a4760fe302cbc883713effdcdb8ea
Author: Tomas Touceda <chiiph(a)torproject.org>
Date: Fri Aug 12 20:44:11 2011 -0300
Prevent hanging at start because of timing problem
Tor takes a bit to create the port.conf file and Vidalia hangs without
warning when it can't read it.
The idea is to try 5 times waiting 1 second, or fail explaining the reason.
5 seconds should be enough in most systems.
---
src/vidalia/MainWindow.cpp | 16 +++++++++++++++-
1 files changed, 15 insertions(+), 1 deletions(-)
diff --git a/src/vidalia/MainWindow.cpp b/src/vidalia/MainWindow.cpp
index b1aff22..9ef9656 100644
--- a/src/vidalia/MainWindow.cpp
+++ b/src/vidalia/MainWindow.cpp
@@ -1142,8 +1142,20 @@ MainWindow::started()
if(settings.autoControlPort()) {
QString dataDirectory = settings.getDataDirectory();
QFile file(QString("%1/port.conf").arg(expand_filename(dataDirectory)));
- if (!file.open(QIODevice::ReadOnly | QIODevice::Text))
+ int tries = 0, maxtries = 5;
+ while((!file.open(QIODevice::ReadOnly | QIODevice::Text)) and
+ (tries++ < maxtries)) {
+ vWarn(QString("This is try number: %1.").arg(tries));
+ sleep(1);
+ }
+
+ if(tries >= maxtries) {
+ vWarn("Couldn't read port.conf file");
+ connectFailed(QString("Vidalia can't find out how to talk to Tor because it can't access this file: %1\n\nHere's the last error message:\n %2")
+ .arg(file.fileName())
+ .arg(file.errorString()));
return;
+ }
QTextStream in(&file);
if(!in.atEnd()) {
@@ -1159,6 +1171,8 @@ MainWindow::started()
_autoControlPort = addrPort.at(1).toInt();
_torControl->connect(addr, _autoControlPort);
}
+
+ file.close();
} else {
/* Try to connect to Tor's control port */
if(settings.getControlMethod() == ControlMethod::Port) {