[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