[arch-commits] Commit in kdelibs/trunk (PKGBUILD fix-deadlock-in-klocale.patch)
Andrea Scarpino
andrea at archlinux.org
Wed Oct 7 09:17:12 UTC 2009
Date: Wednesday, October 7, 2009 @ 05:17:12
Author: andrea
Revision: 54195
fix kde bug #209712
Added:
kdelibs/trunk/fix-deadlock-in-klocale.patch
Modified:
kdelibs/trunk/PKGBUILD
-------------------------------+
PKGBUILD | 11 +
fix-deadlock-in-klocale.patch | 235 ++++++++++++++++++++++++++++++++++++++++
2 files changed, 243 insertions(+), 3 deletions(-)
Modified: PKGBUILD
===================================================================
--- PKGBUILD 2009-10-07 08:02:03 UTC (rev 54194)
+++ PKGBUILD 2009-10-07 09:17:12 UTC (rev 54195)
@@ -3,7 +3,7 @@
pkgname=kdelibs
pkgver=4.3.2
-pkgrel=1
+pkgrel=2
pkgdesc="KDE Core Libraries"
arch=('i686' 'x86_64')
url='http://www.kde.org'
@@ -15,11 +15,13 @@
replaces=('arts')
install='kdelibs.install'
source=(http://download.kde.org/stable/${pkgver}/src/${pkgname}-${pkgver}.tar.bz2
- 'kde-applications-menu.patch' 'archlinux-menu.patch' 'abs-syntax-highlight.patch')
+ 'kde-applications-menu.patch' 'archlinux-menu.patch' 'abs-syntax-highlight.patch'
+ 'fix-deadlock-in-klocale.patch')
md5sums=('0564ed8ba804a0f3f1cee9732a3d2d72'
'280f34ee159845f8902c31bd499254fc'
'0f214b222bfb0327e7a2b6fb13756895'
- '18ea42696a7f41332a092d6ead7efc6a')
+ '18ea42696a7f41332a092d6ead7efc6a'
+ '06354daaf512a04f8d7a3630383328c6')
build() {
cd $srcdir/${pkgname}-${pkgver}
@@ -31,6 +33,9 @@
# add syntax highlightning for PKGBUILD and .install files
patch -p1 -i $srcdir/abs-syntax-highlight.patch
+ # fixed in 4.3.3
+ patch -p1 -i ${srcdir}/fix-deadlock-in-klocale.patch || return 1
+
cd ..
mkdir build
cd build
Added: fix-deadlock-in-klocale.patch
===================================================================
--- fix-deadlock-in-klocale.patch (rev 0)
+++ fix-deadlock-in-klocale.patch 2009-10-07 09:17:12 UTC (rev 54195)
@@ -0,0 +1,235 @@
+--- kdelibs-4.3.2/kdecore/localization/klocale.cpp~ 2009-10-07 11:00:48.011642430 +0200
++++ kdelibs-4.3.2/kdecore/localization/klocale.cpp 2009-10-07 11:05:40.921623724 +0200
+@@ -22,6 +22,7 @@
+ */
+
+ #include "klocale.h"
++#include "klocale_p.h"
+
+ #include <config.h>
+
+@@ -242,7 +243,6 @@
+ // 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 @@
+ 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 @@
+ 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 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 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 @@
+
+ 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 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::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 @@
+
+ KLocale::~KLocale()
+ {
+- delete d->mutex;
+ delete d->calendar;
+ delete d->languages;
+ delete d;
+@@ -788,7 +786,7 @@
+ << "Fix the program" << endl;
+ }
+
+- QMutexLocker locker(mutex);
++ QMutexLocker locker(kLocaleMutex());
+ // determine the fallback string
+ QString fallback;
+ if ( msgid_plural == NULL )
+@@ -1370,7 +1368,7 @@
+ //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 @@
+ {
+ 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 @@
+
+ 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 @@
+ {
+ return d->dateTimeDigitSet;
+ }
++
++Q_GLOBAL_STATIC_WITH_ARGS(QMutex, s_kLocaleMutex, (QMutex::Recursive))
++QMutex* kLocaleMutex()
++{
++ return s_kLocaleMutex();
++}
+--- kdelibs-4.3.2/kdecore/localization/klocalizedstring.cpp~ 2009-10-07 11:06:04.208286632 +0200
++++ kdelibs-4.3.2/kdecore/localization/klocalizedstring.cpp 2009-10-07 11:10:20.208259953 +0200
+@@ -24,6 +24,7 @@
+ #include <kglobal.h>
+ #include <kdebug.h>
+ #include <klocale.h>
++#include <klocale_p.h>
+ #include <kcomponentdata.h>
+ #include <klibrary.h>
+ #include <kstandarddirs.h>
+@@ -126,8 +127,6 @@
+
+ QHash<QString, KuitSemantics*> formatters;
+
+- QMutex mutex;
+-
+ KLocalizedStringPrivateStatics () :
+ theFence("|/|"),
+ startInterp("$["),
+@@ -145,8 +144,6 @@
+ translits(),
+
+ formatters(),
+-
+- mutex(QMutex::Recursive)
+ {}
+
+ ~KLocalizedStringPrivateStatics ()
+@@ -216,7 +213,7 @@
+ QString KLocalizedStringPrivate::toString (const KLocale *locale) const
+ {
+ KLocalizedStringPrivateStatics *s = staticsKLSP;
+- QMutexLocker lock(&s->mutex);
++ QMutexLocker lock(kLocaleMutex());
+
+ // Assure the message has been supplied.
+ if (msg.isEmpty())
+@@ -474,7 +471,7 @@
+ const QString &ctxt) const
+ {
+ KLocalizedStringPrivateStatics *s = staticsKLSP;
+- QMutexLocker lock(&s->mutex);
++ QMutexLocker lock(kLocaleMutex());
+
+ QString final = text;
+
+@@ -499,7 +496,7 @@
+ bool &fallback) const
+ {
+ KLocalizedStringPrivateStatics *s = staticsKLSP;
+- QMutexLocker lock(&s->mutex);
++ QMutexLocker lock(kLocaleMutex());
+
+ if (s->ktrs == NULL)
+ // Scripting engine not available.
+@@ -564,7 +561,7 @@
+ // fallback is set to true if Transcript evaluation requested so.
+
+ KLocalizedStringPrivateStatics *s = staticsKLSP;
+- QMutexLocker lock(&s->mutex);
++ QMutexLocker lock(kLocaleMutex());
+
+ result.clear();
+ fallback = false;
+@@ -716,7 +713,7 @@
+ QVariant KLocalizedStringPrivate::segmentToValue (const QString &seg) const
+ {
+ KLocalizedStringPrivateStatics *s = staticsKLSP;
+- QMutexLocker lock(&s->mutex);
++ QMutexLocker lock(kLocaleMutex());
+
+ // Return invalid variant if segment is either not a proper
+ // value reference, or the reference is out of bounds.
+@@ -751,7 +748,7 @@
+ const QString &final) const
+ {
+ KLocalizedStringPrivateStatics *s = staticsKLSP;
+- QMutexLocker lock(&s->mutex);
++ QMutexLocker lock(kLocaleMutex());
+
+ if (s->ktrs == NULL)
+ // Scripting engine not available.
+@@ -945,7 +942,7 @@
+ void KLocalizedStringPrivate::loadTranscript ()
+ {
+ KLocalizedStringPrivateStatics *s = staticsKLSP;
+- QMutexLocker lock(&s->mutex);
++ QMutexLocker lock(kLocaleMutex());
+
+ s->loadTranscriptCalled = true;
+ s->ktrs = NULL; // null indicates that Transcript is not available
+@@ -979,7 +976,8 @@
+ return;
+ }
+ KLocalizedStringPrivateStatics *s = staticsKLSP;
+- QMutexLocker lock(&s->mutex);
++ // Very important: do not the mutex here.
++ //QMutexLocker lock(kLocaleMutex());
+
+ // Find script modules for all included language/catalogs that have them,
+ // and remember their paths.
More information about the arch-commits
mailing list