diff options
author | Mikhail Voitenko <mav@openoffice.org> | 2003-12-15 14:59:22 +0000 |
---|---|---|
committer | Mikhail Voitenko <mav@openoffice.org> | 2003-12-15 14:59:22 +0000 |
commit | e0858f3fb60e266adc43251fc9c37b7a9c2dc0ae (patch) | |
tree | f7c1c048cc07f3e0a181d0ea70bf0f37ed3324b7 /embeddedobj | |
parent | 8ff07a4d3e236aa09b3b7de673c653849b6a0250 (diff) |
#112923# object closing
Diffstat (limited to 'embeddedobj')
-rw-r--r-- | embeddedobj/source/msole/olecomponent.cxx | 9 | ||||
-rw-r--r-- | embeddedobj/source/msole/olemisc.cxx | 17 |
2 files changed, 19 insertions, 7 deletions
diff --git a/embeddedobj/source/msole/olecomponent.cxx b/embeddedobj/source/msole/olecomponent.cxx index d9dc39f0f5b5..a14a23b65921 100644 --- a/embeddedobj/source/msole/olecomponent.cxx +++ b/embeddedobj/source/msole/olecomponent.cxx @@ -2,9 +2,9 @@ * * $RCSfile: olecomponent.cxx,v $ * - * $Revision: 1.16 $ + * $Revision: 1.17 $ * - * last change: $Author: mav $ $Date: 2003-12-15 15:37:42 $ + * last change: $Author: mav $ $Date: 2003-12-15 15:59:21 $ * * The Contents of this file are made available subject to the terms of * either of the following licenses @@ -518,6 +518,7 @@ OleComponent::~OleComponent() if ( m_pOleWrapClientSite || m_pImplAdviseSink || m_pInterfaceContainer || m_bOleInitialized ) { + ::osl::MutexGuard aGuard( m_aMutex ); m_refCount++; try { Dispose(); @@ -558,6 +559,10 @@ FORMATETC* OleComponentNative_Impl::GetSupportedFormatForAspect( sal_uInt32 nReq //---------------------------------------------- void OleComponent::Dispose() { + // the mutex must be locked before this method is called + if ( m_bDisposed ) + return; + CloseObject(); if ( m_pOleWrapClientSite ) diff --git a/embeddedobj/source/msole/olemisc.cxx b/embeddedobj/source/msole/olemisc.cxx index fcc34e1d6378..3550097ba45a 100644 --- a/embeddedobj/source/msole/olemisc.cxx +++ b/embeddedobj/source/msole/olemisc.cxx @@ -2,9 +2,9 @@ * * $RCSfile: olemisc.cxx,v $ * - * $Revision: 1.10 $ + * $Revision: 1.11 $ * - * last change: $Author: mav $ $Date: 2003-12-15 15:37:43 $ + * last change: $Author: mav $ $Date: 2003-12-15 15:59:22 $ * * The Contents of this file are made available subject to the terms of * either of the following licenses @@ -175,10 +175,15 @@ void OleEmbeddedObject::Dispose() m_pInterfaceContainer = NULL; } - m_bDisposed = true; - if ( m_pOleComponent ) - GetRidOfComponent(); + try { + GetRidOfComponent(); + } catch( uno::Exception& ) + { + m_bDisposed = true; + throw; // TODO: there should be a special listener that will close object when + // component is finally closed + } if ( m_xObjectStream.is() ) { @@ -195,6 +200,8 @@ void OleEmbeddedObject::Dispose() } m_xParentStorage = uno::Reference< embed::XStorage >(); + + m_bDisposed = true; } //------------------------------------------------------ |