From 28a1371b37992aed350ec28b751057d4b558dc2b Mon Sep 17 00:00:00 2001 From: Christian Pulvermacher Date: Sat, 16 Oct 2010 20:49:49 +0200 Subject: [PATCH] fix deadlock when password dialog is cancelled --- src/vncclientthread.cpp | 10 +++++++++- src/vncclientthread.h | 2 +- src/vncview.cpp | 2 +- 3 files changed, 11 insertions(+), 3 deletions(-) diff --git a/src/vncclientthread.cpp b/src/vncclientthread.cpp index d115f6e..7a61e29 100644 --- a/src/vncclientthread.cpp +++ b/src/vncclientthread.cpp @@ -116,12 +116,20 @@ char *VncClientThread::passwdHandler(rfbClient *cl) VncClientThread *t = (VncClientThread*)rfbClientGetClientData(cl, 0); Q_ASSERT(t); - t->passwordRequest(); t->m_passwordError = true; + t->passwordRequest(); return strdup(t->password().toLocal8Bit()); } +void VncClientThread::setPassword(const QString &password) +{ + if(password.isNull()) //cancelled, don't retry + m_passwordError = false; + + m_password = password; +} + void VncClientThread::outputHandler(const char *format, ...) { va_list args; diff --git a/src/vncclientthread.h b/src/vncclientthread.h index 20a11e6..8efa6a8 100644 --- a/src/vncclientthread.h +++ b/src/vncclientthread.h @@ -108,7 +108,7 @@ public: void setPort(int port); void setListenPort(int port) { listen_port = port; } void setQuality(RemoteView::Quality quality); - void setPassword(const QString &password) { m_password = password; } + void setPassword(const QString &password); const QString password() const { return m_password; } RemoteView::Quality quality() const; diff --git a/src/vncview.cpp b/src/vncview.cpp index ccbae25..79b5973 100644 --- a/src/vncview.cpp +++ b/src/vncview.cpp @@ -255,7 +255,7 @@ void VncView::requestPassword() vncThread.setPassword(password); } else { - startQuitting(); + vncThread.setPassword(QString()); //null string to exit } } -- 1.7.9.5