Kaydet (Commit) 8617c8ed authored tarafından Luboš Luňák's avatar Luboš Luňák

thread-safe initialization of transliteration objects

Otherwise causes problem with ooo#70213-3 (and
mnOpenCLMinimumFormulaGroupSize disabled).

Change-Id: I3acfad34476e74595b55a559df5bfd72945a1869
Reviewed-on: https://gerrit.libreoffice.org/56291Reviewed-by: 's avatarNoel Grandin <noel.grandin@collabora.co.uk>
Tested-by: Jenkins
Reviewed-by: 's avatarLuboš Luňák <l.lunak@collabora.com>
üst e9430571
......@@ -3388,29 +3388,27 @@ void ScInterpreter::ScChar()
static OUString lcl_convertIntoHalfWidth( const OUString & rStr )
{
static bool bFirstASCCall = true;
static utl::TransliterationWrapper aTrans( ::comphelper::getProcessComponentContext(), TransliterationFlags::NONE );
if( bFirstASCCall )
{
aTrans.loadModuleByImplName( "FULLWIDTH_HALFWIDTH_LIKE_ASC", LANGUAGE_SYSTEM );
bFirstASCCall = false;
}
// Make the initialization thread-safe. Since another function needs to be called, move it all to another
// function and thread-safely initialize a static reference in this function.
auto init = []() -> utl::TransliterationWrapper&
{
static utl::TransliterationWrapper trans( ::comphelper::getProcessComponentContext(), TransliterationFlags::NONE );
trans.loadModuleByImplName( "FULLWIDTH_HALFWIDTH_LIKE_ASC", LANGUAGE_SYSTEM );
return trans;
};
static utl::TransliterationWrapper& aTrans( init());
return aTrans.transliterate( rStr, 0, sal_uInt16( rStr.getLength() ) );
}
static OUString lcl_convertIntoFullWidth( const OUString & rStr )
{
static bool bFirstJISCall = true;
static utl::TransliterationWrapper aTrans( ::comphelper::getProcessComponentContext(), TransliterationFlags::NONE );
if( bFirstJISCall )
{
aTrans.loadModuleByImplName( "HALFWIDTH_FULLWIDTH_LIKE_JIS", LANGUAGE_SYSTEM );
bFirstJISCall = false;
}
auto init = []() -> utl::TransliterationWrapper&
{
static utl::TransliterationWrapper trans( ::comphelper::getProcessComponentContext(), TransliterationFlags::NONE );
trans.loadModuleByImplName( "HALFWIDTH_FULLWIDTH_LIKE_JIS", LANGUAGE_SYSTEM );
return trans;
};
static utl::TransliterationWrapper& aTrans( init());
return aTrans.transliterate( rStr, 0, sal_uInt16( rStr.getLength() ) );
}
......
Markdown is supported
0% or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment