[prev in list] [next in list] [prev in thread] [next in thread]
List: kde-commits
Subject: [kdelibs/KDE/4.10] solid/solid/backends/udisks2: make use of a private connection to the system bus
From: Lukáš Tinkl <lukas () kde ! org>
Date: 2012-11-29 14:31:50
Message-ID: 20121129143150.6C23FA6091 () git ! kde ! org
[Download RAW message or body]
Git commit d6f8d6def126aeab90088ab298541fb425386f4a by Lukáš Tinkl.
Committed on 29/11/2012 at 15:24.
Pushed by lukas into branch 'KDE/4.10'.
make use of a private connection to the system bus
not to block the main thread when running the Solid queries
asynchronously
Should fix, together with other optimizations in Dolphin and kfile,
https://bugzilla.redhat.com/show_bug.cgi?id=868530
patch by Dan Vrátil <dvratil@redhat.com>, reviewed by me
M +3 -2 solid/solid/backends/udisks2/udisksblock.cpp
M +1 -0 solid/solid/backends/udisks2/udisksblock.h
M +7 -6 solid/solid/backends/udisks2/udisksdevice.cpp
M +2 -0 solid/solid/backends/udisks2/udisksdevice.h
M +5 -4 solid/solid/backends/udisks2/udisksmanager.cpp
M +1 -0 solid/solid/backends/udisks2/udisksmanager.h
M +1 -1 solid/solid/backends/udisks2/udisksopticaldrive.cpp
http://commits.kde.org/kdelibs/d6f8d6def126aeab90088ab298541fb425386f4a
diff --git a/solid/solid/backends/udisks2/udisksblock.cpp \
b/solid/solid/backends/udisks2/udisksblock.cpp index f3cd1e8..027ea03 100644
--- a/solid/solid/backends/udisks2/udisksblock.cpp
+++ b/solid/solid/backends/udisks2/udisksblock.cpp
@@ -30,7 +30,8 @@
using namespace Solid::Backends::UDisks2;
Block::Block(Device *dev)
- : DeviceInterface(dev)
+ : DeviceInterface(dev),
+ m_connection(QDBusConnection::connectToBus(QDBusConnection::SystemBus, \
"Solid::Udisks2::Block::" + dev->udi())) {
m_devNum = m_device->prop("DeviceNumber").toULongLong();
m_devFile = QFile::decodeName(m_device->prop("Device").toByteArray());
@@ -40,7 +41,7 @@ Block::Block(Device *dev)
const QString path = "/org/freedesktop/UDisks2/block_devices";
QDBusMessage call = QDBusMessage::createMethodCall(UD2_DBUS_SERVICE, path,
\
DBUS_INTERFACE_INTROSPECT, "Introspect");
- QDBusPendingReply<QString> reply = \
QDBusConnection::systemBus().asyncCall(call); + QDBusPendingReply<QString> \
reply = m_connection.asyncCall(call); reply.waitForFinished();
if (reply.isValid()) {
diff --git a/solid/solid/backends/udisks2/udisksblock.h \
b/solid/solid/backends/udisks2/udisksblock.h index 19cb70a..65ef2b8 100644
--- a/solid/solid/backends/udisks2/udisksblock.h
+++ b/solid/solid/backends/udisks2/udisksblock.h
@@ -45,6 +45,7 @@ public:
virtual int deviceMinor() const;
virtual int deviceMajor() const;
private:
+ QDBusConnection m_connection;
dev_t m_devNum;
QString m_devFile;
};
diff --git a/solid/solid/backends/udisks2/udisksdevice.cpp \
b/solid/solid/backends/udisks2/udisksdevice.cpp index bf0ab0c..3508d57 100644
--- a/solid/solid/backends/udisks2/udisksdevice.cpp
+++ b/solid/solid/backends/udisks2/udisksdevice.cpp
@@ -92,18 +92,19 @@ static QString formatByteSize(double size)
Device::Device(const QString &udi)
: Solid::Ifaces::Device()
, m_udi(udi)
+ , m_connection(QDBusConnection::connectToBus(QDBusConnection::SystemBus, \
"Solid::Udisks2::Device::" + udi)) {
m_device = new QDBusInterface(UD2_DBUS_SERVICE, m_udi,
QString(), // no interface, we aggregate them
- QDBusConnection::systemBus());
+ m_connection);
if (m_device->isValid()) {
- QDBusConnection::systemBus().connect(UD2_DBUS_SERVICE, m_udi, \
DBUS_INTERFACE_PROPS, "PropertiesChanged", this, + \
m_connection.connect(UD2_DBUS_SERVICE, m_udi, DBUS_INTERFACE_PROPS, \
"PropertiesChanged", this,
\
SLOT(slotPropertiesChanged(QString,QVariantMap,QStringList)));
- QDBusConnection::systemBus().connect(UD2_DBUS_SERVICE, UD2_DBUS_PATH, \
DBUS_INTERFACE_MANAGER, "InterfacesAdded", + \
m_connection.connect(UD2_DBUS_SERVICE, UD2_DBUS_PATH, DBUS_INTERFACE_MANAGER, \
"InterfacesAdded",
this, \
SLOT(slotInterfacesAdded(QDBusObjectPath,QVariantMapMap)));
- QDBusConnection::systemBus().connect(UD2_DBUS_SERVICE, UD2_DBUS_PATH, \
DBUS_INTERFACE_MANAGER, "InterfacesRemoved", + \
m_connection.connect(UD2_DBUS_SERVICE, UD2_DBUS_PATH, DBUS_INTERFACE_MANAGER, \
"InterfacesRemoved",
this, \
SLOT(slotInterfacesRemoved(QDBusObjectPath,QStringList)));
initInterfaces();
@@ -676,7 +677,7 @@ QString Device::introspect() const
{
QDBusMessage call = QDBusMessage::createMethodCall(UD2_DBUS_SERVICE, m_udi,
DBUS_INTERFACE_INTROSPECT, \
"Introspect");
- QDBusPendingReply<QString> reply = QDBusConnection::systemBus().asyncCall(call);
+ QDBusPendingReply<QString> reply = m_connection.asyncCall(call);
reply.waitForFinished();
if (reply.isValid())
@@ -706,7 +707,7 @@ QVariantMap Device::allProperties() const
if (iface.startsWith("org.freedesktop.DBus"))
continue;
call.setArguments(QVariantList() << iface);
- QDBusPendingReply<QVariantMap> reply = \
QDBusConnection::systemBus().asyncCall(call); + QDBusPendingReply<QVariantMap> \
reply = m_connection.asyncCall(call); reply.waitForFinished();
if (reply.isValid())
diff --git a/solid/solid/backends/udisks2/udisksdevice.h \
b/solid/solid/backends/udisks2/udisksdevice.h index 7e27634..ee6bc1b 100644
--- a/solid/solid/backends/udisks2/udisksdevice.h
+++ b/solid/solid/backends/udisks2/udisksdevice.h
@@ -104,6 +104,8 @@ private:
void checkCache(const QString &key) const;
QString introspect() const;
+
+ QDBusConnection m_connection;
};
}
diff --git a/solid/solid/backends/udisks2/udisksmanager.cpp \
b/solid/solid/backends/udisks2/udisksmanager.cpp index 7f9c9b0..e781abb 100644
--- a/solid/solid/backends/udisks2/udisksmanager.cpp
+++ b/solid/solid/backends/udisks2/udisksmanager.cpp
@@ -32,9 +32,10 @@ using namespace Solid::Backends::Shared;
Manager::Manager(QObject *parent)
: Solid::Ifaces::DeviceManager(parent),
+ m_connection(QDBusConnection::connectToBus(QDBusConnection::SystemBus, \
"Solid::Udisks2")), m_manager(UD2_DBUS_SERVICE,
UD2_DBUS_PATH,
- QDBusConnection::systemBus())
+ m_connection)
{
m_supportedInterfaces
<< Solid::DeviceInterface::GenericInterface
@@ -59,9 +60,9 @@ Manager::Manager(QObject *parent)
\
"org.freedesktop.DBus",
\
"ListActivatableNames");
- QDBusReply<QStringList> reply = QDBusConnection::systemBus().call(message);
+ QDBusReply<QStringList> reply = m_connection.call(message);
if (reply.isValid() && reply.value().contains(UD2_DBUS_SERVICE)) {
- QDBusConnection::systemBus().interface()->startService(UD2_DBUS_SERVICE);
+ m_connection.interface()->startService(UD2_DBUS_SERVICE);
serviceFound = true;
}
}
@@ -154,7 +155,7 @@ void Manager::introspect(const QString & path, bool checkOptical)
if (checkOptical) {
Device device(udi);
if (device.mightBeOpticalDisc()) {
- QDBusConnection::systemBus().connect(UD2_DBUS_SERVICE, udi, \
DBUS_INTERFACE_PROPS, "PropertiesChanged", this, + \
m_connection.connect(UD2_DBUS_SERVICE, udi, DBUS_INTERFACE_PROPS, \
"PropertiesChanged", this,
\
SLOT(slotMediaChanged(QDBusMessage)));
if (!device.isOpticalDisc()) // skip empty CD disc
continue;
diff --git a/solid/solid/backends/udisks2/udisksmanager.h \
b/solid/solid/backends/udisks2/udisksmanager.h index fb929ce..bf74703 100644
--- a/solid/solid/backends/udisks2/udisksmanager.h
+++ b/solid/solid/backends/udisks2/udisksmanager.h
@@ -60,6 +60,7 @@ private:
const QStringList &deviceCache();
void introspect(const QString & path, bool checkOptical = false);
QSet<Solid::DeviceInterface::Type> m_supportedInterfaces;
+ QDBusConnection m_connection;
org::freedesktop::DBus::ObjectManager m_manager;
QStringList m_deviceCache;
};
diff --git a/solid/solid/backends/udisks2/udisksopticaldrive.cpp \
b/solid/solid/backends/udisks2/udisksopticaldrive.cpp index f4351a7..8ad3df0 100644
--- a/solid/solid/backends/udisks2/udisksopticaldrive.cpp
+++ b/solid/solid/backends/udisks2/udisksopticaldrive.cpp
@@ -59,7 +59,7 @@ bool OpticalDrive::eject()
m_device->broadcastActionRequested("eject");
const QString path = m_device->udi();
- QDBusConnection c = QDBusConnection::systemBus();
+ QDBusConnection c = QDBusConnection::connectToBus(QDBusConnection::SystemBus, \
"Solid::Udisks2::OpticalDrive::" + path);
// if the device is mounted, unmount first
QString blockPath;
[prev in list] [next in list] [prev in thread] [next in thread]
Configure |
About |
News |
Add a list |
Sponsored by KoreLogic