summaryrefslogtreecommitdiff
path: root/src/lib/corelib/tools/id.cpp
diff options
context:
space:
mode:
Diffstat (limited to 'src/lib/corelib/tools/id.cpp')
-rw-r--r--src/lib/corelib/tools/id.cpp34
1 files changed, 13 insertions, 21 deletions
diff --git a/src/lib/corelib/tools/id.cpp b/src/lib/corelib/tools/id.cpp
index 66c5f85d7..1c61792e6 100644
--- a/src/lib/corelib/tools/id.cpp
+++ b/src/lib/corelib/tools/id.cpp
@@ -43,6 +43,7 @@
#include <QtCore/qbytearray.h>
#include <QtCore/qhash.h>
+#include <mutex>
#include <vector>
namespace qbs {
@@ -117,11 +118,19 @@ static int firstUnusedId = Id::IdsPerPlugin * Id::ReservedPlugins;
static QHash<int, StringHolder> stringFromId;
static IdCache idFromString;
+static std::mutex mutex;
+
+static QByteArray getStringFromId(int id)
+{
+ std::lock_guard<std::mutex> lock(mutex);
+ return stringFromId.value(id).str;
+}
static int theId(const char *str, int n = 0)
{
QBS_ASSERT(str && *str, return 0);
StringHolder sh(str, n);
+ std::lock_guard<std::mutex> lock(mutex);
int res = idFromString.value(sh, 0);
if (res == 0) {
res = firstUnusedId++;
@@ -178,7 +187,7 @@ Id::Id(const QByteArray &name)
QByteArray Id::name() const
{
- return stringFromId.value(m_id).str;
+ return getStringFromId(m_id);
}
/*!
@@ -193,7 +202,7 @@ QByteArray Id::name() const
QString Id::toString() const
{
- return QString::fromUtf8(stringFromId.value(m_id).str);
+ return QString::fromUtf8(getStringFromId(m_id));
}
/*!
@@ -205,7 +214,7 @@ QString Id::toString() const
QVariant Id::toSetting() const
{
- return QVariant(QString::fromUtf8(stringFromId.value(m_id).str));
+ return QVariant(QString::fromUtf8(getStringFromId(m_id)));
}
/*!
@@ -260,26 +269,9 @@ Id Id::withPrefix(const char *prefix) const
return Id(ba.constData());
}
-
-/*!
- Associates a id with its uid and its string
- representation.
-
- The uid should be taken from the plugin's private range.
-
- \sa fromSetting()
-*/
-
-void Id::registerId(int uid, const char *name)
-{
- StringHolder sh(name, 0);
- idFromString[sh] = uid;
- stringFromId[uid] = sh;
-}
-
bool Id::operator==(const char *name) const
{
- const char *string = stringFromId.value(m_id).str;
+ const char *string = getStringFromId(m_id);
if (string && name)
return strcmp(string, name) == 0;
else