[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