diff --git a/.cvsignore b/.cvsignore index 9b4caa4..f9d0c7d 100644 --- a/.cvsignore +++ b/.cvsignore @@ -1 +1 @@ -kdelibs-4.3.1.tar.bz2 +kdelibs-4.3.2.tar.bz2 diff --git a/kdelibs-4.3.2-kde#209712.patch b/kdelibs-4.3.2-kde#209712.patch new file mode 100644 index 0000000..26a50c7 --- /dev/null +++ b/kdelibs-4.3.2-kde#209712.patch @@ -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 + #include + #include ++#include + #include + #include + #include +@@ -126,8 +127,6 @@ + + QHash 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 + +@@ -242,7 +243,6 @@ + // Handling of translation catalogs + QStringList languageList; + +- QMutex* mutex; + QList catalogNames; // list of all catalogs (regardless of language) + QList 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(); ++} diff --git a/kdelibs.spec b/kdelibs.spec index 1bb9453..b5a1e00 100644 --- a/kdelibs.spec +++ b/kdelibs.spec @@ -3,8 +3,8 @@ %define strigi_ver 0.7 Summary: K Desktop Environment 4 - Libraries -Version: 4.3.1 -Release: 3%{?dist} +Version: 4.3.2 +Release: 2%{?dist} Name: kdelibs Epoch: 6 @@ -75,9 +75,11 @@ Patch20: kdelibs-4.1.70-cmake.patch Patch21: kdelibs-4.3.1-ossl-1.x.patch # patch to fix keditbookmarks crash (kde#160679) Patch22: kdelibs-4.3.0-bookmarks.patch +Patch24: kdelibs-4.3.1-drkonq.patch # upstream # 4.3 branch +Patch100: kdelibs-4.3.2-kde#209712.patch # security fix Patch200: kdelibs-4.3.1-CVE-2009-2702.patch @@ -194,9 +196,13 @@ format for easy browsing. %patch20 -p1 -b .xxcmake %patch21 -p1 -b .ossl-1.x %patch22 -p1 -b .bookmarks +%if 0%{?rhel} > 5 +%patch24 -p1 -b .drkonq +%endif # upstream patches # 4.3 +%patch100 -p0 -b .kde#209712 # security fix %patch200 -p1 -b .CVE-2009-2702 @@ -263,8 +269,10 @@ do done popd +%if 0%{?fedora} < 12 install -p -m 644 -D %{SOURCE1} %{buildroot}%{_sysconfdir}/profile.d/kde4.sh install -p -m 644 -D %{SOURCE2} %{buildroot}%{_sysconfdir}/profile.d/kde4.csh +%endif # fix Sonnet documentation multilib conflict bunzip2 %{buildroot}%{_kde4_docdir}/HTML/en/sonnet/index.cache.bz2 @@ -309,12 +317,15 @@ rm -rf %{buildroot} %defattr(-,root,root,-) %doc AUTHORS README TODO %doc COPYING.LIB +%if 0%{?fedora} < 12 %config(noreplace) %{_sysconfdir}/profile.d/* +%endif %{_kde4_bindir}/* %exclude %{_kde4_bindir}/kconfig_compiler4 %{_kde4_appsdir}/* # kdewidgets %exclude %{_kde4_bindir}/makekdewidgets4 +%exclude %{_kde4_bindir}/kde4-doxygen.sh %exclude %{_kde4_appsdir}/kdewidgets/ %exclude %{_kde4_appsdir}/cmake/ %{_kde4_configdir}/* @@ -384,6 +395,24 @@ rm -rf %{buildroot} %changelog +* Wed Oct 07 2009 Than Ngo - 4.3.2-2 +- fix a deadlock in KLocale + +* Mon Oct 05 2009 Than Ngo - 4.3.2-1 +- 4.3.2 + +* Wed Sep 23 2009 Rex Dieter - 4.3.1-7 +- move /etc/profile.d/kde4.(sh|csh) to kde-settings (F-12+) + +* Mon Sep 21 2009 Than Ngo - 4.3.1-6 +- use abrt for RHEL + +* Sat Sep 19 2009 Rex Dieter - 4.3.1-5 +- groupdav connect to egroupware failed (kde#186763) + +* Fri Sep 18 2009 Kevin Kofler - 4.3.1-4 +- ship kde4-doxygen.sh only in -devel (fix duplicate file) + * Fri Sep 04 2009 Than Ngo - 4.3.1-3 - security fix for -CVE-2009-2702 diff --git a/sources b/sources index 1095581..c16085c 100644 --- a/sources +++ b/sources @@ -1 +1 @@ -df6b6d261d46508c7b0abcdd983ffae2 kdelibs-4.3.1.tar.bz2 +0564ed8ba804a0f3f1cee9732a3d2d72 kdelibs-4.3.2.tar.bz2