fix deadlock when password dialog is cancelled
authorChristian Pulvermacher <christian@hazel.(none)>
Sat, 16 Oct 2010 18:49:49 +0000 (20:49 +0200)
committerChristian Pulvermacher <christian@hazel.(none)>
Sat, 16 Oct 2010 18:49:49 +0000 (20:49 +0200)
src/vncclientthread.cpp
src/vncclientthread.h
src/vncview.cpp

index d115f6e..7a61e29 100644 (file)
@@ -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;
index 20a11e6..8efa6a8 100644 (file)
@@ -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;
index ccbae25..79b5973 100644 (file)
@@ -255,7 +255,7 @@ void VncView::requestPassword()
 
                vncThread.setPassword(password);
        } else {
-               startQuitting();
+               vncThread.setPassword(QString()); //null string to exit
        }
 }