1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
|
$NetBSD: patch-bb,v 1.1 2009/10/11 08:13:40 markd Exp $
KDE svn 1032185
--- kdecore/localization/klocale.cpp.orig 2009-10-02 21:18:08.000000000 +1300
+++ kdecore/localization/klocale.cpp
@@ -22,6 +22,7 @@
*/
#include "klocale.h"
+#include "klocale_p.h"
#include <config.h>
@@ -242,7 +243,6 @@ public:
// Handling of translation catalogs
QStringList languageList;
- QMutex* mutex;
QList<KCatalogName> catalogNames; // list of all catalogs (regardless of language)
QList<KCatalog> catalogs; // list of all found catalogs, one instance per catalog name and language
int numberOfSysCatalogs; // number of catalogs that each app draws from
@@ -276,7 +276,6 @@ public:
KLocalePrivate::KLocalePrivate(const QString& catalog, KConfig *config, const QString &language_, const QString &country_)
: language(language_),
country(country_),
- mutex(new QMutex(QMutex::Recursive)),
useTranscript(false),
codecForEncoding(0),
languages(0), calendar(0),
@@ -311,7 +310,7 @@ KLocale::KLocale(const QString& catalog,
void KLocalePrivate::initMainCatalogs()
{
KLocaleStaticData *s = staticData;
- QMutexLocker lock(mutex);
+ QMutexLocker lock(kLocaleMutex());
if (!s->maincatalog.isEmpty()) {
// If setMainCatalog was called, then we use that (e.g. korgac calls setMainCatalog("korganizer") to use korganizer.po)
@@ -541,7 +540,7 @@ bool KLocale::setLanguage(const QString
bool KLocalePrivate::setLanguage(const QString & _language, KConfig *config)
{
- QMutexLocker lock(mutex);
+ QMutexLocker lock(kLocaleMutex());
languageList.removeAll( _language );
languageList.prepend( _language ); // let us consider this language to be the most important one
@@ -563,7 +562,7 @@ bool KLocale::setLanguage(const QStringL
bool KLocalePrivate::setLanguage(const QStringList & languages)
{
- QMutexLocker lock(mutex);
+ QMutexLocker lock(kLocaleMutex());
// This list might contain
// 1) some empty strings that we have to eliminate
// 2) duplicate entries like in de:fr:de, where we have to keep the first occurrence of a language in order
@@ -685,7 +684,7 @@ QString KLocale::country() const
void KLocale::insertCatalog( const QString & catalog )
{
- QMutexLocker lock(d->mutex);
+ QMutexLocker lock(kLocaleMutex());
int pos = d->catalogNames.indexOf(KCatalogName(catalog));
if (pos != -1) {
++d->catalogNames[pos].loadCount;
@@ -736,7 +735,7 @@ void KLocalePrivate::updateCatalogs( )
void KLocale::removeCatalog(const QString &catalog)
{
- QMutexLocker lock(d->mutex);
+ QMutexLocker lock(kLocaleMutex());
int pos = d->catalogNames.indexOf(KCatalogName(catalog));
if (pos == -1)
return;
@@ -749,7 +748,7 @@ void KLocale::removeCatalog(const QStrin
void KLocale::setActiveCatalog(const QString &catalog)
{
- QMutexLocker lock(d->mutex);
+ QMutexLocker lock(kLocaleMutex());
int pos = d->catalogNames.indexOf(KCatalogName(catalog));
if (pos == -1)
return;
@@ -759,7 +758,6 @@ void KLocale::setActiveCatalog(const QSt
KLocale::~KLocale()
{
- delete d->mutex;
delete d->calendar;
delete d->languages;
delete d;
@@ -788,7 +786,7 @@ void KLocalePrivate::translate_priv(cons
<< "Fix the program" << endl;
}
- QMutexLocker locker(mutex);
+ QMutexLocker locker(kLocaleMutex());
// determine the fallback string
QString fallback;
if ( msgid_plural == NULL )
@@ -1370,7 +1368,7 @@ QString KLocale::formatByteSize( double
//Kibi-byte KiB 2^10 1,024 bytes
if (d->byteSizeFmt.size() == 0) {
- QMutexLocker lock(d->mutex);
+ QMutexLocker lock(kLocaleMutex());
// Pretranslated format strings for byte sizes.
#define CACHEBYTEFMT(x) { \
QString s; \
@@ -2568,7 +2566,6 @@ KLocale::KLocale(const KLocale & rhs) :
{
d->languages = 0; // Don't copy languages
d->calendar = 0; // Don't copy the calendar
- d->mutex = 0; // Don't copy the mutex
}
KLocale & KLocale::operator=(const KLocale & rhs)
@@ -2583,8 +2580,7 @@ KLocale & KLocale::operator=(const KLoca
void KLocale::copyCatalogsTo(KLocale *locale)
{
- QMutexLocker lock(d->mutex);
- QMutexLocker lockOther(locale->d->mutex);
+ QMutexLocker lock(kLocaleMutex());
locale->d->catalogNames = d->catalogNames;
locale->d->updateCatalogs();
}
@@ -2656,3 +2652,9 @@ KLocale::DigitSet KLocale::dateTimeDigit
{
return d->dateTimeDigitSet;
}
+
+Q_GLOBAL_STATIC_WITH_ARGS(QMutex, s_kLocaleMutex, (QMutex::Recursive))
+QMutex* kLocaleMutex()
+{
+ return s_kLocaleMutex();
+}
|