summaryrefslogtreecommitdiff
path: root/chart2/source/tools/WrappedPropertySet.cxx
diff options
context:
space:
mode:
authorJan Holesovsky <kendy@suse.cz>2011-03-18 15:33:40 +0100
committerJan Holesovsky <kendy@suse.cz>2011-03-18 15:33:40 +0100
commite6064484fae8aa2797f86c68e9a8d23d2e213367 (patch)
treedb2f4d140efca43ab01dee4fc053fff0829d106b /chart2/source/tools/WrappedPropertySet.cxx
parent9e0a09e89c38774dd1af902387a8b25de158b634 (diff)
parent378c75a798c8baa34cb26e7f07fe28cb5ee2a85f (diff)
Merge remote-tracking branch 'origin/integration/dev300_m101'
Conflicts: chart2/source/controller/main/UndoManager.cxx chart2/source/tools/RegressionCurveHelper.cxx sc/inc/address.hxx sc/inc/attrib.hxx sc/inc/bigrange.hxx sc/inc/callform.hxx sc/inc/cell.hxx sc/inc/chartarr.hxx sc/inc/chartlis.hxx sc/inc/chgtrack.hxx sc/inc/collect.hxx sc/inc/compiler.hxx sc/inc/detdata.hxx sc/inc/document.hxx sc/inc/fillinfo.hxx sc/inc/olinetab.hxx sc/inc/prnsave.hxx sc/inc/queryparam.hxx sc/inc/sc.hrc sc/inc/scabstdlg.hxx sc/inc/table.hxx sc/inc/validat.hxx sc/inc/zforauto.hxx sc/source/core/data/documen2.cxx sc/source/core/data/document.cxx sc/source/core/data/table1.cxx sc/source/core/tool/address.cxx sc/source/core/tool/token.cxx sc/source/filter/excel/frmbase.cxx sc/source/filter/excel/impop.cxx sc/source/filter/excel/xename.cxx sc/source/filter/inc/formel.hxx sc/source/filter/inc/xename.hxx sc/source/filter/xml/xmlexprt.cxx sc/source/filter/xml/xmlnexpi.cxx sc/source/filter/xml/xmlnexpi.hxx sc/source/ui/dbgui/filtdlg.cxx sc/source/ui/inc/docfunc.hxx sc/source/ui/inc/namedlg.hxx sc/source/ui/namedlg/namedlg.cxx sc/source/ui/src/namedlg.src
Diffstat (limited to 'chart2/source/tools/WrappedPropertySet.cxx')
-rwxr-xr-x[-rw-r--r--]chart2/source/tools/WrappedPropertySet.cxx56
1 files changed, 40 insertions, 16 deletions
diff --git a/chart2/source/tools/WrappedPropertySet.cxx b/chart2/source/tools/WrappedPropertySet.cxx
index f57e9e72714c..d594686f15b8 100644..100755
--- a/chart2/source/tools/WrappedPropertySet.cxx
+++ b/chart2/source/tools/WrappedPropertySet.cxx
@@ -67,7 +67,7 @@ Reference< beans::XPropertyState > WrappedPropertySet::getInnerPropertyState()
void WrappedPropertySet::clearWrappedPropertySet()
{
- ::osl::MutexGuard aGuard( m_aMutex );
+ ::osl::MutexGuard aGuard( ::osl::Mutex::getGlobalMutex() );//do not use different mutex than is already used for static property sequence
//delete all wrapped properties
if(m_pWrappedPropertyMap)
@@ -90,14 +90,22 @@ void WrappedPropertySet::clearWrappedPropertySet()
Reference< beans::XPropertySetInfo > SAL_CALL WrappedPropertySet::getPropertySetInfo( )
throw (uno::RuntimeException)
{
- if( !m_xInfo.is() )
+ Reference< beans::XPropertySetInfo > xInfo = m_xInfo;
+ if( !xInfo.is() )
{
- ::osl::MutexGuard aGuard( m_aMutex );
- if( !m_xInfo.is() )
+ ::osl::MutexGuard aGuard( ::osl::Mutex::getGlobalMutex() );//do not use different mutex than is already used for static property sequence
+ xInfo = m_xInfo;
+ if( !xInfo.is() )
{
- m_xInfo = ::cppu::OPropertySetHelper::createPropertySetInfo( getInfoHelper() );
+ xInfo = ::cppu::OPropertySetHelper::createPropertySetInfo( getInfoHelper() );
+ OSL_DOUBLE_CHECKED_LOCKING_MEMORY_BARRIER();
+ m_xInfo = xInfo;
}
}
+ else
+ {
+ OSL_DOUBLE_CHECKED_LOCKING_MEMORY_BARRIER();
+ }
return m_xInfo;
}
@@ -433,15 +441,22 @@ Sequence< Any > SAL_CALL WrappedPropertySet::getPropertyDefaults( const Sequence
::cppu::IPropertyArrayHelper& WrappedPropertySet::getInfoHelper()
{
- if(!m_pPropertyArrayHelper)
+ ::cppu::OPropertyArrayHelper* p = m_pPropertyArrayHelper;
+ if(!p)
{
- ::osl::MutexGuard aGuard( m_aMutex );
- if(!m_pPropertyArrayHelper)
+ ::osl::MutexGuard aGuard( ::osl::Mutex::getGlobalMutex() );//do not use different mutex than is already used for static property sequence
+ p = m_pPropertyArrayHelper;
+ if(!p)
{
- sal_Bool bSorted = sal_True;
- m_pPropertyArrayHelper = new ::cppu::OPropertyArrayHelper( getPropertySequence(), bSorted );
+ p = new ::cppu::OPropertyArrayHelper( getPropertySequence(), sal_True );
+ OSL_DOUBLE_CHECKED_LOCKING_MEMORY_BARRIER();
+ m_pPropertyArrayHelper = p;
}
}
+ else
+ {
+ OSL_DOUBLE_CHECKED_LOCKING_MEMORY_BARRIER();
+ }
return *m_pPropertyArrayHelper;
}
@@ -449,13 +464,15 @@ Sequence< Any > SAL_CALL WrappedPropertySet::getPropertyDefaults( const Sequence
tWrappedPropertyMap& WrappedPropertySet::getWrappedPropertyMap()
{
- if(!m_pWrappedPropertyMap)
+ tWrappedPropertyMap* p = m_pWrappedPropertyMap;
+ if(!p)
{
- ::osl::MutexGuard aGuard( m_aMutex );
- if(!m_pWrappedPropertyMap)
+ ::osl::MutexGuard aGuard( ::osl::Mutex::getGlobalMutex() );//do not use different mutex than is already used for static property sequence
+ p = m_pWrappedPropertyMap;
+ if(!p)
{
std::vector< WrappedProperty* > aPropList( createWrappedProperties() );
- m_pWrappedPropertyMap = new tWrappedPropertyMap();
+ p = new tWrappedPropertyMap();
for( std::vector< WrappedProperty* >::const_iterator aIt = aPropList.begin(); aIt!=aPropList.end(); ++aIt )
{
@@ -469,18 +486,25 @@ tWrappedPropertyMap& WrappedPropertySet::getWrappedPropertyMap()
OSL_FAIL( "missing property in property list" );
delete pProperty;//we are owner or the created WrappedProperties
}
- else if( m_pWrappedPropertyMap->find( nHandle ) != m_pWrappedPropertyMap->end() )
+ else if( p->find( nHandle ) != p->end() )
{
//duplicate Wrapped property
OSL_FAIL( "duplicate Wrapped property" );
delete pProperty;//we are owner or the created WrappedProperties
}
else
- (*m_pWrappedPropertyMap)[ nHandle ] = pProperty;
+ (*p)[ nHandle ] = pProperty;
}
}
+
+ OSL_DOUBLE_CHECKED_LOCKING_MEMORY_BARRIER();
+ m_pWrappedPropertyMap = p;
}
}
+ else
+ {
+ OSL_DOUBLE_CHECKED_LOCKING_MEMORY_BARRIER();
+ }
return *m_pWrappedPropertyMap;
}