Q_DECLARE_TYPEINFO(QResourceRoot, Q_MOVABLE_TYPE);
-Q_GLOBAL_STATIC_WITH_ARGS(QMutex, resourceMutex, (QMutex::Recursive))
+static std::recursive_mutex qGlobalResourceMutex;
typedef QList<QResourceRoot*> ResourceList;
Q_GLOBAL_STATIC(ResourceList, resourceList)
QResourcePrivate::load(const QString &file)
{
related.clear();
- QMutexLocker lock(resourceMutex());
+ std::lock_guard<std::recursive_mutex> lock(qGlobalResourceMutex);
const ResourceList *list = resourceList();
QString cleaned = QDir::cleanPath(file);
for(int i = 0; i < list->size(); ++i) {
Q_CORE_EXPORT bool qRegisterResourceData(int version, const unsigned char *tree,
const unsigned char *name, const unsigned char *data)
{
- QMutexLocker lock(resourceMutex());
+ std::lock_guard<std::recursive_mutex> lock(qGlobalResourceMutex);
if(version == Q_RCC_OUTPUT_REVISION && resourceList()) {
bool found = false;
QResourceRoot res(tree, name, data);
Q_CORE_EXPORT bool qUnregisterResourceData(int version, const unsigned char *tree,
const unsigned char *name, const unsigned char *data)
{
- QMutexLocker lock(resourceMutex());
+ std::lock_guard<std::recursive_mutex> lock(qGlobalResourceMutex);
if(version == Q_RCC_OUTPUT_REVISION && resourceList()) {
QResourceRoot res(tree, name, data);
for(int i = 0; i < resourceList()->size(); ) {
QDynamicFileResourceRoot *root = new QDynamicFileResourceRoot(resourceRoot);
if(root->registerSelf(rccFilename)) {
root->ref.ref();
- QMutexLocker lock(resourceMutex());
+ std::lock_guard<std::recursive_mutex> lock(qGlobalResourceMutex);
resourceList()->append(root);
return true;
}
bool
QResource::unregisterResource(const QString &rccFilename, const QString &resourceRoot)
{
- QMutexLocker lock(resourceMutex());
+ std::lock_guard<std::recursive_mutex> lock(qGlobalResourceMutex);
ResourceList *list = resourceList();
for(int i = 0; i < list->size(); ++i) {
QResourceRoot *res = list->at(i);
QDynamicBufferResourceRoot *root = new QDynamicBufferResourceRoot(resourceRoot);
if(root->registerSelf(rccData)) {
root->ref.ref();
- QMutexLocker lock(resourceMutex());
+ std::lock_guard<std::recursive_mutex> lock(qGlobalResourceMutex);
resourceList()->append(root);
return true;
}
bool
QResource::unregisterResource(const uchar *rccData, const QString &resourceRoot)
{
- QMutexLocker lock(resourceMutex());
+ std::lock_guard<std::recursive_mutex> lock(qGlobalResourceMutex);
ResourceList *list = resourceList();
for(int i = 0; i < list->size(); ++i) {
QResourceRoot *res = list->at(i);
#ifndef QT_NO_LIBRARY
-Q_GLOBAL_STATIC_WITH_ARGS(QMutex, libraryPathMutex, (QMutex::Recursive))
+static std::recursive_mutex qGlobalLibraryPathMutex;
/*!
Returns a list of paths that the application will search when
*/
QStringList QCoreApplication::libraryPaths()
{
- QMutexLocker locker(libraryPathMutex());
+ std::lock_guard<std::recursive_mutex> locker(qGlobalLibraryPathMutex);
if (!coreappdata()->app_libpaths) {
QStringList *app_libpaths = coreappdata()->app_libpaths = new QStringList;
*/
void QCoreApplication::setLibraryPaths(const QStringList &paths)
{
- QMutexLocker locker(libraryPathMutex());
+ std::unique_lock<std::recursive_mutex> locker(qGlobalLibraryPathMutex);
if (!coreappdata()->app_libpaths)
coreappdata()->app_libpaths = new QStringList;
*(coreappdata()->app_libpaths) = paths;
if (path.isEmpty())
return;
- QMutexLocker locker(libraryPathMutex());
+ std::unique_lock<std::recursive_mutex> locker(qGlobalLibraryPathMutex);
// make sure that library paths is initialized
libraryPaths();
if (path.isEmpty())
return;
- QMutexLocker locker(libraryPathMutex());
+ std::lock_guard<std::recursive_mutex> locker(qGlobalLibraryPathMutex);
// make sure that library paths is initialized
libraryPaths();
Q_GLOBAL_STATIC(QList<QFactoryLoader *>, qt_factory_loaders)
-Q_GLOBAL_STATIC_WITH_ARGS(QMutex, qt_factoryloader_mutex, (QMutex::Recursive))
-
+static std::recursive_mutex qGlobalFactoryLoaderMutex;
class QFactoryLoaderPrivate : public QObjectPrivate
{
d->cs = cs;
d->suffix = suffix;
- QMutexLocker locker(qt_factoryloader_mutex());
+ std::lock_guard<std::recursive_mutex> locker(qGlobalFactoryLoaderMutex);
update();
qt_factory_loaders()->append(this);
}
QFactoryLoader::~QFactoryLoader()
{
- QMutexLocker locker(qt_factoryloader_mutex());
+ std::lock_guard<std::recursive_mutex> locker(qGlobalFactoryLoaderMutex);
qt_factory_loaders()->removeAll(this);
}
void QFactoryLoader::refreshAll()
{
- QMutexLocker locker(qt_factoryloader_mutex());
+ std::lock_guard<std::recursive_mutex> locker(qGlobalFactoryLoaderMutex);
QList<QFactoryLoader *> *loaders = qt_factory_loaders();
for (QList<QFactoryLoader *>::const_iterator it = loaders->constBegin();
it != loaders->constEnd(); ++it) {
// the dispatch lock protects everything related to the DBusConnection or DBusServer
// including the timeouts and watches
- QMutex dispatchLock;
+ std::recursive_mutex dispatchLock;
DBusConnection *connection;
DBusServer *server;
QDBusConnectionPrivate::QDBusConnectionPrivate(QObject *p)
: QObject(p), ref(1), capabilities(0), mode(InvalidMode), busService(0),
- dispatchLock(QMutex::Recursive), connection(0), server(0),
- rootNode(QString(QLatin1Char('/')))
+ connection(0), server(0), rootNode(QString(QLatin1Char('/')))
{
static const bool threads = dbus_threads_init_default();
Q_UNUSED(threads)
struct QDBusMutexLocker: QDBusLockerBase
{
QDBusConnectionPrivate *self;
- QMutex *mutex;
+ std::recursive_mutex *mutex;
ThreadAction action;
inline QDBusMutexLocker(ThreadAction a, QDBusConnectionPrivate *s,
- QMutex *m)
+ std::recursive_mutex *m)
: self(s), mutex(m), action(a)
{
reportThreadAction(action, BeforeLock, self);
QT_BEGIN_NAMESPACE
-Q_GLOBAL_STATIC_WITH_ARGS(QMutex, qPropertyAnimationMutex, (QMutex::Recursive))
+static std::recursive_mutex qGlobalPropertyAnimationMutex;
void QPropertyAnimationPrivate::updateMetaProperty()
{
QPropertyAnimation *animToStop = 0;
{
- QMutexLocker locker(qPropertyAnimationMutex());
+ std::lock_guard<std::recursive_mutex> locker(qGlobalPropertyAnimationMutex);
typedef QPair<QObject *, QByteArray> QPropertyAnimationPair;
typedef QHash<QPropertyAnimationPair, QPropertyAnimation*> QPropertyAnimationHash;
static QPropertyAnimationHash hash;
\sa currentValue
*/
-Q_GLOBAL_STATIC_WITH_ARGS(QMutex, qVariantAnimationMutex, (QMutex::Recursive))
+static std::recursive_mutex qGlobalVariantAnimationMutex;
static bool animationValueLessThan(const QVariantAnimation::KeyValue &p1, const QVariantAnimation::KeyValue &p2)
{
// in such an order that we get here with interpolators == NULL,
// to continue causes the app to crash on exit with a SEGV
if (interpolators) {
- QMutexLocker locker(qVariantAnimationMutex());
+ std::lock_guard<std::recursive_mutex> locker(qGlobalVariantAnimationMutex);
if (interpolationType >= interpolators->count())
interpolators->resize(interpolationType + 1);
interpolators->replace(interpolationType, func);
QVariantAnimation::Interpolator QVariantAnimationPrivate::getInterpolator(int interpolationType)
{
QInterpolatorVector *interpolators = registeredInterpolators();
- QMutexLocker locker(qVariantAnimationMutex());
+ std::lock_guard<std::recursive_mutex> locker(qGlobalVariantAnimationMutex);
if (interpolationType < interpolators->count()) {
QVariantAnimation::Interpolator ret = interpolators->at(interpolationType);
if (ret) return ret;
scFont = 0;
}
-extern QMutex *qt_fontdatabase_mutex();
+extern std::recursive_mutex &qt_fontdatabase_mutex();
QFontEngine *QFontPrivate::engineForScript(QUnicodeTables::Script script) const
{
- QMutexLocker locker(qt_fontdatabase_mutex());
+ std::lock_guard<std::recursive_mutex> locker(qt_fontdatabase_mutex());
if (script > QUnicodeTables::ScriptCount)
script = QUnicodeTables::Common;
if (engineData && engineData->fontCache != QFontCache::instance()) {
}
Q_GLOBAL_STATIC(QFontDatabasePrivate, privateDb)
-Q_GLOBAL_STATIC_WITH_ARGS(QMutex, fontDatabaseMutex, (QMutex::Recursive))
+static std::recursive_mutex qGlobalFontDatabaseMutex;
// used in qfontengine_x11.cpp
-QMutex *qt_fontdatabase_mutex()
+std::recursive_mutex& qt_fontdatabase_mutex()
{
- return fontDatabaseMutex();
+ return qGlobalFontDatabaseMutex;
}
QT_BEGIN_INCLUDE_NAMESPACE
*/
QFontDatabase::QFontDatabase()
{
- QMutexLocker locker(fontDatabaseMutex());
+ std::lock_guard<std::recursive_mutex> locker(qGlobalFontDatabaseMutex);
createDatabase();
d = privateDb();
}
*/
QStringList QFontDatabase::families() const
{
- QMutexLocker locker(fontDatabaseMutex());
+ std::lock_guard<std::recursive_mutex> locker(qGlobalFontDatabaseMutex);
createDatabase();
QString familyName, foundryName;
parseFontName(family, foundryName, familyName);
- QMutexLocker locker(fontDatabaseMutex());
+ std::lock_guard<std::recursive_mutex> locker(qGlobalFontDatabaseMutex);
createDatabase();
QString familyName, foundryName;
parseFontName(family, foundryName, familyName);
- QMutexLocker locker(fontDatabaseMutex());
+ std::lock_guard<std::recursive_mutex> locker(qGlobalFontDatabaseMutex);
createDatabase();
QString familyName, foundryName;
parseFontName(family, foundryName, familyName);
- QMutexLocker locker(fontDatabaseMutex());
+ std::lock_guard<std::recursive_mutex> locker(qGlobalFontDatabaseMutex);
createDatabase();
bool QFontDatabase::isScalable(const QString &family,
const QString &style) const
{
- QMutexLocker locker(fontDatabaseMutex());
+ std::lock_guard<std::recursive_mutex> locker(qGlobalFontDatabaseMutex);
if (isSmoothlyScalable(family, style))
return true;
return isBitmapScalable(family, style);
QString familyName, foundryName;
parseFontName(family, foundryName, familyName);
- QMutexLocker locker(fontDatabaseMutex());
+ std::lock_guard<std::recursive_mutex> locker(qGlobalFontDatabaseMutex);
createDatabase();
QString familyName, foundryName;
parseFontName(family, foundryName, familyName);
- QMutexLocker locker(fontDatabaseMutex());
+ std::lock_guard<std::recursive_mutex> locker(qGlobalFontDatabaseMutex);
createDatabase();
QString familyName, foundryName;
parseFontName(family, foundryName, familyName);
- QMutexLocker locker(fontDatabaseMutex());
+ std::lock_guard<std::recursive_mutex> locker(qGlobalFontDatabaseMutex);
createDatabase();
QString familyName, foundryName;
parseFontName(family, foundryName, familyName);
- QMutexLocker locker(fontDatabaseMutex());
+ std::lock_guard<std::recursive_mutex> locker(qGlobalFontDatabaseMutex);
createDatabase();
QString familyName, foundryName;
parseFontName(family, foundryName, familyName);
- QMutexLocker locker(fontDatabaseMutex());
+ std::lock_guard<std::recursive_mutex> locker(qGlobalFontDatabaseMutex);
createDatabase();
QString familyName, foundryName;
parseFontName(family, foundryName, familyName);
- QMutexLocker locker(fontDatabaseMutex());
+ std::lock_guard<std::recursive_mutex> locker(qGlobalFontDatabaseMutex);
createDatabase();
// used from qfontengine_ft.cpp
Q_GUI_EXPORT QByteArray qt_fontdata_from_index(int index)
{
- QMutexLocker locker(fontDatabaseMutex());
+ std::lock_guard<std::recursive_mutex> locker(qGlobalFontDatabaseMutex);
return privateDb()->applicationFonts.value(index).data;
}
QFile f(fileName);
if (!f.open(QIODevice::ReadOnly))
return -1;
- QMutexLocker locker(fontDatabaseMutex());
+ std::lock_guard<std::recursive_mutex> locker(qGlobalFontDatabaseMutex);
return privateDb()->addAppFont(f.readAll(), fileName);
}
*/
int QFontDatabase::addApplicationFontFromData(const QByteArray &fontData)
{
- QMutexLocker locker(fontDatabaseMutex());
+ std::lock_guard<std::recursive_mutex> locker(qGlobalFontDatabaseMutex);
return privateDb()->addAppFont(fontData, QString() /* fileName */);
}
*/
QStringList QFontDatabase::applicationFontFamilies(int id)
{
- QMutexLocker locker(fontDatabaseMutex());
+ std::lock_guard<std::recursive_mutex> locker(qGlobalFontDatabaseMutex);
return privateDb()->applicationFonts.value(id).families;
}
QFontEngine *fe = QFontCache::instance()->findEngine(key);
if (!fe) {
- QMutexLocker locker(fontDatabaseMutex());
+ std::lock_guard<std::recursive_mutex> locker(qGlobalFontDatabaseMutex);
if (!privateDb()->count)
initializeFontDb();
#if defined(QT_NO_FONTCONFIG)
return false;
#else
- QMutexLocker locker(fontDatabaseMutex());
+ std::lock_guard<std::recursive_mutex> locker(qGlobalFontDatabaseMutex);
QFontDatabasePrivate *db = privateDb();
if (handle < 0 || handle >= db->applicationFonts.count())
#if defined(QT_NO_FONTCONFIG)
return false;
#else
- QMutexLocker locker(fontDatabaseMutex());
+ std::lock_guard<std::recursive_mutex> locker(qGlobalFontDatabaseMutex);
QFontDatabasePrivate *db = privateDb();
if (db->applicationFonts.isEmpty())
}
#if !defined(QT_NO_FONTCONFIG)
- extern QMutex *qt_fontdatabase_mutex();
- QMutex *mtx = 0;
+ extern std::recursive_mutex& qt_fontdatabase_mutex();
+ std::recursive_mutex *mtx = Q_NULLPTR;
#endif
bool mirrored = flags & QTextEngine::RightToLeft;
glyph_t glyph;
#if !defined(QT_NO_FONTCONFIG)
if (!mtx) {
- mtx = qt_fontdatabase_mutex();
+ mtx = &qt_fontdatabase_mutex();
mtx->lock();
}
if (!glyphs->glyphs[glyph_pos]) {
#if !defined(QT_NO_FONTCONFIG)
if (!mtx) {
- mtx = qt_fontdatabase_mutex();
+ mtx = &qt_fontdatabase_mutex();
mtx->lock();
}
private:
friend class QFontEngineFT;
friend class QScopedPointerDeleter<QFreetypeFace>;
- QFreetypeFace() : _lock(QMutex::Recursive) {}
+ QFreetypeFace() {}
~QFreetypeFace() {}
QAtomicInt ref;
- QMutex _lock;
+ std::recursive_mutex _lock;
QByteArray fontData;
};
QFontEngineMultiFT::~QFontEngineMultiFT()
{
- extern QMutex *qt_fontdatabase_mutex();
- QMutexLocker locker(qt_fontdatabase_mutex());
+ extern std::recursive_mutex& qt_fontdatabase_mutex();
+ std::lock_guard<std::recursive_mutex> locker(qt_fontdatabase_mutex());
FcPatternDestroy(pattern);
if (firstEnginePattern)
void QFontEngineMultiFT::loadEngine(int at)
{
- extern QMutex *qt_fontdatabase_mutex();
- QMutexLocker locker(qt_fontdatabase_mutex());
+ extern std::recursive_mutex& qt_fontdatabase_mutex();
+ std::lock_guard<std::recursive_mutex> locker(qt_fontdatabase_mutex());
extern QFontDef qt_FcPatternToQFontDef(FcPattern *pattern, const QFontDef &);
extern FcFontSet *qt_fontSetForPattern(FcPattern *pattern, const QFontDef &request);