@@ -59,16 +59,15 @@ public:
59 this, SLOT(handlePrompt(pam_handle *, QString, QLightDM::Greeter::PromptType, QLightDM::GreeterImpl::ResponseFuture)));
59 this, SLOT(handlePrompt(pam_handle *, QString, QLightDM::Greeter::PromptType, QLightDM::GreeterImpl::ResponseFuture)));
62 void start(QString username)
67 void start(QString username)
64− // Clear out any existing PAM interactions first (we can't simply
69+ // Clear out any existing PAM interactions first
65− // cancel our QFuture because QtConcurrent::run doesn't support cancel)
70+ cancelPam();
66− if (pamHandle != NULL) {
67− pam_handle *handle = pamHandle;
68− pamHandle = NULL; // to disable normal finishPam() handling
69− while (respond(QString())); // clear our local queue of QFutures
70− pam_end(handle, PAM_CONV_ERR);
73 AppData *appData = new AppData();
72 AppData *appData = new AppData();
74 appData->impl = this;
73 appData->impl = this;
@@ -241,6 +240,17 @@ private Q_SLOTS:
245+ // Unfortunately we can't simply cancel our QFuture because QtConcurrent::run doesn't support cancel
246+ if (pamHandle != NULL) {
247+ pam_handle *handle = pamHandle;
248+ pamHandle = NULL; // to disable normal finishPam() handling
249+ while (respond(QString())); // clear our local queue of QFutures
250+ pam_end(handle, PAM_CONV_ERR);
244 Greeter *greeter;
254 Greeter *greeter;
245 GreeterPrivate *greeterPrivate;
255 GreeterPrivate *greeterPrivate;
246 pam_handle* pamHandle;
256 pam_handle* pamHandle;