[prev in list] [next in list] [prev in thread] [next in thread]
List: kde-panel-devel
Subject: KDE/kdelibs/plasma
From: Aaron J. Seigo <aseigo () kde ! org>
Date: 2011-01-16 21:46:55
Message-ID: 20110116214655.7EE0CAC8B5 () svn ! kde ! org
[Download RAW message or body]
SVN commit 1214926 by aseigo:
QString is not thread-safe; since the matches get shuttled around between \
threads, we need to protect access to it. as writing is rare, this should \
hopefully not degrade performance too much. if it passes testing, then i \
will backport this. CCBUG:238556
CCMAIL:plasma-devel@kde.org
M +37 -0 querymatch.cpp
--- trunk/KDE/kdelibs/plasma/querymatch.cpp #1214925:1214926
@@ -21,6 +21,7 @@
#include <QAction>
#include <QIcon>
+#include <QReadWriteLock>
#include <QSharedData>
#include <QStringList>
#include <QVariant>
@@ -38,6 +39,7 @@
public:
QueryMatchPrivate(AbstractRunner *r)
: QSharedData(),
+ lock(new QReadWriteLock(QReadWriteLock::Recursive)),
runner(r),
type(QueryMatch::ExactMatch),
relevance(.7),
@@ -47,6 +49,30 @@
{
}
+ QueryMatchPrivate(const QueryMatchPrivate &other)
+ : QSharedData(other),
+ lock(new QReadWriteLock(QReadWriteLock::Recursive))
+ {
+ QReadLocker lock(other.lock);
+ runner = other.runner;
+ type = other.type;
+ relevance = other.relevance;
+ selAction = other.selAction;
+ enabled = other.enabled;
+ idSetByData = other.idSetByData;
+ id = other.id;
+ text = other.text;
+ subtext = other.subtext;
+ icon = other.icon;
+ data = other.data;
+ }
+
+ ~QueryMatchPrivate()
+ {
+ delete lock;
+ }
+
+ QReadWriteLock *lock;
QWeakPointer<AbstractRunner> runner;
QueryMatch::Type type;
QString id;
@@ -116,16 +142,19 @@
void QueryMatch::setText(const QString &text)
{
+ QWriteLocker locker(d->lock);
d->text = text;
}
void QueryMatch::setSubtext(const QString &subtext)
{
+ QWriteLocker locker(d->lock);
d->subtext = subtext;
}
void QueryMatch::setData(const QVariant & data)
{
+ QWriteLocker locker(d->lock);
d->data = data;
if (d->id.isEmpty() || d->idSetByData) {
@@ -139,6 +168,7 @@
void QueryMatch::setId(const QString &id)
{
+ QWriteLocker locker(d->lock);
if (d->runner) {
d->id = d->runner.data()->id();
}
@@ -152,26 +182,31 @@
void QueryMatch::setIcon(const QIcon &icon)
{
+ QWriteLocker locker(d->lock);
d->icon = icon;
}
QVariant QueryMatch::data() const
{
+ QReadLocker locker(d->lock);
return d->data;
}
QString QueryMatch::text() const
{
+ QReadLocker locker(d->lock);
return d->text;
}
QString QueryMatch::subtext() const
{
+ QReadLocker locker(d->lock);
return d->subtext;
}
QIcon QueryMatch::icon() const
{
+ QReadLocker locker(d->lock);
return d->icon;
}
@@ -206,6 +241,8 @@
return d->relevance < other.d->relevance;
}
+ QReadLocker locker(d->lock);
+ QReadLocker otherLocker(other.d->lock);
// when resorting to sort by alpha, we want the
// reverse sort order!
return d->text > other.d->text;
_______________________________________________
Plasma-devel mailing list
Plasma-devel@kde.org
https://mail.kde.org/mailman/listinfo/plasma-devel
[prev in list] [next in list] [prev in thread] [next in thread]
Configure |
About |
News |
Add a list |
Sponsored by KoreLogic