diff options
author | Benjamin Jemlich <pcgod@users.sourceforge.net> | 2010-07-27 14:57:40 +0400 |
---|---|---|
committer | Benjamin Jemlich <pcgod@users.sourceforge.net> | 2010-07-27 14:59:05 +0400 |
commit | 8f73beb8e9bd36127cf94e5f61e5c140166a661f (patch) | |
tree | 5a33133471dbc5861a59740594ca055295c44e92 /src | |
parent | f5f526d2ee8f3386461798a5943adae59d05243d (diff) |
Fix a possible race condition on reconnect
Diffstat (limited to 'src')
-rw-r--r-- | src/mumble/MainWindow.cpp | 18 |
1 files changed, 11 insertions, 7 deletions
diff --git a/src/mumble/MainWindow.cpp b/src/mumble/MainWindow.cpp index 16ef79857..82b2225a4 100644 --- a/src/mumble/MainWindow.cpp +++ b/src/mumble/MainWindow.cpp @@ -517,17 +517,21 @@ void MainWindow::on_qteLog_customContextMenuRequested(const QPoint &mpos) { } static void recreateServerHandler() { - if (g.sh && g.sh->isRunning()) { + ServerHandler *sh = g.sh; + g.sh = NULL; + if (sh && sh->isRunning()) { g.mw->on_qaServerDisconnect_triggered(); - g.sh->wait(); + sh->disconnect(); + sh->wait(); QCoreApplication::instance()->processEvents(); } - delete g.sh; - g.sh = new ServerHandler(); - g.sh->moveToThread(g.sh); - g.mw->connect(g.sh, SIGNAL(connected()), g.mw, SLOT(serverConnected())); - g.mw->connect(g.sh, SIGNAL(disconnected(QAbstractSocket::SocketError, QString)), g.mw, SLOT(serverDisconnected(QAbstractSocket::SocketError, QString))); + delete sh; + sh = new ServerHandler(); + sh->moveToThread(sh); + g.sh = sh; + g.mw->connect(sh, SIGNAL(connected()), g.mw, SLOT(serverConnected())); + g.mw->connect(sh, SIGNAL(disconnected(QAbstractSocket::SocketError, QString)), g.mw, SLOT(serverDisconnected(QAbstractSocket::SocketError, QString))); } void MainWindow::openUrl(const QUrl &url) { |