summaryrefslogtreecommitdiff
path: root/i18nlangtag
diff options
context:
space:
mode:
authorStephan Bergmann <sbergman@redhat.com>2015-05-20 10:18:32 +0200
committerStephan Bergmann <sbergman@redhat.com>2015-05-20 10:19:20 +0200
commit8baaf76ae373a7c945e1cc2fa5cd57b59749d414 (patch)
treeea75c5fd9c34b9c8f37e02546e9c698f00c9066a /i18nlangtag
parentf387b04dc89d2bab96d77a6f1445d272e2b1d827 (diff)
teardown is only called from ~LiblangtagDataRef, anyway
...so don't obscure that sad reality Change-Id: I0ddd572e55d66f6c23c776ca62885b6ba482bf5e
Diffstat (limited to 'i18nlangtag')
-rw-r--r--i18nlangtag/source/languagetag/languagetag.cxx36
1 files changed, 12 insertions, 24 deletions
diff --git a/i18nlangtag/source/languagetag/languagetag.cxx b/i18nlangtag/source/languagetag/languagetag.cxx
index 410255414378..34a7f718ff48 100644
--- a/i18nlangtag/source/languagetag/languagetag.cxx
+++ b/i18nlangtag/source/languagetag/languagetag.cxx
@@ -159,19 +159,14 @@ class LiblangtagDataRef
public:
LiblangtagDataRef();
~LiblangtagDataRef();
- inline void incRef()
+ inline void init()
{
- if (mnRef != SAL_MAX_UINT32 && !mnRef++)
+ if (!mbInitialized)
setup();
}
- inline void decRef()
- {
- if (mnRef != SAL_MAX_UINT32 && mnRef && !--mnRef)
- teardown();
- }
private:
OString maDataPath; // path to liblangtag data, "|" if system
- sal_uInt32 mnRef;
+ bool mbInitialized;
void setupDataPath();
void setup();
@@ -184,16 +179,14 @@ struct theDataRef : public rtl::Static< LiblangtagDataRef, theDataRef > {};
LiblangtagDataRef::LiblangtagDataRef()
:
- mnRef(0)
+ mbInitialized(false)
{
}
LiblangtagDataRef::~LiblangtagDataRef()
{
- // When destructed we're tearing down unconditionally.
- if (mnRef)
- mnRef = 1;
- decRef();
+ if (mbInitialized)
+ teardown();
}
void LiblangtagDataRef::setup()
@@ -202,8 +195,7 @@ void LiblangtagDataRef::setup()
if (maDataPath.isEmpty())
setupDataPath();
lt_db_initialize();
- // Hold ref eternally.
- mnRef = SAL_MAX_UINT32;
+ mbInitialized = true;
}
void LiblangtagDataRef::teardown()
@@ -420,7 +412,7 @@ LanguageTagImpl::LanguageTagImpl( const LanguageTagImpl & rLanguageTagImpl )
mbCachedVariants( rLanguageTagImpl.mbCachedVariants)
{
if (mpImplLangtag)
- theDataRef::get().incRef();
+ theDataRef::get().init();
}
@@ -453,9 +445,7 @@ LanguageTagImpl& LanguageTagImpl::operator=( const LanguageTagImpl & rLanguageTa
mbCachedCountry = rLanguageTagImpl.mbCachedCountry;
mbCachedVariants = rLanguageTagImpl.mbCachedVariants;
if (mpImplLangtag && !oldTag)
- theDataRef::get().incRef();
- else if (!mpImplLangtag && oldTag)
- theDataRef::get().decRef();
+ theDataRef::get().init();
return *this;
}
@@ -465,7 +455,6 @@ LanguageTagImpl::~LanguageTagImpl()
if (mpImplLangtag)
{
lt_tag_unref( mpImplLangtag);
- theDataRef::get().decRef();
}
}
@@ -1203,7 +1192,7 @@ bool LanguageTagImpl::canonicalize()
if (!mpImplLangtag)
{
- theDataRef::get().incRef();
+ theDataRef::get().init();
mpImplLangtag = lt_tag_new();
}
@@ -1491,7 +1480,7 @@ void LanguageTag::convertFromRtlLocale()
* string. */
#if 0
myLtError aError;
- theDataRef::get().incRef();
+ theDataRef::get().init();
mpImplLangtag = lt_tag_convert_from_locale( aStr.getStr(), &aError.p);
maBcp47 = OStringToOUString( lt_tag_get_string( mpImplLangtag), RTL_TEXTENCODING_UTF8);
mbInitializedBcp47 = true;
@@ -2703,13 +2692,12 @@ bool LanguageTag::isValidBcp47( const OUString& rString, OUString* o_pCanonicali
lt_tag_t* mpLangtag;
guard()
{
- theDataRef::get().incRef();
+ theDataRef::get().init();
mpLangtag = lt_tag_new();
}
~guard()
{
lt_tag_unref( mpLangtag);
- theDataRef::get().decRef();
}
} aVar;