summaryrefslogtreecommitdiff
path: root/xmloff
diff options
context:
space:
mode:
authorNoel Grandin <noel@peralex.com>2016-08-23 13:55:35 +0200
committerNoel Grandin <noel@peralex.com>2016-08-23 13:56:19 +0200
commit49bbea41a2371bb9fb5a585a2efec61bd82a92c5 (patch)
treed6df252dbd2629780cd90415fdde26ad0f93f3e6 /xmloff
parent6489bb3db6315aabb47a4da246a201e895b2dfca (diff)
use rtl::Static for static std::ordered_set in XMLPropStyleContext
we suspect the current situation of causing a crash on shutdown after the tokenmap unit test: (gdb) bt 20 __gnu_cxx::new_allocator<std::__detail::_Hash_node_base*>::deallocate (this=0x7fffffff52c7, __p=0x78a700) at /opt/rh/devtoolset-2/root/usr/include/c++/4.8.2/ext/new_allocator.h:110 std::allocator<rtl::OUString>, std::__detail::_Identity, std::equal_to<rtl::OUString>, rtl::OUStringHash, std::__detail::_Mod_range_hashing, std::__detail::_Default_ranged_hash, std::__detail::_Prime_rehash_policy, std::__detail::_Hashtable_traits<true, true, true> >::_M_deallocate_buckets ( this=0x2aaab3166640 <XMLPropStyleContext::maParaSet>, __p=0x78a700, __n=11) at /opt/rh/devtoolset-2/root/usr/include/c++/4.8.2/bits/hashtable.h:794 std::allocator<rtl::OUString>, std::__detail::_Identity, std::equal_to<rtl::OUString>, rtl::OUStringHash, std::__detail::_Mod_range_hashing, std::__detail::_Default_ranged_hash, std::__detail::_Prime_rehash_policy, std::__detail::_Hashtable_traits<true, true, true> >::~_Hashtable ( this=0x2aaab3166640 <XMLPropStyleContext::maParaSet>, __in_chrg=<optimized out>) at /opt/rh/devtoolset-2/root/usr/include/c++/4.8.2/bits/hashtable.h:959 rtl::OUStringHash, std::equal_to<rtl::OUString>, std::allocator<rtl::OUString> >::~unordered_set ( this=0x2aaab3166640 <XMLPropStyleContext::maParaSet>, __in_chrg=<optimized out>) at /opt/rh/devtoolset-2/root/usr/include/c++/4.8.2/bits/unordered_set.h:93 rtl::OUStringHash, std::equal_to<rtl::OUString>, std::allocator<rtl::OUString> >::~unordered_set ( this=0x2aaab3166640 <XMLPropStyleContext::maParaSet>, __in_chrg=<optimized out>) at /opt/rh/devtoolset-2/root/usr/include/c++/4.8.2/debug/unordered_set:113 Change-Id: Iff36d4f217b8bb07083d2e599afade1f86206165
Diffstat (limited to 'xmloff')
-rw-r--r--xmloff/source/style/prstylei.cxx135
1 files changed, 78 insertions, 57 deletions
diff --git a/xmloff/source/style/prstylei.cxx b/xmloff/source/style/prstylei.cxx
index 9aa121bdb53b..5900230ad889 100644
--- a/xmloff/source/style/prstylei.cxx
+++ b/xmloff/source/style/prstylei.cxx
@@ -71,11 +71,80 @@ void XMLPropStyleContext::SetAttribute( sal_uInt16 nPrefixKey,
}
-//UUUU
-OldFillStyleDefinitionSet XMLPropStyleContext::maStandardSet;
-OldFillStyleDefinitionSet XMLPropStyleContext::maHeaderSet;
-OldFillStyleDefinitionSet XMLPropStyleContext::maFooterSet;
-OldFillStyleDefinitionSet XMLPropStyleContext::maParaSet;
+namespace
+{
+ struct theStandardSet :
+ public rtl::StaticWithInit<OldFillStyleDefinitionSet, theStandardSet>
+ {
+ OldFillStyleDefinitionSet operator () ()
+ {
+ OldFillStyleDefinitionSet aSet;
+ aSet.insert("BackColorRGB");
+ aSet.insert("BackTransparent");
+ aSet.insert("BackColorTransparency");
+ aSet.insert("BackGraphicURL");
+ aSet.insert("BackGraphicFilter");
+ aSet.insert("BackGraphicLocation");
+ aSet.insert("BackGraphicTransparency");
+ return aSet;
+ }
+ };
+ struct theHeaderSet :
+ public rtl::StaticWithInit<OldFillStyleDefinitionSet, theHeaderSet>
+ {
+ OldFillStyleDefinitionSet operator () ()
+ {
+ OldFillStyleDefinitionSet aSet;
+ aSet.insert("HeaderBackColorRGB");
+ aSet.insert("HeaderBackTransparent");
+ aSet.insert("HeaderBackColorTransparency");
+ aSet.insert("HeaderBackGraphicURL");
+ aSet.insert("HeaderBackGraphicFilter");
+ aSet.insert("HeaderBackGraphicLocation");
+ aSet.insert("HeaderBackGraphicTransparency");
+ return aSet;
+ }
+ };
+ struct theFooterSet :
+ public rtl::StaticWithInit<OldFillStyleDefinitionSet, theFooterSet>
+ {
+ OldFillStyleDefinitionSet operator () ()
+ {
+ OldFillStyleDefinitionSet aSet;
+ aSet.insert("FooterBackColorRGB");
+ aSet.insert("FooterBackTransparent");
+ aSet.insert("FooterBackColorTransparency");
+ aSet.insert("FooterBackGraphicURL");
+ aSet.insert("FooterBackGraphicFilter");
+ aSet.insert("FooterBackGraphicLocation");
+ aSet.insert("FooterBackGraphicTransparency");
+ return aSet;
+ }
+ };
+ struct theParaSet :
+ public rtl::StaticWithInit<OldFillStyleDefinitionSet, theParaSet>
+ {
+ OldFillStyleDefinitionSet operator () ()
+ {
+ OldFillStyleDefinitionSet aSet;
+ // Caution: here it is *not* 'ParaBackColorRGB' as it should be, but indeed
+ // 'ParaBackColor' is used, see aXMLParaPropMap definition (line 313)
+ aSet.insert("ParaBackColor");
+ aSet.insert("ParaBackTransparent");
+ aSet.insert("ParaBackGraphicLocation");
+ aSet.insert("ParaBackGraphicFilter");
+ aSet.insert("ParaBackGraphicURL");
+
+ // These are not used in aXMLParaPropMap definition, thus not needed here
+ // aSet.insert("ParaBackColorTransparency");
+ // aSet.insert("ParaBackGraphicTransparency");
+ return aSet;
+ }
+ };
+}
+
+
+
XMLPropStyleContext::XMLPropStyleContext( SvXMLImport& rImport,
sal_uInt16 nPrfx, const OUString& rLName,
@@ -95,70 +164,22 @@ XMLPropStyleContext::~XMLPropStyleContext()
const OldFillStyleDefinitionSet& XMLPropStyleContext::getStandardSet()
{
- if(maStandardSet.empty())
- {
- maStandardSet.insert("BackColorRGB");
- maStandardSet.insert("BackTransparent");
- maStandardSet.insert("BackColorTransparency");
- maStandardSet.insert("BackGraphicURL");
- maStandardSet.insert("BackGraphicFilter");
- maStandardSet.insert("BackGraphicLocation");
- maStandardSet.insert("BackGraphicTransparency");
- }
-
- return maStandardSet;
+ return theStandardSet::get();
}
const OldFillStyleDefinitionSet& XMLPropStyleContext::getHeaderSet()
{
- if(maHeaderSet.empty())
- {
- maHeaderSet.insert("HeaderBackColorRGB");
- maHeaderSet.insert("HeaderBackTransparent");
- maHeaderSet.insert("HeaderBackColorTransparency");
- maHeaderSet.insert("HeaderBackGraphicURL");
- maHeaderSet.insert("HeaderBackGraphicFilter");
- maHeaderSet.insert("HeaderBackGraphicLocation");
- maHeaderSet.insert("HeaderBackGraphicTransparency");
- }
-
- return maHeaderSet;
+ return theHeaderSet::get();
}
const OldFillStyleDefinitionSet& XMLPropStyleContext::getFooterSet()
{
- if(maFooterSet.empty())
- {
- maFooterSet.insert("FooterBackColorRGB");
- maFooterSet.insert("FooterBackTransparent");
- maFooterSet.insert("FooterBackColorTransparency");
- maFooterSet.insert("FooterBackGraphicURL");
- maFooterSet.insert("FooterBackGraphicFilter");
- maFooterSet.insert("FooterBackGraphicLocation");
- maFooterSet.insert("FooterBackGraphicTransparency");
- }
-
- return maFooterSet;
+ return theFooterSet::get();
}
const OldFillStyleDefinitionSet& XMLPropStyleContext::getParaSet()
{
- if(maParaSet.empty())
- {
- // Caution: here it is *not* 'ParaBackColorRGB' as it should be, but indeed
- // 'ParaBackColor' is used, see aXMLParaPropMap definition (line 313)
- maParaSet.insert("ParaBackColor");
- maParaSet.insert("ParaBackTransparent");
- maParaSet.insert("ParaBackGraphicLocation");
- maParaSet.insert("ParaBackGraphicFilter");
- maParaSet.insert("ParaBackGraphicURL");
-
- // These are not used in aXMLParaPropMap definition, thus not needed here
- // maParaSet.insert("ParaBackColorTransparency");
- // maParaSet.insert("ParaBackGraphicTransparency");
- }
-
- return maParaSet;
+ return theParaSet::get();
}
SvXMLImportContext *XMLPropStyleContext::CreateChildContext(