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

List:       kde-commits
Subject:    KDE/kdebase/workspace/powerdevil/daemon
From:       Dario Freddi <drf () kde ! org>
Date:       2010-11-28 14:55:26
Message-ID: 20101128145526.A3D9CAC8A3 () svn ! kde ! org
[Download RAW message or body]

SVN commit 1201738 by dafre:

BUG: 257326

Be safer when initializing the bus watcher and make sure we protect each call correctly

 M  +14 -9     powerdevilpolicyagent.cpp  
 M  +2 -1      powerdevilpolicyagent.h  


--- trunk/KDE/kdebase/workspace/powerdevil/daemon/powerdevilpolicyagent.cpp #1201737:1201738
@@ -59,6 +59,7 @@
     : QObject(parent)
     , m_sessionIsBeingInterrupted(false)
     , m_lastCookie(0)
+    , m_busWatcher(new QDBusServiceWatcher(this))
 {
     Q_ASSERT(!s_globalPolicyAgent->q);
     s_globalPolicyAgent->q = this;
@@ -112,11 +113,10 @@
     }
 
     // Now set up our service watcher
-    m_busWatcher = new QDBusServiceWatcher(this);
-    m_busWatcher->setConnection(QDBusConnection::sessionBus());
-    m_busWatcher->setWatchMode(QDBusServiceWatcher::WatchForUnregistration);
+    m_busWatcher.data()->setConnection(QDBusConnection::sessionBus());
+    m_busWatcher.data()->setWatchMode(QDBusServiceWatcher::WatchForUnregistration);
 
-    connect(m_busWatcher, SIGNAL(serviceUnregistered(QString)),
+    connect(m_busWatcher.data(), SIGNAL(serviceUnregistered(QString)),
             this, SLOT(onServiceUnregistered(QString)));
 }
 
@@ -198,8 +198,10 @@
 
     m_cookieToAppName.insert(m_lastCookie, qMakePair<QString, QString>(appName, reason));
 
+    if (!m_busWatcher.isNull() && !service.isEmpty()) {
     m_cookieToBusService.insert(m_lastCookie, service);
-    m_busWatcher->addWatchedService(service);
+        m_busWatcher.data()->addWatchedService(service);
+    }
 
     addInhibitionTypeHelper(m_lastCookie, static_cast< PolicyAgent::RequiredPolicies >(types));
 
@@ -215,11 +217,12 @@
     m_cookieToAppName.insert(m_lastCookie, qMakePair<QString, QString>(appName, reason));
 
     // Retrieve the service, if we've been called from DBus
-    if (calledFromDBus()) {
+    if (calledFromDBus() && !m_busWatcher.isNull()) {
+        if (!message().service().isEmpty()) {
         m_cookieToBusService.insert(m_lastCookie, message().service());
-
-        m_busWatcher->addWatchedService(message().service());
+            m_busWatcher.data()->addWatchedService(message().service());
     }
+    }
 
     addInhibitionTypeHelper(m_lastCookie, static_cast< PolicyAgent::RequiredPolicies >(types));
 
@@ -262,7 +265,9 @@
 {
     m_cookieToAppName.remove(cookie);
     if (m_cookieToBusService.contains(cookie)) {
-        m_busWatcher->removeWatchedService(m_cookieToBusService[cookie]);
+        if (!m_busWatcher.isNull()) {
+            m_busWatcher.data()->removeWatchedService(m_cookieToBusService[cookie]);
+        }
         m_cookieToBusService.remove(cookie);
     }
 
--- trunk/KDE/kdebase/workspace/powerdevil/daemon/powerdevilpolicyagent.h #1201737:1201738
@@ -23,6 +23,7 @@
 
 #include <QtCore/QObject>
 #include <QtCore/QHash>
+#include <QtCore/QWeakPointer>
 
 #include <QtDBus/QDBusContext>
 
@@ -96,7 +97,7 @@
 
     uint m_lastCookie;
 
-    QDBusServiceWatcher *m_busWatcher;
+    QWeakPointer< QDBusServiceWatcher > m_busWatcher;
 
     friend class Core;
     friend class FdoConnector;
[prev in list] [next in list] [prev in thread] [next in thread] 

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