diff options
author | Vladimir Glazounov <vg@openoffice.org> | 2003-07-25 10:37:55 +0000 |
---|---|---|
committer | Vladimir Glazounov <vg@openoffice.org> | 2003-07-25 10:37:55 +0000 |
commit | e4d3fa9c27fce9ac458618c46aa7bbfd6b0ea9a7 (patch) | |
tree | 01994f85162c4db9394d9c505611fbbb0c936619 /ucb | |
parent | 793b7fee4373f6a12d6480a1c2a696f95502db60 (diff) |
INTEGRATION: CWS abi3 (1.29.20); FILE MERGED
2003/07/10 11:53:42 abi 1.29.20.1: #110668# dispose now deletes container
Diffstat (limited to 'ucb')
-rw-r--r-- | ucb/source/ucp/file/bc.cxx | 66 |
1 files changed, 45 insertions, 21 deletions
diff --git a/ucb/source/ucp/file/bc.cxx b/ucb/source/ucp/file/bc.cxx index 7e01816e2c21..860e7e5ed885 100644 --- a/ucb/source/ucp/file/bc.cxx +++ b/ucb/source/ucp/file/bc.cxx @@ -2,9 +2,9 @@ * * $RCSfile: bc.cxx,v $ * - * $Revision: 1.29 $ + * $Revision: 1.30 $ * - * last change: $Author: abi $ $Date: 2003-05-08 09:51:01 $ + * last change: $Author: vg $ $Date: 2003-07-25 11:37:55 $ * * The Contents of this file are made available subject to the terms of * either of the following licenses @@ -208,14 +208,10 @@ BaseContent::~BaseContent( ) } m_pMyShell->m_pProvider->release(); - if( m_pDisposeEventListeners ) - delete m_pDisposeEventListeners; - if( m_pContentEventListeners ) - delete m_pContentEventListeners; - if( m_pPropertyListener ) - delete m_pPropertyListener; - if( m_pPropertySetInfoChangeListeners ) - delete m_pPropertySetInfoChangeListeners; + delete m_pDisposeEventListeners; + delete m_pContentEventListeners; + delete m_pPropertyListener; + delete m_pPropertySetInfoChangeListeners; } @@ -293,22 +289,47 @@ void SAL_CALL BaseContent::dispose() throw( RuntimeException ) { - vos::OGuard aGuard( m_aMutex ); lang::EventObject aEvt; - aEvt.Source = static_cast< XContent* >( this ); + cppu::OInterfaceContainerHelper* pDisposeEventListeners; + cppu::OInterfaceContainerHelper* pContentEventListeners; + cppu::OInterfaceContainerHelper* pPropertySetInfoChangeListeners; + PropertyListeners* pPropertyListener; + + { + vos::OGuard aGuard( m_aMutex ); + aEvt.Source = static_cast< XContent* >( this ); - if ( m_pDisposeEventListeners && m_pDisposeEventListeners->getLength() ) - m_pDisposeEventListeners->disposeAndClear( aEvt ); - if ( m_pContentEventListeners && m_pContentEventListeners->getLength() ) - m_pContentEventListeners->disposeAndClear( aEvt ); + pDisposeEventListeners = + m_pDisposeEventListeners, m_pDisposeEventListeners = 0; - if( m_pPropertyListener ) - m_pPropertyListener->disposeAndClear( aEvt ); + pContentEventListeners = + m_pContentEventListeners, m_pContentEventListeners = 0; - if( m_pPropertySetInfoChangeListeners ) - m_pPropertySetInfoChangeListeners->disposeAndClear( aEvt ); + pPropertySetInfoChangeListeners = + m_pPropertySetInfoChangeListeners, + m_pPropertySetInfoChangeListeners = 0; + pPropertyListener = + m_pPropertyListener, m_pPropertyListener = 0; + } + + if ( pDisposeEventListeners && pDisposeEventListeners->getLength() ) + pDisposeEventListeners->disposeAndClear( aEvt ); + + if ( pContentEventListeners && pContentEventListeners->getLength() ) + pContentEventListeners->disposeAndClear( aEvt ); + + if( pPropertyListener ) + pPropertyListener->disposeAndClear( aEvt ); + + if( pPropertySetInfoChangeListeners ) + pPropertySetInfoChangeListeners->disposeAndClear( aEvt ); + + delete pDisposeEventListeners; + delete pContentEventListeners; + delete pPropertyListener; + delete pPropertySetInfoChangeListeners; } @@ -531,11 +552,14 @@ BaseContent::removePropertiesChangeListener( const Sequence< rtl::OUString >& Pr const Reference< beans::XPropertiesChangeListener >& Listener ) throw( RuntimeException ) { - if( ! Listener.is() || ! m_pPropertyListener ) + if( ! Listener.is() ) return; vos::OGuard aGuard( m_aMutex ); + if( ! m_pPropertyListener ) + return; + for( sal_Int32 i = 0; i < PropertyNames.getLength(); ++i ) m_pPropertyListener->removeInterface( PropertyNames[i],Listener ); |