Related: cid#1608068 Data race condition
Change-Id: I10c6dd9c12c7558d1d71f39580b3fa470efe69e0 Reviewed-on: https://gerrit.libreoffice.org/c/core/+/176262 Tested-by: Jenkins Reviewed-by: Caolán McNamara <caolan.mcnamara@collabora.com>
This commit is contained in:
parent
b61e0f2b53
commit
21edde763d
@ -123,11 +123,11 @@ void StringResourceImpl::removeModifyListener( const Reference< XModifyListener
|
|||||||
// XStringResourceResolver
|
// XStringResourceResolver
|
||||||
|
|
||||||
OUString StringResourceImpl::implResolveString
|
OUString StringResourceImpl::implResolveString
|
||||||
( const OUString& ResourceID, LocaleItem* pLocaleItem )
|
(std::unique_lock<std::mutex>& rGuard, const OUString& ResourceID, LocaleItem* pLocaleItem)
|
||||||
{
|
{
|
||||||
OUString aRetStr;
|
OUString aRetStr;
|
||||||
bool bSuccess = false;
|
bool bSuccess = false;
|
||||||
if( pLocaleItem != nullptr && loadLocale( pLocaleItem ) )
|
if( pLocaleItem != nullptr && loadLocale(rGuard, pLocaleItem) )
|
||||||
{
|
{
|
||||||
IdToStringMap::iterator it = pLocaleItem->m_aIdToStringMap.find( ResourceID );
|
IdToStringMap::iterator it = pLocaleItem->m_aIdToStringMap.find( ResourceID );
|
||||||
if( it != pLocaleItem->m_aIdToStringMap.end() )
|
if( it != pLocaleItem->m_aIdToStringMap.end() )
|
||||||
@ -146,20 +146,20 @@ OUString StringResourceImpl::implResolveString
|
|||||||
OUString StringResourceImpl::resolveString( const OUString& ResourceID )
|
OUString StringResourceImpl::resolveString( const OUString& ResourceID )
|
||||||
{
|
{
|
||||||
std::unique_lock aGuard( m_aMutex );
|
std::unique_lock aGuard( m_aMutex );
|
||||||
return implResolveString( ResourceID, m_pCurrentLocaleItem );
|
return implResolveString(aGuard, ResourceID, m_pCurrentLocaleItem);
|
||||||
}
|
}
|
||||||
|
|
||||||
OUString StringResourceImpl::resolveStringForLocale( const OUString& ResourceID, const Locale& locale )
|
OUString StringResourceImpl::resolveStringForLocale( const OUString& ResourceID, const Locale& locale )
|
||||||
{
|
{
|
||||||
std::unique_lock aGuard( m_aMutex );
|
std::unique_lock aGuard( m_aMutex );
|
||||||
LocaleItem* pLocaleItem = getItemForLocale( locale, false );
|
LocaleItem* pLocaleItem = getItemForLocale( locale, false );
|
||||||
return implResolveString( ResourceID, pLocaleItem );
|
return implResolveString(aGuard, ResourceID, pLocaleItem);
|
||||||
}
|
}
|
||||||
|
|
||||||
bool StringResourceImpl::implHasEntryForId( const OUString& ResourceID, LocaleItem* pLocaleItem )
|
bool StringResourceImpl::implHasEntryForId(std::unique_lock<std::mutex>& rGuard, const OUString& ResourceID, LocaleItem* pLocaleItem)
|
||||||
{
|
{
|
||||||
bool bSuccess = false;
|
bool bSuccess = false;
|
||||||
if( pLocaleItem != nullptr && loadLocale( pLocaleItem ) )
|
if( pLocaleItem != nullptr && loadLocale(rGuard, pLocaleItem ) )
|
||||||
{
|
{
|
||||||
IdToStringMap::iterator it = pLocaleItem->m_aIdToStringMap.find( ResourceID );
|
IdToStringMap::iterator it = pLocaleItem->m_aIdToStringMap.find( ResourceID );
|
||||||
if( it != pLocaleItem->m_aIdToStringMap.end() )
|
if( it != pLocaleItem->m_aIdToStringMap.end() )
|
||||||
@ -171,7 +171,7 @@ bool StringResourceImpl::implHasEntryForId( const OUString& ResourceID, LocaleIt
|
|||||||
sal_Bool StringResourceImpl::hasEntryForId( const OUString& ResourceID )
|
sal_Bool StringResourceImpl::hasEntryForId( const OUString& ResourceID )
|
||||||
{
|
{
|
||||||
std::unique_lock aGuard( m_aMutex );
|
std::unique_lock aGuard( m_aMutex );
|
||||||
return implHasEntryForId( ResourceID, m_pCurrentLocaleItem );
|
return implHasEntryForId(aGuard, ResourceID, m_pCurrentLocaleItem);
|
||||||
}
|
}
|
||||||
|
|
||||||
sal_Bool StringResourceImpl::hasEntryForIdAndLocale( const OUString& ResourceID,
|
sal_Bool StringResourceImpl::hasEntryForIdAndLocale( const OUString& ResourceID,
|
||||||
@ -179,13 +179,13 @@ sal_Bool StringResourceImpl::hasEntryForIdAndLocale( const OUString& ResourceID,
|
|||||||
{
|
{
|
||||||
std::unique_lock aGuard( m_aMutex );
|
std::unique_lock aGuard( m_aMutex );
|
||||||
LocaleItem* pLocaleItem = getItemForLocale( locale, false );
|
LocaleItem* pLocaleItem = getItemForLocale( locale, false );
|
||||||
return implHasEntryForId( ResourceID, pLocaleItem );
|
return implHasEntryForId(aGuard, ResourceID, pLocaleItem);
|
||||||
}
|
}
|
||||||
|
|
||||||
Sequence< OUString > StringResourceImpl::implGetResourceIDs( LocaleItem* pLocaleItem )
|
Sequence< OUString > StringResourceImpl::implGetResourceIDs(std::unique_lock<std::mutex>& rGuard, LocaleItem* pLocaleItem)
|
||||||
{
|
{
|
||||||
Sequence< OUString > aIDSeq( 0 );
|
Sequence< OUString > aIDSeq( 0 );
|
||||||
if( pLocaleItem && loadLocale( pLocaleItem ) )
|
if( pLocaleItem && loadLocale(rGuard, pLocaleItem) )
|
||||||
{
|
{
|
||||||
const IdToStringMap& rHashMap = pLocaleItem->m_aIdToStringMap;
|
const IdToStringMap& rHashMap = pLocaleItem->m_aIdToStringMap;
|
||||||
sal_Int32 nResourceIDCount = rHashMap.size();
|
sal_Int32 nResourceIDCount = rHashMap.size();
|
||||||
@ -207,13 +207,13 @@ Sequence< OUString > StringResourceImpl::getResourceIDsForLocale
|
|||||||
{
|
{
|
||||||
std::unique_lock aGuard( m_aMutex );
|
std::unique_lock aGuard( m_aMutex );
|
||||||
LocaleItem* pLocaleItem = getItemForLocale( locale, false );
|
LocaleItem* pLocaleItem = getItemForLocale( locale, false );
|
||||||
return implGetResourceIDs( pLocaleItem );
|
return implGetResourceIDs(aGuard, pLocaleItem);
|
||||||
}
|
}
|
||||||
|
|
||||||
Sequence< OUString > StringResourceImpl::getResourceIDs( )
|
Sequence< OUString > StringResourceImpl::getResourceIDs( )
|
||||||
{
|
{
|
||||||
std::unique_lock aGuard( m_aMutex );
|
std::unique_lock aGuard( m_aMutex );
|
||||||
return implGetResourceIDs( m_pCurrentLocaleItem );
|
return implGetResourceIDs(aGuard, m_pCurrentLocaleItem);
|
||||||
}
|
}
|
||||||
|
|
||||||
Locale StringResourceImpl::getCurrentLocale()
|
Locale StringResourceImpl::getCurrentLocale()
|
||||||
@ -283,7 +283,7 @@ void StringResourceImpl::implSetCurrentLocale( std::unique_lock<std::mutex>& rGu
|
|||||||
|
|
||||||
if( pLocaleItem != nullptr )
|
if( pLocaleItem != nullptr )
|
||||||
{
|
{
|
||||||
(void)loadLocale( pLocaleItem );
|
(void)loadLocale(rGuard, pLocaleItem);
|
||||||
m_pCurrentLocaleItem = pLocaleItem;
|
m_pCurrentLocaleItem = pLocaleItem;
|
||||||
|
|
||||||
// Only notify without modifying
|
// Only notify without modifying
|
||||||
@ -320,7 +320,7 @@ void StringResourceImpl::setDefaultLocale( const Locale& locale )
|
|||||||
void StringResourceImpl::implSetString( std::unique_lock<std::mutex>& rGuard, const OUString& ResourceID,
|
void StringResourceImpl::implSetString( std::unique_lock<std::mutex>& rGuard, const OUString& ResourceID,
|
||||||
const OUString& Str, LocaleItem* pLocaleItem )
|
const OUString& Str, LocaleItem* pLocaleItem )
|
||||||
{
|
{
|
||||||
if( !(pLocaleItem != nullptr && loadLocale( pLocaleItem )) )
|
if( !(pLocaleItem != nullptr && loadLocale(rGuard, pLocaleItem)) )
|
||||||
return;
|
return;
|
||||||
|
|
||||||
IdToStringMap& rHashMap = pLocaleItem->m_aIdToStringMap;
|
IdToStringMap& rHashMap = pLocaleItem->m_aIdToStringMap;
|
||||||
@ -331,7 +331,7 @@ void StringResourceImpl::implSetString( std::unique_lock<std::mutex>& rGuard, co
|
|||||||
{
|
{
|
||||||
IdToIndexMap& rIndexMap = pLocaleItem->m_aIdToIndexMap;
|
IdToIndexMap& rIndexMap = pLocaleItem->m_aIdToIndexMap;
|
||||||
rIndexMap[ ResourceID ] = pLocaleItem->m_nNextIndex++;
|
rIndexMap[ ResourceID ] = pLocaleItem->m_nNextIndex++;
|
||||||
implScanIdForNumber( ResourceID );
|
implScanIdForNumber(rGuard, ResourceID);
|
||||||
}
|
}
|
||||||
rHashMap[ ResourceID ] = Str;
|
rHashMap[ ResourceID ] = Str;
|
||||||
pLocaleItem->m_bModified = true;
|
pLocaleItem->m_bModified = true;
|
||||||
@ -356,7 +356,7 @@ void StringResourceImpl::setStringForLocale
|
|||||||
|
|
||||||
void StringResourceImpl::implRemoveId( std::unique_lock<std::mutex>& rGuard, const OUString& ResourceID, LocaleItem* pLocaleItem )
|
void StringResourceImpl::implRemoveId( std::unique_lock<std::mutex>& rGuard, const OUString& ResourceID, LocaleItem* pLocaleItem )
|
||||||
{
|
{
|
||||||
if( pLocaleItem != nullptr && loadLocale( pLocaleItem ) )
|
if( pLocaleItem != nullptr && loadLocale(rGuard, pLocaleItem) )
|
||||||
{
|
{
|
||||||
IdToStringMap& rHashMap = pLocaleItem->m_aIdToStringMap;
|
IdToStringMap& rHashMap = pLocaleItem->m_aIdToStringMap;
|
||||||
IdToStringMap::iterator it = rHashMap.find( ResourceID );
|
IdToStringMap::iterator it = rHashMap.find( ResourceID );
|
||||||
@ -410,7 +410,7 @@ void StringResourceImpl::newLocale( const Locale& locale )
|
|||||||
LocaleItem* pCopyFromItem = m_pDefaultLocaleItem;
|
LocaleItem* pCopyFromItem = m_pDefaultLocaleItem;
|
||||||
if( pCopyFromItem == nullptr )
|
if( pCopyFromItem == nullptr )
|
||||||
pCopyFromItem = m_pCurrentLocaleItem;
|
pCopyFromItem = m_pCurrentLocaleItem;
|
||||||
if( pCopyFromItem != nullptr && loadLocale( pCopyFromItem ) )
|
if( pCopyFromItem != nullptr && loadLocale(aGuard, pCopyFromItem) )
|
||||||
{
|
{
|
||||||
const IdToStringMap& rSourceMap = pCopyFromItem->m_aIdToStringMap;
|
const IdToStringMap& rSourceMap = pCopyFromItem->m_aIdToStringMap;
|
||||||
IdToStringMap& rTargetMap = pLocaleItem->m_aIdToStringMap;
|
IdToStringMap& rTargetMap = pLocaleItem->m_aIdToStringMap;
|
||||||
@ -506,7 +506,7 @@ void StringResourceImpl::removeLocale( const Locale& locale )
|
|||||||
implModified(aGuard);
|
implModified(aGuard);
|
||||||
}
|
}
|
||||||
|
|
||||||
void StringResourceImpl::implScanIdForNumber( const OUString& ResourceID )
|
void StringResourceImpl::implScanIdForNumber(std::unique_lock<std::mutex>& /*rGuard*/, const OUString& ResourceID)
|
||||||
{
|
{
|
||||||
const sal_Unicode* pSrc = ResourceID.getStr();
|
const sal_Unicode* pSrc = ResourceID.getStr();
|
||||||
sal_Int32 nLen = ResourceID.getLength();
|
sal_Int32 nLen = ResourceID.getLength();
|
||||||
@ -534,7 +534,7 @@ sal_Int32 StringResourceImpl::getUniqueNumericId( )
|
|||||||
|
|
||||||
if( m_nNextUniqueNumericId == UNIQUE_NUMBER_NEEDS_INITIALISATION )
|
if( m_nNextUniqueNumericId == UNIQUE_NUMBER_NEEDS_INITIALISATION )
|
||||||
{
|
{
|
||||||
implLoadAllLocales();
|
implLoadAllLocales(aGuard);
|
||||||
m_nNextUniqueNumericId = 0;
|
m_nNextUniqueNumericId = 0;
|
||||||
}
|
}
|
||||||
|
|
||||||
@ -614,38 +614,32 @@ void StringResourceImpl::implNotifyListeners(std::unique_lock<std::mutex>& rGuar
|
|||||||
);
|
);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
// Loading
|
// Loading
|
||||||
|
|
||||||
bool StringResourceImpl::loadLocale( LocaleItem* )
|
bool StringResourceImpl::loadLocale(std::unique_lock<std::mutex>& /*rGuard*/, LocaleItem*)
|
||||||
{
|
{
|
||||||
// Base implementation has nothing to load
|
// Base implementation has nothing to load
|
||||||
return true;
|
return true;
|
||||||
}
|
}
|
||||||
|
|
||||||
void StringResourceImpl::implLoadAllLocales()
|
void StringResourceImpl::implLoadAllLocales(std::unique_lock<std::mutex>& /*rGuard*/)
|
||||||
{
|
{
|
||||||
// Base implementation has nothing to load
|
// Base implementation has nothing to load
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
// StringResourcePersistenceImpl
|
// StringResourcePersistenceImpl
|
||||||
|
|
||||||
|
|
||||||
StringResourcePersistenceImpl::StringResourcePersistenceImpl( const Reference< XComponentContext >& rxContext )
|
StringResourcePersistenceImpl::StringResourcePersistenceImpl( const Reference< XComponentContext >& rxContext )
|
||||||
: StringResourcePersistenceImpl_BASE( rxContext )
|
: StringResourcePersistenceImpl_BASE( rxContext )
|
||||||
{
|
{
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
StringResourcePersistenceImpl::~StringResourcePersistenceImpl()
|
StringResourcePersistenceImpl::~StringResourcePersistenceImpl()
|
||||||
{
|
{
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
// XServiceInfo
|
// XServiceInfo
|
||||||
|
|
||||||
|
|
||||||
OUString StringResourcePersistenceImpl::getImplementationName( )
|
OUString StringResourcePersistenceImpl::getImplementationName( )
|
||||||
{
|
{
|
||||||
return u"com.sun.star.comp.scripting.StringResource"_ustr;
|
return u"com.sun.star.comp.scripting.StringResource"_ustr;
|
||||||
@ -824,11 +818,12 @@ void StringResourcePersistenceImpl::storeToStorage( const Reference< XStorage >&
|
|||||||
{
|
{
|
||||||
std::unique_lock aGuard( m_aMutex );
|
std::unique_lock aGuard( m_aMutex );
|
||||||
|
|
||||||
implStoreAtStorage( NameBase, Comment, Storage, false/*bUsedForStore*/, true/*bStoreAll*/ );
|
implStoreAtStorage(aGuard, NameBase, Comment, Storage, false/*bUsedForStore*/, true/*bStoreAll*/ );
|
||||||
}
|
}
|
||||||
|
|
||||||
void StringResourcePersistenceImpl::implStoreAtStorage
|
void StringResourcePersistenceImpl::implStoreAtStorage
|
||||||
(
|
(
|
||||||
|
std::unique_lock<std::mutex>& rGuard,
|
||||||
const OUString& aNameBase,
|
const OUString& aNameBase,
|
||||||
const OUString& aComment,
|
const OUString& aComment,
|
||||||
const Reference< css::embed::XStorage >& Storage,
|
const Reference< css::embed::XStorage >& Storage,
|
||||||
@ -861,7 +856,7 @@ void StringResourcePersistenceImpl::implStoreAtStorage
|
|||||||
for( auto& pLocaleItem : m_aLocaleItemVector )
|
for( auto& pLocaleItem : m_aLocaleItemVector )
|
||||||
{
|
{
|
||||||
if( pLocaleItem != nullptr && (bStoreAll || pLocaleItem->m_bModified) &&
|
if( pLocaleItem != nullptr && (bStoreAll || pLocaleItem->m_bModified) &&
|
||||||
loadLocale( pLocaleItem.get() ) )
|
loadLocale(rGuard, pLocaleItem.get()) )
|
||||||
{
|
{
|
||||||
OUString aStreamName = implGetFileNameForLocaleItem( pLocaleItem.get(), aNameBase ) + ".properties";
|
OUString aStreamName = implGetFileNameForLocaleItem( pLocaleItem.get(), aNameBase ) + ".properties";
|
||||||
|
|
||||||
@ -935,7 +930,7 @@ void StringResourcePersistenceImpl::storeToURL( const OUString& URL,
|
|||||||
if( Handler.is() )
|
if( Handler.is() )
|
||||||
xFileAccess->setInteractionHandler( Handler );
|
xFileAccess->setInteractionHandler( Handler );
|
||||||
|
|
||||||
implStoreAtLocation( URL, NameBase, Comment, xFileAccess, false/*bUsedForStore*/, true/*bStoreAll*/ );
|
implStoreAtLocation(aGuard, URL, NameBase, Comment, xFileAccess, false/*bUsedForStore*/, true/*bStoreAll*/);
|
||||||
}
|
}
|
||||||
|
|
||||||
void StringResourcePersistenceImpl::implKillRemovedLocaleFiles
|
void StringResourcePersistenceImpl::implKillRemovedLocaleFiles
|
||||||
@ -982,6 +977,7 @@ void StringResourcePersistenceImpl::implKillChangedDefaultFiles
|
|||||||
|
|
||||||
void StringResourcePersistenceImpl::implStoreAtLocation
|
void StringResourcePersistenceImpl::implStoreAtLocation
|
||||||
(
|
(
|
||||||
|
std::unique_lock<std::mutex>& rGuard,
|
||||||
std::u16string_view Location,
|
std::u16string_view Location,
|
||||||
const OUString& aNameBase,
|
const OUString& aNameBase,
|
||||||
const OUString& aComment,
|
const OUString& aComment,
|
||||||
@ -998,7 +994,7 @@ void StringResourcePersistenceImpl::implStoreAtLocation
|
|||||||
for( auto& pLocaleItem : m_aLocaleItemVector )
|
for( auto& pLocaleItem : m_aLocaleItemVector )
|
||||||
{
|
{
|
||||||
if( pLocaleItem != nullptr && (bStoreAll || bKillAll || pLocaleItem->m_bModified) &&
|
if( pLocaleItem != nullptr && (bStoreAll || bKillAll || pLocaleItem->m_bModified) &&
|
||||||
loadLocale( pLocaleItem.get() ) )
|
loadLocale(rGuard, pLocaleItem.get()) )
|
||||||
{
|
{
|
||||||
OUString aCompleteFileName =
|
OUString aCompleteFileName =
|
||||||
implGetPathForLocaleItem( pLocaleItem.get(), aNameBase, Location );
|
implGetPathForLocaleItem( pLocaleItem.get(), aNameBase, Location );
|
||||||
@ -1178,7 +1174,7 @@ Sequence< sal_Int8 > StringResourcePersistenceImpl::exportBinary( )
|
|||||||
sal_Int32 iDefault = 0;
|
sal_Int32 iDefault = 0;
|
||||||
for( auto& pLocaleItem : m_aLocaleItemVector )
|
for( auto& pLocaleItem : m_aLocaleItemVector )
|
||||||
{
|
{
|
||||||
if( pLocaleItem != nullptr && loadLocale( pLocaleItem.get() ) )
|
if( pLocaleItem != nullptr && loadLocale(aGuard, pLocaleItem.get()) )
|
||||||
{
|
{
|
||||||
if( m_pDefaultLocaleItem == pLocaleItem.get() )
|
if( m_pDefaultLocaleItem == pLocaleItem.get() )
|
||||||
iDefault = iLocale;
|
iDefault = iLocale;
|
||||||
@ -1414,8 +1410,9 @@ void StringResourcePersistenceImpl::importBinary( const Sequence< ::sal_Int8 >&
|
|||||||
LocaleItem* pLocaleItem = new LocaleItem( std::move(aLocale) );
|
LocaleItem* pLocaleItem = new LocaleItem( std::move(aLocale) );
|
||||||
if( iDefault == i )
|
if( iDefault == i )
|
||||||
pUseAsDefaultItem = pLocaleItem;
|
pUseAsDefaultItem = pLocaleItem;
|
||||||
|
std::unique_lock aGuard( m_aMutex );
|
||||||
m_aLocaleItemVector.emplace_back( pLocaleItem );
|
m_aLocaleItemVector.emplace_back( pLocaleItem );
|
||||||
implReadPropertiesFile( pLocaleItem, xInput );
|
implReadPropertiesFile(aGuard, pLocaleItem, xInput);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
@ -1467,11 +1464,11 @@ static bool checkNamingSceme( std::u16string_view aName, std::u16string_view aNa
|
|||||||
return bSuccess;
|
return bSuccess;
|
||||||
}
|
}
|
||||||
|
|
||||||
void StringResourcePersistenceImpl::implLoadAllLocales()
|
void StringResourcePersistenceImpl::implLoadAllLocales(std::unique_lock<std::mutex>& rGuard)
|
||||||
{
|
{
|
||||||
for( auto& pLocaleItem : m_aLocaleItemVector )
|
for( auto& pLocaleItem : m_aLocaleItemVector )
|
||||||
if( pLocaleItem )
|
if( pLocaleItem )
|
||||||
loadLocale( pLocaleItem.get() );
|
loadLocale(rGuard, pLocaleItem.get());
|
||||||
}
|
}
|
||||||
|
|
||||||
// Scan locale properties files helper
|
// Scan locale properties files helper
|
||||||
@ -1537,7 +1534,7 @@ void StringResourcePersistenceImpl::implScanLocales(std::unique_lock<std::mutex>
|
|||||||
// base class, but pure virtual not possible-
|
// base class, but pure virtual not possible-
|
||||||
}
|
}
|
||||||
|
|
||||||
bool StringResourcePersistenceImpl::loadLocale( LocaleItem* pLocaleItem )
|
bool StringResourcePersistenceImpl::loadLocale(std::unique_lock<std::mutex>& rGuard, LocaleItem* pLocaleItem)
|
||||||
{
|
{
|
||||||
bool bSuccess = false;
|
bool bSuccess = false;
|
||||||
|
|
||||||
@ -1550,14 +1547,14 @@ bool StringResourcePersistenceImpl::loadLocale( LocaleItem* pLocaleItem )
|
|||||||
}
|
}
|
||||||
else
|
else
|
||||||
{
|
{
|
||||||
bSuccess = implLoadLocale( pLocaleItem );
|
bSuccess = implLoadLocale(rGuard, pLocaleItem);
|
||||||
pLocaleItem->m_bLoaded = true; // = bSuccess??? -> leads to more tries
|
pLocaleItem->m_bLoaded = true; // = bSuccess??? -> leads to more tries
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
return bSuccess;
|
return bSuccess;
|
||||||
}
|
}
|
||||||
|
|
||||||
bool StringResourcePersistenceImpl::implLoadLocale( LocaleItem* )
|
bool StringResourcePersistenceImpl::implLoadLocale(std::unique_lock<std::mutex>& /*rGuard*/, LocaleItem*)
|
||||||
{
|
{
|
||||||
// Dummy implementation, method not called for this
|
// Dummy implementation, method not called for this
|
||||||
// base class, but pure virtual not possible-
|
// base class, but pure virtual not possible-
|
||||||
@ -1729,8 +1726,9 @@ static void CheckContinueInNextLine( const Reference< io::XTextInputStream2 >& x
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
bool StringResourcePersistenceImpl::implReadPropertiesFile
|
bool StringResourcePersistenceImpl::implReadPropertiesFile(
|
||||||
( LocaleItem* pLocaleItem, const Reference< io::XInputStream >& xInputStream )
|
std::unique_lock<std::mutex>& rGuard, LocaleItem* pLocaleItem,
|
||||||
|
const Reference<io::XInputStream>& xInputStream)
|
||||||
{
|
{
|
||||||
if( !xInputStream.is() || pLocaleItem == nullptr )
|
if( !xInputStream.is() || pLocaleItem == nullptr )
|
||||||
return false;
|
return false;
|
||||||
@ -1842,7 +1840,7 @@ bool StringResourcePersistenceImpl::implReadPropertiesFile
|
|||||||
|
|
||||||
// Push into table
|
// Push into table
|
||||||
pLocaleItem->m_aIdToStringMap[ aResourceID ] = aValueStr;
|
pLocaleItem->m_aIdToStringMap[ aResourceID ] = aValueStr;
|
||||||
implScanIdForNumber( aResourceID );
|
implScanIdForNumber(rGuard, aResourceID);
|
||||||
IdToIndexMap& rIndexMap = pLocaleItem->m_aIdToIndexMap;
|
IdToIndexMap& rIndexMap = pLocaleItem->m_aIdToIndexMap;
|
||||||
rIndexMap[ aResourceID ] = pLocaleItem->m_nNextIndex++;
|
rIndexMap[ aResourceID ] = pLocaleItem->m_nNextIndex++;
|
||||||
}
|
}
|
||||||
@ -2172,7 +2170,7 @@ void StringResourceWithStorageImpl::store()
|
|||||||
if( !m_bModified && !bStoreAll )
|
if( !m_bModified && !bStoreAll )
|
||||||
return;
|
return;
|
||||||
|
|
||||||
implStoreAtStorage( m_aNameBase, m_aComment, m_xStorage, true/*bUsedForStore*/, bStoreAll );
|
implStoreAtStorage(aGuard, m_aNameBase, m_aComment, m_xStorage, true/*bUsedForStore*/, bStoreAll);
|
||||||
m_bModified = false;
|
m_bModified = false;
|
||||||
}
|
}
|
||||||
|
|
||||||
@ -2222,7 +2220,7 @@ void StringResourceWithStorageImpl::setStorage( const Reference< XStorage >& Sto
|
|||||||
throw IllegalArgumentException( u"StringResourceWithStorageImpl::setStorage: invalid storage"_ustr, Reference< XInterface >(), 0 );
|
throw IllegalArgumentException( u"StringResourceWithStorageImpl::setStorage: invalid storage"_ustr, Reference< XInterface >(), 0 );
|
||||||
}
|
}
|
||||||
|
|
||||||
implLoadAllLocales();
|
implLoadAllLocales(aGuard);
|
||||||
|
|
||||||
m_xStorage = Storage;
|
m_xStorage = Storage;
|
||||||
m_bStorageChanged = true;
|
m_bStorageChanged = true;
|
||||||
@ -2233,7 +2231,7 @@ void StringResourceWithStorageImpl::setStorage( const Reference< XStorage >& Sto
|
|||||||
|
|
||||||
|
|
||||||
// Scan locale properties files
|
// Scan locale properties files
|
||||||
void StringResourceWithStorageImpl::implScanLocales(std::unique_lock<std::mutex>& /*rGuard*/)
|
void StringResourceWithStorageImpl::implScanLocales(std::unique_lock<std::mutex>& rGuard)
|
||||||
{
|
{
|
||||||
if( m_xStorage.is() )
|
if( m_xStorage.is() )
|
||||||
{
|
{
|
||||||
@ -2241,11 +2239,11 @@ void StringResourceWithStorageImpl::implScanLocales(std::unique_lock<std::mutex>
|
|||||||
implScanLocaleNames( aContentSeq );
|
implScanLocaleNames( aContentSeq );
|
||||||
}
|
}
|
||||||
|
|
||||||
implLoadAllLocales();
|
implLoadAllLocales(rGuard);
|
||||||
}
|
}
|
||||||
|
|
||||||
// Loading
|
// Loading
|
||||||
bool StringResourceWithStorageImpl::implLoadLocale( LocaleItem* pLocaleItem )
|
bool StringResourceWithStorageImpl::implLoadLocale(std::unique_lock<std::mutex>& rGuard, LocaleItem* pLocaleItem)
|
||||||
{
|
{
|
||||||
bool bSuccess = false;
|
bool bSuccess = false;
|
||||||
try
|
try
|
||||||
@ -2260,7 +2258,7 @@ bool StringResourceWithStorageImpl::implLoadLocale( LocaleItem* pLocaleItem )
|
|||||||
Reference< io::XInputStream > xInputStream = xElementStream->getInputStream();
|
Reference< io::XInputStream > xInputStream = xElementStream->getInputStream();
|
||||||
if( xInputStream.is() )
|
if( xInputStream.is() )
|
||||||
{
|
{
|
||||||
bSuccess = StringResourcePersistenceImpl::implReadPropertiesFile( pLocaleItem, xInputStream );
|
bSuccess = StringResourcePersistenceImpl::implReadPropertiesFile(rGuard, pLocaleItem, xInputStream);
|
||||||
xInputStream->closeInput();
|
xInputStream->closeInput();
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
@ -2463,7 +2461,7 @@ void StringResourceWithLocationImpl::store()
|
|||||||
return;
|
return;
|
||||||
|
|
||||||
Reference< ucb::XSimpleFileAccess3 > xFileAccess = getFileAccessImpl();
|
Reference< ucb::XSimpleFileAccess3 > xFileAccess = getFileAccessImpl();
|
||||||
implStoreAtLocation( m_aLocation, m_aNameBase, m_aComment,
|
implStoreAtLocation(aGuard, m_aLocation, m_aNameBase, m_aComment,
|
||||||
xFileAccess, true/*bUsedForStore*/, bStoreAll );
|
xFileAccess, true/*bUsedForStore*/, bStoreAll );
|
||||||
m_bModified = false;
|
m_bModified = false;
|
||||||
}
|
}
|
||||||
@ -2517,10 +2515,10 @@ void StringResourceWithLocationImpl::setURL( const OUString& URL )
|
|||||||
throw IllegalArgumentException( u"StringResourceWithLocationImpl::setURL: invalid URL"_ustr, Reference< XInterface >(), 0 );
|
throw IllegalArgumentException( u"StringResourceWithLocationImpl::setURL: invalid URL"_ustr, Reference< XInterface >(), 0 );
|
||||||
}
|
}
|
||||||
|
|
||||||
implLoadAllLocales();
|
implLoadAllLocales(aGuard);
|
||||||
|
|
||||||
// Delete files at old location
|
// Delete files at old location
|
||||||
implStoreAtLocation( m_aLocation, m_aNameBase, m_aComment,
|
implStoreAtLocation(aGuard, m_aLocation, m_aNameBase, m_aComment,
|
||||||
getFileAccessImpl(), false/*bUsedForStore*/, false/*bStoreAll*/, true/*bKillAll*/ );
|
getFileAccessImpl(), false/*bUsedForStore*/, false/*bStoreAll*/, true/*bKillAll*/ );
|
||||||
|
|
||||||
m_aLocation = URL;
|
m_aLocation = URL;
|
||||||
@ -2543,7 +2541,7 @@ void StringResourceWithLocationImpl::implScanLocales(std::unique_lock<std::mutex
|
|||||||
}
|
}
|
||||||
|
|
||||||
// Loading
|
// Loading
|
||||||
bool StringResourceWithLocationImpl::implLoadLocale( LocaleItem* pLocaleItem )
|
bool StringResourceWithLocationImpl::implLoadLocale(std::unique_lock<std::mutex>& rGuard, LocaleItem* pLocaleItem)
|
||||||
{
|
{
|
||||||
bool bSuccess = false;
|
bool bSuccess = false;
|
||||||
|
|
||||||
@ -2560,7 +2558,7 @@ bool StringResourceWithLocationImpl::implLoadLocale( LocaleItem* pLocaleItem )
|
|||||||
{}
|
{}
|
||||||
if( xInputStream.is() )
|
if( xInputStream.is() )
|
||||||
{
|
{
|
||||||
bSuccess = StringResourcePersistenceImpl::implReadPropertiesFile( pLocaleItem, xInputStream );
|
bSuccess = StringResourcePersistenceImpl::implReadPropertiesFile(rGuard, pLocaleItem, xInputStream);
|
||||||
xInputStream->closeInput();
|
xInputStream->closeInput();
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -101,7 +101,7 @@ protected:
|
|||||||
sal_Int32 m_nNextUniqueNumericId;
|
sal_Int32 m_nNextUniqueNumericId;
|
||||||
|
|
||||||
// Scans ResourceID to start with number and adapt m_nNextUniqueNumericId
|
// Scans ResourceID to start with number and adapt m_nNextUniqueNumericId
|
||||||
void implScanIdForNumber( const OUString& ResourceID );
|
void implScanIdForNumber(std::unique_lock<std::mutex>& rGuard, const OUString& ResourceID);
|
||||||
const static sal_Int32 UNIQUE_NUMBER_NEEDS_INITIALISATION = -1;
|
const static sal_Int32 UNIQUE_NUMBER_NEEDS_INITIALISATION = -1;
|
||||||
|
|
||||||
// Checks read only status and throws exception if it's true
|
// Checks read only status and throws exception if it's true
|
||||||
@ -126,9 +126,9 @@ protected:
|
|||||||
|
|
||||||
//=== Impl methods for ...ForLocale methods ===
|
//=== Impl methods for ...ForLocale methods ===
|
||||||
/// @throws css::resource::MissingResourceException
|
/// @throws css::resource::MissingResourceException
|
||||||
OUString implResolveString( const OUString& ResourceID, LocaleItem* pLocaleItem );
|
OUString implResolveString(std::unique_lock<std::mutex>& rGuard, const OUString& ResourceID, LocaleItem* pLocaleItem);
|
||||||
bool implHasEntryForId( const OUString& ResourceID, LocaleItem* pLocaleItem );
|
bool implHasEntryForId(std::unique_lock<std::mutex>& rGuard, const OUString& ResourceID, LocaleItem* pLocaleItem);
|
||||||
css::uno::Sequence< OUString > implGetResourceIDs( LocaleItem* pLocaleItem );
|
css::uno::Sequence< OUString > implGetResourceIDs(std::unique_lock<std::mutex>& rGuard, LocaleItem* pLocaleItem);
|
||||||
void implSetString( std::unique_lock<std::mutex>& rGuard, const OUString& ResourceID,
|
void implSetString( std::unique_lock<std::mutex>& rGuard, const OUString& ResourceID,
|
||||||
const OUString& Str, LocaleItem* pLocaleItem );
|
const OUString& Str, LocaleItem* pLocaleItem );
|
||||||
/// @throws css::resource::MissingResourceException
|
/// @throws css::resource::MissingResourceException
|
||||||
@ -136,9 +136,9 @@ protected:
|
|||||||
|
|
||||||
// Method to load a locale if necessary, returns true if loading was
|
// Method to load a locale if necessary, returns true if loading was
|
||||||
// successful. Default implementation in base class just returns true.
|
// successful. Default implementation in base class just returns true.
|
||||||
virtual bool loadLocale( LocaleItem* pLocaleItem );
|
virtual bool loadLocale(std::unique_lock<std::mutex>& rGuard, LocaleItem* pLocaleItem);
|
||||||
|
|
||||||
virtual void implLoadAllLocales();
|
virtual void implLoadAllLocales(std::unique_lock<std::mutex>& rGuard);
|
||||||
|
|
||||||
public:
|
public:
|
||||||
explicit StringResourceImpl(
|
explicit StringResourceImpl(
|
||||||
@ -203,20 +203,20 @@ protected:
|
|||||||
virtual void implScanLocales(std::unique_lock<std::mutex>& rGuard);
|
virtual void implScanLocales(std::unique_lock<std::mutex>& rGuard);
|
||||||
|
|
||||||
// Method to load a locale if necessary, returns true if loading was successful
|
// Method to load a locale if necessary, returns true if loading was successful
|
||||||
virtual bool loadLocale( LocaleItem* pLocaleItem ) override;
|
virtual bool loadLocale(std::unique_lock<std::mutex>& rGuard, LocaleItem* pLocaleItem) override;
|
||||||
|
|
||||||
// does the actual loading
|
// does the actual loading
|
||||||
virtual bool implLoadLocale( LocaleItem* pLocaleItem );
|
virtual bool implLoadLocale(std::unique_lock<std::mutex>& rGuard, LocaleItem* pLocaleItem);
|
||||||
|
|
||||||
virtual void implLoadAllLocales() override;
|
virtual void implLoadAllLocales(std::unique_lock<std::mutex>& rGuard) override;
|
||||||
|
|
||||||
void implScanLocaleNames( const css::uno::Sequence< OUString >& aContentSeq );
|
void implScanLocaleNames( const css::uno::Sequence< OUString >& aContentSeq );
|
||||||
static OUString implGetFileNameForLocaleItem( LocaleItem const * pLocaleItem, const OUString& aNameBase );
|
static OUString implGetFileNameForLocaleItem( LocaleItem const * pLocaleItem, const OUString& aNameBase );
|
||||||
static OUString implGetPathForLocaleItem( LocaleItem const * pLocaleItem, const OUString& aNameBase,
|
static OUString implGetPathForLocaleItem( LocaleItem const * pLocaleItem, const OUString& aNameBase,
|
||||||
std::u16string_view aLocation, bool bDefaultFile=false );
|
std::u16string_view aLocation, bool bDefaultFile=false );
|
||||||
|
|
||||||
bool implReadPropertiesFile( LocaleItem* pLocaleItem,
|
bool implReadPropertiesFile(std::unique_lock<std::mutex>& rGuard, LocaleItem* pLocaleItem,
|
||||||
const css::uno::Reference< css::io::XInputStream >& xInput );
|
const css::uno::Reference< css::io::XInputStream >& xInput);
|
||||||
|
|
||||||
bool implWritePropertiesFile( LocaleItem const * pLocaleItem,
|
bool implWritePropertiesFile( LocaleItem const * pLocaleItem,
|
||||||
const css::uno::Reference< css::io::XOutputStream >& xOutputStream,
|
const css::uno::Reference< css::io::XOutputStream >& xOutputStream,
|
||||||
@ -228,6 +228,7 @@ protected:
|
|||||||
/// @throws css::uno::RuntimeException
|
/// @throws css::uno::RuntimeException
|
||||||
void implStoreAtStorage
|
void implStoreAtStorage
|
||||||
(
|
(
|
||||||
|
std::unique_lock<std::mutex>& rGuard,
|
||||||
const OUString& aNameBase,
|
const OUString& aNameBase,
|
||||||
const OUString& aComment,
|
const OUString& aComment,
|
||||||
const css::uno::Reference< css::embed::XStorage >& Storage,
|
const css::uno::Reference< css::embed::XStorage >& Storage,
|
||||||
@ -257,6 +258,7 @@ protected:
|
|||||||
/// @throws css::uno::RuntimeException
|
/// @throws css::uno::RuntimeException
|
||||||
void implStoreAtLocation
|
void implStoreAtLocation
|
||||||
(
|
(
|
||||||
|
std::unique_lock<std::mutex>& rGuard,
|
||||||
std::u16string_view Location,
|
std::u16string_view Location,
|
||||||
const OUString& aNameBase,
|
const OUString& aNameBase,
|
||||||
const OUString& aComment,
|
const OUString& aComment,
|
||||||
@ -334,7 +336,7 @@ class StringResourceWithStorageImpl : public StringResourceWithStorageImpl_BASE
|
|||||||
bool m_bStorageChanged;
|
bool m_bStorageChanged;
|
||||||
|
|
||||||
virtual void implScanLocales(std::unique_lock<std::mutex>& rGuard) override;
|
virtual void implScanLocales(std::unique_lock<std::mutex>& rGuard) override;
|
||||||
virtual bool implLoadLocale( LocaleItem* pLocaleItem ) override;
|
virtual bool implLoadLocale(std::unique_lock<std::mutex>& rGuard, LocaleItem* pLocaleItem) override;
|
||||||
|
|
||||||
public:
|
public:
|
||||||
explicit StringResourceWithStorageImpl( const css::uno::Reference< css::uno::XComponentContext >& rxContext );
|
explicit StringResourceWithStorageImpl( const css::uno::Reference< css::uno::XComponentContext >& rxContext );
|
||||||
@ -416,7 +418,7 @@ class StringResourceWithLocationImpl : public StringResourceWithLocationImpl_BAS
|
|||||||
const css::uno::Reference< css::ucb::XSimpleFileAccess3 > & getFileAccessImpl();
|
const css::uno::Reference< css::ucb::XSimpleFileAccess3 > & getFileAccessImpl();
|
||||||
|
|
||||||
virtual void implScanLocales(std::unique_lock<std::mutex>& rGuard) override;
|
virtual void implScanLocales(std::unique_lock<std::mutex>& rGuard) override;
|
||||||
virtual bool implLoadLocale( LocaleItem* pLocaleItem ) override;
|
virtual bool implLoadLocale(std::unique_lock<std::mutex>& rGuard, LocaleItem* pLocaleItem) override;
|
||||||
|
|
||||||
public:
|
public:
|
||||||
explicit StringResourceWithLocationImpl( const css::uno::Reference< css::uno::XComponentContext >& rxContext );
|
explicit StringResourceWithLocationImpl( const css::uno::Reference< css::uno::XComponentContext >& rxContext );
|
||||||
|
Loading…
x
Reference in New Issue
Block a user