Hello community,

here is the log from the commit of package polkit-qt5-1 for openSUSE:Factory 
checked in at 2014-08-14 14:58:12
++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
Comparing /work/SRC/openSUSE:Factory/polkit-qt5-1 (Old)
 and      /work/SRC/openSUSE:Factory/.polkit-qt5-1.new (New)
++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++

Package is "polkit-qt5-1"

Changes:
--------
--- /work/SRC/openSUSE:Factory/polkit-qt5-1/polkit-qt5-1.changes        
2014-07-11 20:06:07.000000000 +0200
+++ /work/SRC/openSUSE:Factory/.polkit-qt5-1.new/polkit-qt5-1.changes   
2014-08-14 14:58:33.000000000 +0200
@@ -1,0 +2,6 @@
+Wed Aug 13 20:32:57 UTC 2014 - [email protected]
+
+- Added do-not-use-global-static-systembus-instance.patch from
+  upstream, fixes crash on DBus disconnect
+
+-------------------------------------------------------------------

New:
----
  do-not-use-global-static-systembus-instance.patch

++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++

Other differences:
------------------
++++++ polkit-qt5-1.spec ++++++
--- /var/tmp/diff_new_pack.26dBFF/_old  2014-08-14 14:58:34.000000000 +0200
+++ /var/tmp/diff_new_pack.26dBFF/_new  2014-08-14 14:58:34.000000000 +0200
@@ -25,6 +25,8 @@
 Url:            
http://api.kde.org/kdesupport-api/kdesupport-apidocs/polkit-qt/html/
 Source:         
http://download.kde.org/stable/apps/KDE4.x/admin/polkit-qt-1-%{version}.tar.bz2
 Source1:        baselibs.conf
+# PATCH-FIX-UPSTREAM do-not-use-global-static-systembus-instance.patch
+Patch0:         do-not-use-global-static-systembus-instance.patch
 BuildRequires:  cmake >= 2.8.12
 BuildRequires:  extra-cmake-modules
 BuildRequires:  kf5-filesystem
@@ -66,6 +68,7 @@
 
 %prep
 %setup -q -n polkit-qt-1-%{version}
+%patch0 -p1
 
 %build
   %cmake_kf5 -d build -- -DUSE_QT5=ON -DUSE_QT4=OFF

++++++ do-not-use-global-static-systembus-instance.patch ++++++
From: Harald Sitter <[email protected]>
Date: Fri, 01 Aug 2014 14:34:03 +0000
Subject: do not use global static systembus instance
X-Git-Url: 
http://quickgit.kde.org/?p=polkit-qt-1.git&a=commitdiff&h=88c6e9334c8440721189ef7d020fa94d47f30f8b
---
do not use global static systembus instance

global static destruction order cannot be controlled and we need our bus
to disconnect from the consolekit signals, so use our own bus instance
to connect to systembus signals

REVIEW: 119545
---


--- a/core/polkitqt1-authority.cpp
+++ b/core/polkitqt1-authority.cpp
@@ -83,7 +83,10 @@
     // Polkit will return NULL on failures, hence we use it instead of 0
     Private(Authority *qq) : q(qq)
             , pkAuthority(NULL)
-            , m_hasError(false) {}
+            , m_hasError(false)
+            , m_systemBus(0)
+    {
+    }
 
     ~Private();
 
@@ -103,6 +106,13 @@
     bool m_hasError;
     Authority::ErrorCode m_lastError;
     QString m_errorDetails;
+    // Local system bus. QDBusConnection::systemBus() may only be savely used
+    // inside a QCoreApplication scope as for example destruction of connected
+    // objects need to happen before the bus disappears. Since this class 
however
+    // is a global static and systemBus() internally is a global static we
+    // cannot assure destruction order. Instead we create a local copy of the
+    // global systemBus instance so we can make life time to our needs.
+    // This prevents crashes when cleaning up the global statics.
     QDBusConnection *m_systemBus;
     GCancellable *m_checkAuthorizationCancellable,
     *m_enumerateActionsCancellable,
@@ -127,6 +137,7 @@
 
 Authority::Private::~Private()
 {
+    delete m_systemBus;
     g_object_unref(m_checkAuthorizationCancellable);
     g_object_unref(m_enumerateActionsCancellable);
     g_object_unref(m_registerAuthenticationAgentCancellable);
@@ -169,6 +180,9 @@
     QDBusError dbus_error;
 
     g_type_init();
+
+    m_systemBus = new 
QDBusConnection(QDBusConnection::connectToBus(QDBusConnection::SystemBus,
+                                                                    
QString("polkit_qt_system_bus")));
 
     m_checkAuthorizationCancellable = g_cancellable_new();
     m_enumerateActionsCancellable = g_cancellable_new();
@@ -219,7 +233,7 @@
 
     // then we need to extract all seats from ConsoleKit
     QDBusMessage msg = QDBusMessage::createMethodCall(consoleKitService, 
consoleKitManagerPath, consoleKitManagerInterface, "GetSeats");
-    msg = QDBusConnection::systemBus().call(msg);
+    msg = m_systemBus->call(msg);
     if (!msg.arguments().isEmpty()) {
         // this method returns a list with present seats
         QList<QString> seats;
@@ -256,8 +270,7 @@
 void Authority::Private::dbusSignalAdd(const QString &service, const QString 
&path, const QString &interface, const QString &name)
 {
     // FIXME: This code seems to be nonfunctional - it needs to be fixed 
somewhere (is it Qt BUG?)
-    QDBusConnection::systemBus().connect(service, path, interface, name,
-                                         q, SLOT(dbusFilter(QDBusMessage)));
+    m_systemBus->connect(service, path, interface, name, q, 
SLOT(dbusFilter(QDBusMessage)));
 }
 
 void Authority::Private::dbusFilter(const QDBusMessage &message)
-- 
To unsubscribe, e-mail: [email protected]
For additional commands, e-mail: [email protected]

Reply via email to