diff --git a/abstractrunner.cpp b/abstractrunner.cpp index e646f472d..246f9baf7 100644 --- a/abstractrunner.cpp +++ b/abstractrunner.cpp @@ -132,14 +132,14 @@ void AbstractRunner::reloadConfiguration() { } -void AbstractRunner::performMatch(Plasma::RunnerContext &globalContext) +void AbstractRunner::performMatch(Plasma::RunnerContext &localContext) { static const int reasonableRunTime = 1500; static const int fastEnoughTime = 250; d->runtime.restart(); -//TODO :this is a copy ctor - RunnerContext localContext(globalContext, 0); + + //The local copy is already obtained in the job match(localContext); // automatically rate limit runners that become slooow const int runtime = d->runtime.elapsed(); diff --git a/private/runnerjobs.cpp b/private/runnerjobs.cpp index caba338c5..c2aab6ad7 100644 --- a/private/runnerjobs.cpp +++ b/private/runnerjobs.cpp @@ -125,7 +125,7 @@ void DefaultRunnerPolicy::destructed(Job *job) FindMatchesJob::FindMatchesJob(Plasma::AbstractRunner *runner, Plasma::RunnerContext *context, QObject *parent) : ThreadWeaver::Job(parent), - m_context(context), + m_context(*context, 0), m_runner(runner), m_timer(0), m_stale(false) @@ -155,7 +155,7 @@ void FindMatchesJob::run() { // kDebug() << "Running match for " << m_runner->objectName() // << " in Thread " << thread()->id() << endl; - m_runner->performMatch(*m_context); + m_runner->performMatch(m_context); } int FindMatchesJob::priority() const diff --git a/private/runnerjobs.h b/private/runnerjobs.h index a0d88dc8b..7c0dcd48d 100644 --- a/private/runnerjobs.h +++ b/private/runnerjobs.h @@ -118,7 +118,7 @@ protected: void run(); private: - Plasma::RunnerContext *m_context; + Plasma::RunnerContext m_context; Plasma::AbstractRunner *m_runner; QTimer *m_timer; bool m_stale; diff --git a/runnermanager.cpp b/runnermanager.cpp index df6f5b9e5..cf0bec8dd 100644 --- a/runnermanager.cpp +++ b/runnermanager.cpp @@ -390,8 +390,9 @@ bool RunnerManager::execQuery(const QString &term, const QString &runnerName) //kDebug() << "ignored!"; return false; } - - r->performMatch(d->context); + //CHECK: the match is performed in the same thread, do we really need a local copy? + RunnerContext localContext(d->context, 0); + r->performMatch(localContext); //kDebug() << "succeeded with" << d->context.matches().count() << "results"; emit matchesChanged(d->context.matches()); return true;