backport kwallet synchronous mode fix (kde#254198)
This commit is contained in:
parent
0509005e1e
commit
865e874a2c
|
@ -0,0 +1,86 @@
|
||||||
|
From f8fea3f01c85eb0d6d479647ac27fe431846a1ae Mon Sep 17 00:00:00 2001
|
||||||
|
From: Valentin Rusu <kde@rusu.info>
|
||||||
|
Date: Sun, 1 Sep 2013 01:16:28 +0200
|
||||||
|
Subject: Fix the synchronous-mode wallet open logic
|
||||||
|
|
||||||
|
BUG: 254198
|
||||||
|
|
||||||
|
The wallet opening logic, for the synchronous mode, had a nested
|
||||||
|
event loops problem, leading to frozen kwalletd. That was because
|
||||||
|
kwalletd wasn't using qdbus delayed replies. kdelibs used
|
||||||
|
asynchronous open methods even for the synchronous mode, coupled
|
||||||
|
with an internal event loop to simulate synchronous mode.
|
||||||
|
This commit removes that internal event loop, as the kwalletd now
|
||||||
|
blocks on synchronous wallet open requests.
|
||||||
|
---
|
||||||
|
kdeui/util/kwallet.cpp | 28 ++++++++--------------------
|
||||||
|
1 file changed, 8 insertions(+), 20 deletions(-)
|
||||||
|
|
||||||
|
diff --git a/kdeui/util/kwallet.cpp b/kdeui/util/kwallet.cpp
|
||||||
|
index bbb7129..67a33d6 100644
|
||||||
|
--- a/kdeui/util/kwallet.cpp
|
||||||
|
+++ b/kdeui/util/kwallet.cpp
|
||||||
|
@@ -221,7 +221,6 @@ public:
|
||||||
|
QString folder;
|
||||||
|
int handle;
|
||||||
|
int transactionId;
|
||||||
|
- QPointer<QEventLoop> loop;
|
||||||
|
};
|
||||||
|
|
||||||
|
#ifdef HAVE_KSECRETSSERVICE
|
||||||
|
@@ -477,18 +476,18 @@ Wallet *Wallet::openWallet(const QString& name, WId w, OpenType ot) {
|
||||||
|
connect(&walletLauncher->getInterface(), SIGNAL(walletAsyncOpened(int,int)),
|
||||||
|
wallet, SLOT(walletAsyncOpened(int,int)));
|
||||||
|
|
||||||
|
- // Use an eventloop for synchronous calls
|
||||||
|
- QEventLoop loop;
|
||||||
|
- if (ot == Synchronous || ot == Path) {
|
||||||
|
- connect(wallet, SIGNAL(walletOpened(bool)), &loop, SLOT(quit()));
|
||||||
|
- }
|
||||||
|
-
|
||||||
|
// Make sure the password prompt window will be visible and activated
|
||||||
|
KWindowSystem::allowExternalProcessWindowActivation();
|
||||||
|
|
||||||
|
// do the call
|
||||||
|
QDBusReply<int> r;
|
||||||
|
- if (ot == Synchronous || ot == Asynchronous) {
|
||||||
|
+ if (ot == Synchronous) {
|
||||||
|
+ r = walletLauncher->getInterface().open(name, (qlonglong)w, appid());
|
||||||
|
+ // after this call, r would contain a transaction id >0 if OK or -1 if NOK
|
||||||
|
+ // if OK, the slot walletAsyncOpened should have been received, but the transaction id
|
||||||
|
+ // will not match. We'll get that handle from the reply - see below
|
||||||
|
+ }
|
||||||
|
+ else if (ot == Asynchronous) {
|
||||||
|
r = walletLauncher->getInterface().openAsync(name, (qlonglong)w, appid(), true);
|
||||||
|
} else if (ot == Path) {
|
||||||
|
r = walletLauncher->getInterface().openPathAsync(name, (qlonglong)w, appid(), true);
|
||||||
|
@@ -510,14 +509,7 @@ Wallet *Wallet::openWallet(const QString& name, WId w, OpenType ot) {
|
||||||
|
delete wallet;
|
||||||
|
wallet = 0;
|
||||||
|
} else {
|
||||||
|
- // wait for the daemon's reply
|
||||||
|
- // store a pointer to the event loop so it can be quit in error case
|
||||||
|
- wallet->d->loop = &loop;
|
||||||
|
- loop.exec();
|
||||||
|
- if (wallet->d->handle < 0) {
|
||||||
|
- delete wallet;
|
||||||
|
- return 0;
|
||||||
|
- }
|
||||||
|
+ wallet->d->handle = r.value();
|
||||||
|
}
|
||||||
|
} else if (ot == Asynchronous) {
|
||||||
|
if (wallet->d->transactionId < 0) {
|
||||||
|
@@ -1517,10 +1509,6 @@ Wallet::EntryType Wallet::entryType(const QString& key) {
|
||||||
|
|
||||||
|
void Wallet::WalletPrivate::walletServiceUnregistered()
|
||||||
|
{
|
||||||
|
- if (loop) {
|
||||||
|
- loop->quit();
|
||||||
|
- }
|
||||||
|
-
|
||||||
|
if (handle >= 0) {
|
||||||
|
q->slotWalletClosed(handle);
|
||||||
|
}
|
||||||
|
--
|
||||||
|
1.8.3.1
|
||||||
|
|
10
kdelibs.spec
10
kdelibs.spec
|
@ -38,7 +38,7 @@ Source10: SOLID_HAL_LEGACY.sh
|
||||||
|
|
||||||
Summary: KDE Libraries
|
Summary: KDE Libraries
|
||||||
Version: 4.11.1
|
Version: 4.11.1
|
||||||
Release: 1%{?dist}
|
Release: 2%{?dist}
|
||||||
|
|
||||||
Name: kdelibs
|
Name: kdelibs
|
||||||
Epoch: 6
|
Epoch: 6
|
||||||
|
@ -168,6 +168,9 @@ Patch092: return-application-icons-properly.patch
|
||||||
# revert disabling of packagekit
|
# revert disabling of packagekit
|
||||||
Patch093: turn-the-packagekit-support-feature-off-by-default.patch
|
Patch093: turn-the-packagekit-support-feature-off-by-default.patch
|
||||||
|
|
||||||
|
# https://bugs.kde.org/254198
|
||||||
|
Patch100: Fix-the-synchronous-mode-wallet-open-logic.patch
|
||||||
|
|
||||||
## security fix
|
## security fix
|
||||||
|
|
||||||
# rhel patches
|
# rhel patches
|
||||||
|
@ -361,6 +364,8 @@ sed -i -e "s|@@VERSION_RELEASE@@|%{version}-%{release}|" kio/kio/kprotocolmanage
|
||||||
%patch092 -p1 -R -b .return-application-icons-properly
|
%patch092 -p1 -R -b .return-application-icons-properly
|
||||||
%patch093 -p1 -R -b .turn-the-packagekit-support-feature-off-by-default
|
%patch093 -p1 -R -b .turn-the-packagekit-support-feature-off-by-default
|
||||||
|
|
||||||
|
%patch100 -p1 -b .Fix-the-synchronous-mode-wallet-open-logic
|
||||||
|
|
||||||
# security fixes
|
# security fixes
|
||||||
|
|
||||||
# rhel patches
|
# rhel patches
|
||||||
|
@ -609,6 +614,9 @@ gtk-update-icon-cache %{_kde4_iconsdir}/hicolor &> /dev/null || :
|
||||||
|
|
||||||
|
|
||||||
%changelog
|
%changelog
|
||||||
|
* Tue Sep 03 2013 Rex Dieter <rdieter@fedoraproject.org> 6:4.11.1-2
|
||||||
|
- backport kwallet synchronous mode fix (kde#254198)
|
||||||
|
|
||||||
* Tue Sep 03 2013 Rex Dieter <rdieter@fedoraproject.org> - 6:4.11.1-1
|
* Tue Sep 03 2013 Rex Dieter <rdieter@fedoraproject.org> - 6:4.11.1-1
|
||||||
- 4.11.1
|
- 4.11.1
|
||||||
- include SOLID_HAL_LEGACY hack (el6)
|
- include SOLID_HAL_LEGACY hack (el6)
|
||||||
|
|
Loading…
Reference in New Issue