From 756eaa3170df8bf59fa741d4c5235a80920446cf Mon Sep 17 00:00:00 2001 From: Rex Dieter Date: Tue, 13 Mar 2012 06:54:05 -0500 Subject: [PATCH] Nepomuk::Resource[Data|Watcher] thread-safety (kde#295474) --- kdelibs-4.8.1-nepomuk_threading.patch | 52 +++++++++++++++++++++++++++ kdelibs.spec | 11 +++++- 2 files changed, 62 insertions(+), 1 deletion(-) create mode 100644 kdelibs-4.8.1-nepomuk_threading.patch diff --git a/kdelibs-4.8.1-nepomuk_threading.patch b/kdelibs-4.8.1-nepomuk_threading.patch new file mode 100644 index 0000000..145472d --- /dev/null +++ b/kdelibs-4.8.1-nepomuk_threading.patch @@ -0,0 +1,52 @@ +diff --git a/nepomuk/core/resourcedata.cpp b/nepomuk/core/resourcedata.cpp +index abe55ea..e65e66e 100644 +--- a/nepomuk/core/resourcedata.cpp ++++ b/nepomuk/core/resourcedata.cpp +@@ -175,7 +175,7 @@ void Nepomuk::ResourceData::resetAll( bool isDelete ) + if( !m_uri.isEmpty() ) { + m_rm->m_initializedData.remove( m_uri ); + if( m_rm->m_watcher && m_addedToWatcher ) { +- m_rm->m_watcher->removeResource(Resource::fromResourceUri(m_uri)); ++ QMetaObject::invokeMethod(m_rm->m_watcher, "removeResource", Qt::AutoConnection, Q_ARG(Nepomuk::Resource, Resource::fromResourceUri(m_uri))); + m_addedToWatcher = false; + } + } +@@ -394,15 +394,16 @@ bool Nepomuk::ResourceData::load() + + if(!m_rm->m_watcher) { + m_rm->m_watcher = new ResourceWatcher(m_rm->m_manager); ++ m_rm->m_watcher->moveToThread(m_rm->m_manager->thread()); + QObject::connect( m_rm->m_watcher, SIGNAL(propertyAdded(Nepomuk::Resource, Nepomuk::Types::Property, QVariant)), + m_rm->m_manager, SLOT(slotPropertyAdded(Nepomuk::Resource, Nepomuk::Types::Property, QVariant)) ); + QObject::connect( m_rm->m_watcher, SIGNAL(propertyRemoved(Nepomuk::Resource, Nepomuk::Types::Property, QVariant)), + m_rm->m_manager, SLOT(slotPropertyRemoved(Nepomuk::Resource, Nepomuk::Types::Property, QVariant)) ); + m_rm->m_watcher->addResource( Nepomuk::Resource::fromResourceUri(m_uri) ); +- m_rm->m_watcher->start(); ++ QMetaObject::invokeMethod(m_rm->m_watcher, "start", Qt::AutoConnection); + } + else { +- m_rm->m_watcher->addResource( Nepomuk::Resource::fromResourceUri(m_uri) ); ++ QMetaObject::invokeMethod(m_rm->m_watcher, "addResource", Qt::AutoConnection, Q_ARG(Nepomuk::Resource, Nepomuk::Resource::fromResourceUri(m_uri)) ); + } + m_addedToWatcher = true; + +diff --git a/nepomuk/core/resourcewatcher.h b/nepomuk/core/resourcewatcher.h +index 06b9622..92b12f5 100644 +--- a/nepomuk/core/resourcewatcher.h ++++ b/nepomuk/core/resourcewatcher.h +@@ -93,6 +93,7 @@ namespace Nepomuk { + */ + virtual ~ResourceWatcher(); + ++ public Q_SLOTS: + /** + * \brief Add a type to be watched. + * +@@ -204,7 +205,6 @@ namespace Nepomuk { + */ + QList properties() const; + +- public Q_SLOTS: + /** + * \brief Start the signalling of changes. + * diff --git a/kdelibs.spec b/kdelibs.spec index 5243503..6ce4503 100644 --- a/kdelibs.spec +++ b/kdelibs.spec @@ -20,7 +20,7 @@ Summary: KDE Libraries Version: 4.8.1 -Release: 1%{?dist} +Release: 2%{?dist} Name: kdelibs Epoch: 6 @@ -129,9 +129,14 @@ Patch52: kdelibs-4.7.4-SOLID_UPNP.patch # add s390/s390x support in kjs Patch53: kdelibs-4.7.2-kjs-s390.patch +## upstream # don't set rpath on multiarch dirs, https://git.reviewboard.kde.org/r/103422 Patch101: kdelibs-4.8.0-cmake_cxx_implicit_link_directories.patch +# Nepomuk::Resource[Data|Watcher] thread-safety +# https://bugs.kde.org/show_bug.cgi?id=295474 +Patch102: kdelibs-4.8.1-nepomuk_threading.patch + ## security fix # Not Upstreamed? why not ? -- Rex Patch200: kdelibs-4.3.1-CVE-2009-2702.patch @@ -321,6 +326,7 @@ sed -i -e "s|@@VERSION_RELEASE@@|%{version}-%{release}|" kio/kio/kprotocolmanage # upstream patches %patch101 -p1 -b .cmake_cxx_implicit_link_directories +%patch102 -p1 -b .nepomuk_threading # security fixes %patch200 -p1 -b .CVE-2009-2702 @@ -574,6 +580,9 @@ rm -rf %{buildroot} %changelog +* Tue Mar 13 2012 Rex Dieter 6:4.8.1-2 +- Nepomuk::Resource[Data|Watcher] thread-safety (kde#295474) + * Mon Mar 05 2012 Radek Novacek 6:4.8.1-1 - 4.8.1 - Drop upstreamed patches