[libreoffice] Resolves: rhbz#666088 don't crash on clean up of search cache

Caolan McNamara caolanm at fedoraproject.org
Thu Jan 6 17:18:36 UTC 2011


commit a1f7a01ae697099b9fce0f77e4640230c3afc798
Author: Caolán McNamara <caolanm at redhat.com>
Date:   Thu Jan 6 17:18:22 2011 +0000

    Resolves: rhbz#666088 don't crash on clean up of search cache

 ...bz-666088-clean-up-search-cache-singleton.patch |  109 ++++++++++++++++++++
 libreoffice.spec                                   |    7 +-
 2 files changed, 115 insertions(+), 1 deletions(-)
---
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?= <caolanm at redhat.com>
+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 <unotools/charclass.hxx>
+ #include <comphelper/processfactory.hxx>
+ #include <unotools/textsearch.hxx>
++#include <rtl/instance.hxx>
+ 
+ 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<XTextSearch> 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 <caolanm at redhat.com> 3.3.0.2-5
+- Resolves: rhbz#666088 don't crash on clean up of search cache
+
 * Wed Jan 05 2011 Lukas Tinkl <ltinkl at redhat.com> 3.3.0.2-4
 - create a KDE integration subpackage
 


More information about the scm-commits mailing list