[arch-commits] Commit in kdelibs/repos (3 files)

Pierre Schmitz pierre at archlinux.org
Wed Oct 7 11:35:01 UTC 2009


    Date: Wednesday, October 7, 2009 @ 07:35:00
  Author: pierre
Revision: 54231

Merged revisions 54195,54208,54223 via svnmerge from 
svn+ssh://gerolde.archlinux.org/srv/svn-packages/kdelibs/trunk

........
  r54195 | andrea | 2009-10-07 11:17:12 +0200 (Mi, 07 Okt 2009) | 1 line
  
  fix kde bug #209712
........
  r54208 | andrea | 2009-10-07 12:16:14 +0200 (Mi, 07 Okt 2009) | 1 line
  
  added klocale_p.h
........
  r54223 | andrea | 2009-10-07 12:39:48 +0200 (Mi, 07 Okt 2009) | 1 line
  
  fixed patch
........

Added:
  kdelibs/repos/extra-x86_64/fix-deadlock-in-klocale.patch
    (from rev 54223, kdelibs/trunk/fix-deadlock-in-klocale.patch)
Modified:
  kdelibs/repos/extra-x86_64/	(properties)
  kdelibs/repos/extra-x86_64/PKGBUILD

-------------------------------+
 PKGBUILD                      |   11 +
 fix-deadlock-in-klocale.patch |  256 ++++++++++++++++++++++++++++++++++++++++
 2 files changed, 264 insertions(+), 3 deletions(-)


Property changes on: kdelibs/repos/extra-x86_64
___________________________________________________________________
Modified: svnmerge-integrated
   - /kdelibs/trunk:1-54073
   + /kdelibs/trunk:1-54230

Modified: extra-x86_64/PKGBUILD
===================================================================
--- extra-x86_64/PKGBUILD	2009-10-07 11:02:22 UTC (rev 54230)
+++ extra-x86_64/PKGBUILD	2009-10-07 11:35:00 UTC (rev 54231)
@@ -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'
+	 'bc3053d898e24d6635f87166f419daf7')
 
 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 -p0 -i ${srcdir}/fix-deadlock-in-klocale.patch || return 1
+
 	cd ..
 	mkdir build
 	cd build

Copied: kdelibs/repos/extra-x86_64/fix-deadlock-in-klocale.patch (from rev 54223, kdelibs/trunk/fix-deadlock-in-klocale.patch)
===================================================================
--- extra-x86_64/fix-deadlock-in-klocale.patch	                        (rev 0)
+++ extra-x86_64/fix-deadlock-in-klocale.patch	2009-10-07 11:35:00 UTC (rev 54231)
@@ -0,0 +1,256 @@
+Index: kdecore/localization/klocale_p.h
+===================================================================
+--- kdecore/localization/klocale_p.h	(revision 0)
++++ kdecore/localization/klocale_p.h	(revision 1032185)
+@@ -0,0 +1,10 @@
++#ifndef KLOCALE_P_H
++#define KLOCALE_P_H
++
++class QMutex;
++
++// Used by both KLocale and KLocalizedString, since they call each other.
++QMutex* kLocaleMutex();
++
++#endif /* KLOCALE_P_H */
++
+Index: kdecore/localization/klocalizedstring.cpp
+===================================================================
+--- kdecore/localization/klocalizedstring.cpp	(revision 1032184)
++++ kdecore/localization/klocalizedstring.cpp	(revision 1032185)
+@@ -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("$["),
+@@ -144,9 +143,7 @@
+ 
+         translits(),
+ 
+-        formatters(),
+-
+-        mutex(QMutex::Recursive)
++        formatters()
+     {}
+ 
+     ~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.
+Index: kdecore/localization/klocale.cpp
+===================================================================
+--- kdecore/localization/klocale.cpp	(revision 1032184)
++++ kdecore/localization/klocale.cpp	(revision 1032185)
+@@ -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();
++}




More information about the arch-commits mailing list