summaryrefslogtreecommitdiffstats
path: root/src/dbus/qdbusinterface.cpp
diff options
context:
space:
mode:
authorMarc Mutz <marc.mutz@kdab.com>2012-08-24 12:06:03 +0200
committerThe Qt Project <gerrit-noreply@qt-project.org>2012-09-22 19:19:37 +0200
commit373a7277db0583fbbb8ed61f9f61d6f77ed95da4 (patch)
treef530a3e205770802a2580789e8e5eb487065fedb /src/dbus/qdbusinterface.cpp
parentf799e57151dbd236f30d4ffb20d6c331b6e1a388 (diff)
QDBusMetaTypeId: don't cache the result of qMetaTypeId<>() in static ints
There's not much point in caching the result of qMetaTypeId<>, because it's already internally memoised. In addition, the code that initialised the static int caches wasn't protected against concurrent access under the assumption that the operations performed were thread-safe. That is true for most of them, but not for the stores to the static ints, which race against each other: // Thread A // Thread B r1 = initialized /*=false*/ r1 = initialized /*=false*/ r2 = qMetaTypeId<...>(); r2 = qMetaTypeId<...>(); message = r2; message = r2; // race, ditto for all other ints To fix, turn the ints into inline functions that just call the respective qMetaTypeId<>() function. Change-Id: I5aa80c624872c3867232abc26ffdcde70cd54022 Reviewed-by: Thiago Macieira <thiago.macieira@intel.com>
Diffstat (limited to 'src/dbus/qdbusinterface.cpp')
-rw-r--r--src/dbus/qdbusinterface.cpp8
1 files changed, 4 insertions, 4 deletions
diff --git a/src/dbus/qdbusinterface.cpp b/src/dbus/qdbusinterface.cpp
index 47b5b7b173..29d00077ae 100644
--- a/src/dbus/qdbusinterface.cpp
+++ b/src/dbus/qdbusinterface.cpp
@@ -106,13 +106,13 @@ static void copyArgument(void *to, int id, const QVariant &arg)
return;
}
- if (id == QDBusMetaTypeId::variant) {
+ if (id == QDBusMetaTypeId::variant()) {
*reinterpret_cast<QDBusVariant *>(to) = arg.value<QDBusVariant>();
return;
- } else if (id == QDBusMetaTypeId::objectpath) {
+ } else if (id == QDBusMetaTypeId::objectpath()) {
*reinterpret_cast<QDBusObjectPath *>(to) = arg.value<QDBusObjectPath>();
return;
- } else if (id == QDBusMetaTypeId::signature) {
+ } else if (id == QDBusMetaTypeId::signature()) {
*reinterpret_cast<QDBusSignature *>(to) = arg.value<QDBusSignature>();
return;
}
@@ -123,7 +123,7 @@ static void copyArgument(void *to, int id, const QVariant &arg)
}
// if we got here, it's either an un-dermarshalled type or a mismatch
- if (arg.userType() != QDBusMetaTypeId::argument) {
+ if (arg.userType() != QDBusMetaTypeId::argument()) {
// it's a mismatch
//qWarning?
return;