[prev in list] [next in list] [prev in thread] [next in thread]
List: kde-commits
Subject: Re: [kde-runtime] nepomuk/services/storage/lib: Cache the dbus interface for org.kde.nepomuk.DataMan
From: Sebastian_Trüg <sebastian () trueg ! de>
Date: 2012-02-06 19:17:07
Message-ID: 4F302733.2040200 () trueg ! de
[Download RAW message or body]
On 02/06/2012 07:18 PM, Vishesh Handa wrote:
> Oooo! Nice.
>
> I think we should probably do the same for the dms port in kdelibs.
>
> @Sebastian: Any rough timeline of when you plan to merge it?
It is already merged...
> On Mon, Feb 6, 2012 at 11:11 PM, David Faure <faure@kde.org
> <mailto:faure@kde.org>> wrote:
>
> Git commit 8f3b4c29f5605580f6d2955532f1440af54fecb8 by David Faure.
> Committed on 06/02/2012 at 18:39.
> Pushed by dfaure into branch 'master'.
>
> Cache the dbus interface for org.kde.nepomuk.DataManagement
>
> Regularly breaking into nepomukfeeder with gdb showed that it was always
> always in the code that connects via DBus to that service, since each
> and every job had to do that.
>
> I tested what happens when killing and restarting nepomukstorage,
> and QtDBus manages to reconnect just fine, with the same interface
> instance.
> KMail locks up or crashes in Soprano::Client::SocketHandler, but that's
> another story.
>
> CCMAIL: chrigi_1@fastmail.fm <mailto:chrigi_1@fastmail.fm>,
> sebastian@trueg.de <mailto:sebastian@trueg.de>
>
> M +2 -4 nepomuk/services/storage/lib/createresourcejob.cpp
> M +2 -6 nepomuk/services/storage/lib/describeresourcesjob.cpp
> M +18 -7 nepomuk/services/storage/lib/genericdatamanagementjob.cpp
> M +4 -0 nepomuk/services/storage/lib/genericdatamanagementjob_p.h
> M +4 -7 nepomuk/services/storage/lib/storeresourcesjob.cpp
>
> http://commits.kde.org/kde-runtime/8f3b4c29f5605580f6d2955532f1440af54fecb8
>
> diff --git a/nepomuk/services/storage/lib/createresourcejob.cpp
> b/nepomuk/services/storage/lib/createresourcejob.cpp
> index b0a1763..d2195fb 100644
> --- a/nepomuk/services/storage/lib/createresourcejob.cpp
> +++ b/nepomuk/services/storage/lib/createresourcejob.cpp
> @@ -49,11 +49,9 @@
> Nepomuk::CreateResourceJob::CreateResourceJob(const QList<QUrl>& types,
> : KJob(0),
> d(new Private)
> {
> - org::kde::nepomuk::DataManagement
> dms(QLatin1String(DMS_DBUS_SERVICE),
> -
> QLatin1String("/datamanagement"),
> -
> KDBusConnectionPool::threadConnection());
> + org::kde::nepomuk::DataManagement* dms =
> Nepomuk::dataManagementDBusInterface();
> QDBusPendingCallWatcher* dbusCallWatcher
> - = new
> QDBusPendingCallWatcher(dms.createResource(Nepomuk::DBus::convertUriList(types),
> + = new
> QDBusPendingCallWatcher(dms->createResource(Nepomuk::DBus::convertUriList(types),
> label,
>
> description,
>
> component.componentName()));
> diff --git a/nepomuk/services/storage/lib/describeresourcesjob.cpp
> b/nepomuk/services/storage/lib/describeresourcesjob.cpp
> index 60a4420..5fd4165 100644
> --- a/nepomuk/services/storage/lib/describeresourcesjob.cpp
> +++ b/nepomuk/services/storage/lib/describeresourcesjob.cpp
> @@ -49,13 +49,9 @@
> Nepomuk::DescribeResourcesJob::DescribeResourcesJob(const
> QList<QUrl>& resources
> : KJob(0),
> d(new Private)
> {
> - DBus::registerDBusTypes();
> -
> - org::kde::nepomuk::DataManagement
> dms(QLatin1String(DMS_DBUS_SERVICE),
> -
> QLatin1String("/datamanagement"),
> -
> KDBusConnectionPool::threadConnection());
> + org::kde::nepomuk::DataManagement* dms =
> Nepomuk::dataManagementDBusInterface();
> QDBusPendingCallWatcher* dbusCallWatcher
> - = new
> QDBusPendingCallWatcher(dms.describeResources(Nepomuk::DBus::convertUriList(resources),
> + = new
> QDBusPendingCallWatcher(dms->describeResources(Nepomuk::DBus::convertUriList(resources),
>
> int(flags),
>
> Nepomuk::DBus::convertUriList(targetGroups)));
> connect(dbusCallWatcher, SIGNAL(finished(QDBusPendingCallWatcher*)),
> diff --git
> a/nepomuk/services/storage/lib/genericdatamanagementjob.cpp
> b/nepomuk/services/storage/lib/genericdatamanagementjob.cpp
> index 3d79b62..a5d38f4 100644
> --- a/nepomuk/services/storage/lib/genericdatamanagementjob.cpp
> +++ b/nepomuk/services/storage/lib/genericdatamanagementjob.cpp
> @@ -30,6 +30,7 @@
>
> #include <QtCore/QVariant>
> #include <QtCore/QHash>
> +#include <QThreadStorage>
>
> #include <KDebug>
>
> @@ -42,14 +43,8 @@
> Nepomuk::GenericDataManagementJob::GenericDataManagementJob(const
> char *methodNa
>
> QGenericArgument val5)
> : KJob(0)
> {
> - // DBus types necessary for storeResources
> - DBus::registerDBusTypes();
> -
> - org::kde::nepomuk::DataManagement
> dms(QLatin1String(DMS_DBUS_SERVICE),
> -
> QLatin1String("/datamanagement"),
> -
> KDBusConnectionPool::threadConnection());
> QDBusPendingReply<> reply;
> - QMetaObject::invokeMethod(&dms,
> + QMetaObject::invokeMethod(Nepomuk::dataManagementDBusInterface(),
> methodName,
> Qt::DirectConnection,
> Q_RETURN_ARG(QDBusPendingReply<> , reply),
> @@ -86,4 +81,20 @@ void
> Nepomuk::GenericDataManagementJob::slotDBusCallFinished(QDBusPendingCallWat
> emitResult();
> }
>
> +QThreadStorage<OrgKdeNepomukDataManagementInterface *> s_perThreadDms;
> +
> +OrgKdeNepomukDataManagementInterface*
> Nepomuk::dataManagementDBusInterface()
> +{
> + if (!s_perThreadDms.hasLocalData()) {
> + // DBus types necessary for storeResources
> + DBus::registerDBusTypes();
> +
> + s_perThreadDms.setLocalData(
> + new
> org::kde::nepomuk::DataManagement(QLatin1String(DMS_DBUS_SERVICE),
> +
> QLatin1String("/datamanagement"),
> +
> KDBusConnectionPool::threadConnection()));
> + }
> + return s_perThreadDms.localData();
> +}
> +
> #include "genericdatamanagementjob_p.moc"
> diff --git
> a/nepomuk/services/storage/lib/genericdatamanagementjob_p.h
> b/nepomuk/services/storage/lib/genericdatamanagementjob_p.h
> index 4774ba0..a741ad6 100644
> --- a/nepomuk/services/storage/lib/genericdatamanagementjob_p.h
> +++ b/nepomuk/services/storage/lib/genericdatamanagementjob_p.h
> @@ -33,6 +33,7 @@
> #include <KJob>
>
> class QDBusPendingCallWatcher;
> +class OrgKdeNepomukDataManagementInterface;
>
> namespace Nepomuk {
> class GenericDataManagementJob : public KJob
> @@ -59,6 +60,9 @@ public:
> private Q_SLOTS:
> void slotDBusCallFinished(QDBusPendingCallWatcher*);
> };
> +
> +OrgKdeNepomukDataManagementInterface* dataManagementDBusInterface();
> +
> }
>
> #endif
> diff --git a/nepomuk/services/storage/lib/storeresourcesjob.cpp
> b/nepomuk/services/storage/lib/storeresourcesjob.cpp
> index 55f3637..592f280 100644
> --- a/nepomuk/services/storage/lib/storeresourcesjob.cpp
> +++ b/nepomuk/services/storage/lib/storeresourcesjob.cpp
> @@ -54,15 +54,12 @@
> Nepomuk::StoreResourcesJob::StoreResourcesJob(const
> Nepomuk::SimpleResourceGraph
> d( new Nepomuk::StoreResourcesJob::Private )
> {
> d->q = this;
> - DBus::registerDBusTypes();
>
> - org::kde::nepomuk::DataManagement
> dms(QLatin1String(DMS_DBUS_SERVICE),
> -
> QLatin1String("/datamanagement"),
> -
> QDBusConnection::sessionBus());
> + org::kde::nepomuk::DataManagement* dms =
> Nepomuk::dataManagementDBusInterface();
> QDBusPendingCallWatcher* dbusCallWatcher
> - = new QDBusPendingCallWatcher(dms.storeResources(
> resources.toList(), identificationMode,
> - flags,
> additionalMetadata,
> -
> component.componentName() ));
> + = new QDBusPendingCallWatcher(dms->storeResources(
> resources.toList(), identificationMode,
> + flags,
> additionalMetadata,
> +
> component.componentName() ));
>
> connect(dbusCallWatcher, SIGNAL(finished(QDBusPendingCallWatcher*)),
> this,
> SLOT(_k_slotDBusCallFinished(QDBusPendingCallWatcher*)));
>
>
>
>
> --
> Vishesh Handa
[prev in list] [next in list] [prev in thread] [next in thread]
Configure |
About |
News |
Add a list |
Sponsored by KoreLogic