sc/source/core/data/global.cxx | 53 +++++++++++++++++------------------------ vcl/source/app/svmain.cxx | 20 ++++++++------- 2 files changed, 33 insertions(+), 40 deletions(-)
New commits: commit 55eb65ba02dc8779fa489017745cdc952a07d10c Author: Luboš Luňák <l.lu...@collabora.com> Date: Wed May 30 18:03:31 2018 +0200 avoid a deadlock when the crash handler can't acquire SolarMutex Change-Id: Iea2d9b993dcf08fe022f97a2ac8e15fba9a8568c Reviewed-on: https://gerrit.libreoffice.org/55090 Tested-by: Jenkins <c...@libreoffice.org> Reviewed-by: Luboš Luňák <l.lu...@collabora.com> Reviewed-on: https://gerrit.libreoffice.org/55271 diff --git a/vcl/source/app/svmain.cxx b/vcl/source/app/svmain.cxx index f337bc9657ce..bd7a4d6890ea 100644 --- a/vcl/source/app/svmain.cxx +++ b/vcl/source/app/svmain.cxx @@ -158,16 +158,18 @@ oslSignalAction VCLExceptionSignal_impl( void* /*pData*/, oslSignalInfo* pInfo) { bIn = true; - SolarMutexGuard aLock; - - // do not stop timer because otherwise the UAE-Box will not be painted as well - ImplSVData* pSVData = ImplGetSVData(); - if ( pSVData->mpApp ) + vcl::SolarMutexTryAndBuyGuard aLock; + if( aLock.isAcquired()) { - SystemWindowFlags nOldMode = Application::GetSystemWindowMode(); - Application::SetSystemWindowMode( nOldMode & ~SystemWindowFlags::NOAUTOMODE ); - pSVData->mpApp->Exception( nVCLException ); - Application::SetSystemWindowMode( nOldMode ); + // do not stop timer because otherwise the UAE-Box will not be painted as well + ImplSVData* pSVData = ImplGetSVData(); + if ( pSVData->mpApp ) + { + SystemWindowFlags nOldMode = Application::GetSystemWindowMode(); + Application::SetSystemWindowMode( nOldMode & ~SystemWindowFlags::NOAUTOMODE ); + pSVData->mpApp->Exception( nVCLException ); + Application::SetSystemWindowMode( nOldMode ); + } } bIn = false; } commit 512d3cc11289fe3344212e73dc39bfdda846f02b Author: Luboš Luňák <l.lu...@collabora.com> Date: Fri May 25 13:03:28 2018 +0200 add mutex protection to more ScGlobal functions Similarly to ScGlobal::Get(Case)Collator(), these also may be called by multiple threads. Change-Id: If0b1f2669282354ce79cdd251698f3aa1c6a30d4 Reviewed-on: https://gerrit.libreoffice.org/54798 Tested-by: Jenkins <c...@libreoffice.org> Reviewed-by: Luboš Luňák <l.lu...@collabora.com> Reviewed-on: https://gerrit.libreoffice.org/55281 Tested-by: Luboš Luňák <l.lu...@collabora.com> diff --git a/sc/source/core/data/global.cxx b/sc/source/core/data/global.cxx index bf76a7085758..2c3a98622d63 100644 --- a/sc/source/core/data/global.cxx +++ b/sc/source/core/data/global.cxx @@ -305,18 +305,12 @@ ScAutoFormat* ScGlobal::GetOrCreateAutoFormat() LegacyFuncCollection* ScGlobal::GetLegacyFuncCollection() { - assert(!bThreadedGroupCalcInProgress); - if (!pLegacyFuncCollection) - pLegacyFuncCollection = new LegacyFuncCollection(); - return pLegacyFuncCollection; + return doubleCheckedInit( pLegacyFuncCollection, []() { return new LegacyFuncCollection(); }); } ScUnoAddInCollection* ScGlobal::GetAddInCollection() { - assert(!bThreadedGroupCalcInProgress); - if (!pAddInCollection) - pAddInCollection = new ScUnoAddInCollection(); - return pAddInCollection; + return doubleCheckedInit( pAddInCollection, []() { return new ScUnoAddInCollection(); }); } ScUserList* ScGlobal::GetUserList() @@ -1008,26 +1002,27 @@ void ScGlobal::AddLanguage( SfxItemSet& rSet, const SvNumberFormatter& rFormatte utl::TransliterationWrapper* ScGlobal::GetpTransliteration() { - assert(!bThreadedGroupCalcInProgress); - if ( !pTransliteration ) - { - const LanguageType eOfficeLanguage = Application::GetSettings().GetLanguageTag().getLanguageType(); - pTransliteration = new ::utl::TransliterationWrapper( - ::comphelper::getProcessComponentContext(), TransliterationFlags::IGNORE_CASE ); - pTransliteration->loadModuleIfNeeded( eOfficeLanguage ); - } - return pTransliteration; + return doubleCheckedInit( pTransliteration, + []() + { + const LanguageType eOfficeLanguage = Application::GetSettings().GetLanguageTag().getLanguageType(); + ::utl::TransliterationWrapper* p = new ::utl::TransliterationWrapper( + ::comphelper::getProcessComponentContext(), TransliterationFlags::IGNORE_CASE ); + p->loadModuleIfNeeded( eOfficeLanguage ); + return p; + }); } ::utl::TransliterationWrapper* ScGlobal::GetCaseTransliteration() { - assert(!bThreadedGroupCalcInProgress); - if ( !pCaseTransliteration ) - { - const LanguageType eOfficeLanguage = Application::GetSettings().GetLanguageTag().getLanguageType(); - pCaseTransliteration = new ::utl::TransliterationWrapper(::comphelper::getProcessComponentContext(), TransliterationFlags::NONE ); - pCaseTransliteration->loadModuleIfNeeded( eOfficeLanguage ); - } - return pCaseTransliteration; + return doubleCheckedInit( pCaseTransliteration, + []() + { + const LanguageType eOfficeLanguage = Application::GetSettings().GetLanguageTag().getLanguageType(); + ::utl::TransliterationWrapper* p = new ::utl::TransliterationWrapper( + ::comphelper::getProcessComponentContext(), TransliterationFlags::NONE ); + p->loadModuleIfNeeded( eOfficeLanguage ); + return p; + }); } const LocaleDataWrapper* ScGlobal::GetpLocaleData() @@ -1069,12 +1064,8 @@ CollatorWrapper* ScGlobal::GetCaseCollator() } css::lang::Locale* ScGlobal::GetLocale() { - assert(!bThreadedGroupCalcInProgress); - if ( !pLocale ) - { - pLocale = new css::lang::Locale( Application::GetSettings().GetLanguageTag().getLocale()); - } - return pLocale; + return doubleCheckedInit( pLocale, + []() { return new css::lang::Locale( Application::GetSettings().GetLanguageTag().getLocale()); }); } ScFieldEditEngine& ScGlobal::GetStaticFieldEditEngine() _______________________________________________ Libreoffice-commits mailing list libreoffice-comm...@lists.freedesktop.org https://lists.freedesktop.org/mailman/listinfo/libreoffice-commits