[prev in list] [next in list] [prev in thread] [next in thread] 

List:       kde-core-devel
Subject:    Re: [patch] kwalletd timeouts
From:       Michael Leupold <lemma () confuego ! org>
Date:       2008-07-08 23:23:40
Message-ID: 200807090123.40180.lemma () confuego ! org
[Download RAW message or body]

Am Dienstag, 8. Juli 2008 schrieben Sie:
> > >Thus I propose the patch I attached which changes the (client)
> > > [...]
> > I propose changing both client and server behaviour.
> > The call to open the wallet is sent and replied to immediately,
> > indicating success in starting the opening. However, kwalletd notifies
> > the caller of an open wallet via signal, which the client must listen to.
> I agree that this is a lot cleaner. I'll give it a shot but having quite
> some stuff to do right now I don't know when I could fit it in. When's the
> deadline for getting this into 4.1 (the release schedules mentions tagging
> of rc1 tonight and "Only urgent fixes, such as those things fixing
> compilation errors") ?

So I just "nearly" got done but stumbled upon some issues and the fact that it 
just won't be ready for RC1. As including it after seems highly unsafe 
because the period that remains for testing is too short I think just pushing 
the timeouts a little (25s -> 5h) will at least give the bug less exposure.

Please review the patch so I can possibly still commit it before RC1 is being 
tagged.

Thanks,
Michael

["patch-kwalletd-timeout-mini.diff" (text/x-diff)]

Index: kdeui/util/kwallet.cpp
===================================================================
--- kdeui/util/kwallet.cpp	(Revision 829361)
+++ kdeui/util/kwallet.cpp	(Arbeitskopie)
@@ -204,13 +204,20 @@
 Wallet *Wallet::openWallet(const QString& name, WId w, OpenType ot) {
     if( w == 0 )
         kWarning() << "Pass a valid window to KWallet::Wallet::openWallet().";
+    
+    QDBusMessage openMessage = QDBusMessage::createMethodCall(
+        walletLauncher->getInterface().service(),
+        walletLauncher->getInterface().path(),
+        walletLauncher->getInterface().interface(),
+        (ot == Path) ? "openPath" : "open");
+    openMessage << name << qlonglong(w) << appid();
+    
     if (ot == Asynchronous) {
         Wallet *wallet = new Wallet(-1, name);
 
         // place an asynchronous call
-        QVariantList args;
-        args << name << qlonglong(w) << appid();
-        walletLauncher->getInterface().callWithCallback("open", args, wallet, \
SLOT(walletOpenResult(int)), SLOT(walletOpenError(const QDBusError&))); +        \
walletLauncher->getInterface().connection().callWithCallback(openMessage, wallet, +   \
SLOT(walletOpenResult(int)), SLOT(walletOpenError(const QDBusError&)), 18000000);  
         return wallet;
     }
@@ -219,14 +226,15 @@
     while( QWidget* widget = qApp->activePopupWidget())
         widget->close();
 
-    bool isPath = ot == Path;
-    QDBusReply<int> r = isPath ?
-        walletLauncher->getInterface().openPath(name, (qlonglong)w, appid()) :
-        walletLauncher->getInterface().open(name, (qlonglong)w, appid());
-    if (r.isValid()) {
-        int drc = r;
-        if (drc != -1) {
-            return new Wallet(drc, name);
+    QDBusMessage replyMessage = walletLauncher->getInterface().connection().call(
+        openMessage, QDBus::Block, 18000000);
+    if (replyMessage.type() == QDBusMessage::ReplyMessage) {
+        QDBusReply<int> r(replyMessage);
+        if (r.isValid()) {
+            int drc = r;
+            if (drc != -1) {
+                return new Wallet(drc, name);
+            }
         }
     }
 



[prev in list] [next in list] [prev in thread] [next in thread] 

Configure | About | News | Add a list | Sponsored by KoreLogic