From a1f7a01ae697099b9fce0f77e4640230c3afc798 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Caol=C3=A1n=20McNamara?= Date: Thu, 6 Jan 2011 17:18:22 +0000 Subject: [PATCH] Resolves: rhbz#666088 don't crash on clean up of search cache --- ...6088-clean-up-search-cache-singleton.patch | 109 ++++++++++++++++++ libreoffice.spec | 7 +- 2 files changed, 115 insertions(+), 1 deletion(-) create mode 100644 0001-Resolves-rhbz-666088-clean-up-search-cache-singleton.patch diff --git a/0001-Resolves-rhbz-666088-clean-up-search-cache-singleton.patch b/0001-Resolves-rhbz-666088-clean-up-search-cache-singleton.patch new file mode 100644 index 0000000..a07c8b9 --- /dev/null +++ b/0001-Resolves-rhbz-666088-clean-up-search-cache-singleton.patch @@ -0,0 +1,109 @@ +From b79c4f7daf165e4190b12a19382f4e5615b43163 Mon Sep 17 00:00:00 2001 +From: =?UTF-8?q?Caol=C3=A1n=20McNamara?= +Date: Thu, 6 Jan 2011 17:05:14 +0000 +Subject: [PATCH] Resolves: rhbz#666088 clean up search cache singleton in correct order + +--- + unotools/inc/unotools/textsearch.hxx | 9 -------- + unotools/source/i18n/textsearch.cxx | 37 +++++++++++++++++++++------------ + 2 files changed, 23 insertions(+), 23 deletions(-) + +diff --git a/unotools/inc/unotools/textsearch.hxx b/unotools/inc/unotools/textsearch.hxx +index 0aaa123..16ae82f 100644 +--- a/unotools/inc/unotools/textsearch.hxx ++++ b/unotools/inc/unotools/textsearch.hxx +@@ -128,15 +128,6 @@ public: + + class UNOTOOLS_DLLPUBLIC TextSearch + { +- struct CachedTextSearch +- { +- ::osl::Mutex mutex; +- ::com::sun::star::util::SearchOptions Options; +- ::com::sun::star::uno::Reference< ::com::sun::star::util::XTextSearch > xTextSearch; +- }; +- +- static CachedTextSearch maCache; +- + static ::com::sun::star::uno::Reference< ::com::sun::star::util::XTextSearch > + getXTextSearch( const ::com::sun::star::util::SearchOptions& rPara ); + +diff --git a/unotools/source/i18n/textsearch.cxx b/unotools/source/i18n/textsearch.cxx +index 8f8f780..8085045 100644 +--- a/unotools/source/i18n/textsearch.cxx ++++ b/unotools/source/i18n/textsearch.cxx +@@ -36,6 +36,7 @@ + #include + #include + #include ++#include + + using namespace ::com::sun::star::util; + using namespace ::com::sun::star::uno; +@@ -86,13 +87,6 @@ SearchParam::SearchParam( const SearchParam& rParam ) + nTransliterationFlags = rParam.nTransliterationFlags; + } + +-// Klasse zum Suchen eines Strings in einem Text. Es wird genau nach +-// dem String gesucht. +-// ( Die Unterscheidung der Gross/Klein-Schreibung kann mit einen Flag +-// unterdrueckt werden ) +- +-TextSearch::CachedTextSearch TextSearch::maCache; +- + static bool lcl_Equals( const SearchOptions& rSO1, const SearchOptions& rSO2 ) + { + return rSO1.algorithmType == rSO2.algorithmType && +@@ -108,27 +102,42 @@ static bool lcl_Equals( const SearchOptions& rSO1, const SearchOptions& rSO2 ) + rSO1.transliterateFlags == rSO2.transliterateFlags; + } + ++namespace ++{ ++ struct CachedTextSearch ++ { ++ ::osl::Mutex mutex; ++ ::com::sun::star::util::SearchOptions Options; ++ ::com::sun::star::uno::Reference< ::com::sun::star::util::XTextSearch > xTextSearch; ++ }; ++ ++ struct theCachedTextSearch ++ : public rtl::Static< CachedTextSearch, theCachedTextSearch > {}; ++} ++ + Reference TextSearch::getXTextSearch( const SearchOptions& rPara ) + { +- osl::MutexGuard aGuard(maCache.mutex); ++ CachedTextSearch &rCache = theCachedTextSearch::get(); ++ ++ osl::MutexGuard aGuard(rCache.mutex); + +- if ( lcl_Equals(maCache.Options, rPara) ) +- return maCache.xTextSearch; ++ if ( lcl_Equals(rCache.Options, rPara) ) ++ return rCache.xTextSearch; + + try + { + Reference< XMultiServiceFactory > xMSF = ::comphelper::getProcessServiceFactory(); +- maCache.xTextSearch.set( xMSF->createInstance( ++ rCache.xTextSearch.set( xMSF->createInstance( + ::rtl::OUString( RTL_CONSTASCII_USTRINGPARAM( + "com.sun.star.util.TextSearch" ) ) ), UNO_QUERY_THROW ); +- maCache.xTextSearch->setOptions( rPara ); +- maCache.Options = rPara; ++ rCache.xTextSearch->setOptions( rPara ); ++ rCache.Options = rPara; + } + catch ( Exception& ) + { + DBG_ERRORFILE( "TextSearch ctor: Exception caught!" ); + } +- return maCache.xTextSearch; ++ return rCache.xTextSearch; + } + + TextSearch::TextSearch(const SearchParam & rParam, LanguageType eLang ) +-- +1.7.3.3 + diff --git a/libreoffice.spec b/libreoffice.spec index 1ac46cc..e374a5f 100644 --- a/libreoffice.spec +++ b/libreoffice.spec @@ -28,7 +28,7 @@ Summary: Free Software Productivity Suite Name: libreoffice Version: 3.3.0.2 -Release: 4%{?dist} +Release: 5%{?dist} License: LGPLv3 and LGPLv2+ and BSD and (MPLv1.1 or GPLv2 or LGPLv2 or Netscape) and (CDDL or GPLv2) and Public Domain Group: Applications/Productivity URL: http://www.documentfoundation.org/develop @@ -101,6 +101,7 @@ Patch15: 0001-Resoves-rhbz-663857-font-color-missing-C-FAQ-10.3-do.patch Patch16: 0001-Avoid-double-paste-when-pasting-text-into-cell-comme.patch Patch17: 0001-Resolves-rhbz-660342-Undo-Redo-crash-with-postits.patch Patch18: libreoffice-bootstrap-kde.patch +Patch19: 0001-Resolves-rhbz-666088-clean-up-search-cache-singleton.patch %{!?python_sitearch: %global python_sitearch %(%{__python} -c "from distutils.sysconfig import get_python_lib; print(get_python_lib(1))")} %define instdir %{_libdir} @@ -722,6 +723,7 @@ mv -f redhat.soc extras/source/palettes/standard.soc %patch16 -p1 -b .Avoid-double-paste-when-pasting-text-into-cell-comme.patch %patch17 -p1 -b .rhbz-660342-Undo-Redo-crash-with-postits.patch %patch18 -p1 -b .libreoffice-bootstrap-kde.patch +%patch19 -p1 -b .rhbz-666088-clean-up-search-cache-singleton.patch touch scripting/source/pyprov/delzip touch scripting/util/provider/beanshell/delzip touch scripting/util/provider/javascript/delzip @@ -2060,6 +2062,9 @@ update-desktop-database %{_datadir}/applications &> /dev/null || : %{basisinstdir}/program/kde-open-url %changelog +* Thu Jan 06 2011 Caolán McNamara 3.3.0.2-5 +- Resolves: rhbz#666088 don't crash on clean up of search cache + * Wed Jan 05 2011 Lukas Tinkl 3.3.0.2-4 - create a KDE integration subpackage