summaryrefslogtreecommitdiff
path: root/embeddedobj
diff options
context:
space:
mode:
authorMikhail Voitenko <mav@openoffice.org>2003-12-15 14:59:22 +0000
committerMikhail Voitenko <mav@openoffice.org>2003-12-15 14:59:22 +0000
commite0858f3fb60e266adc43251fc9c37b7a9c2dc0ae (patch)
treef7c1c048cc07f3e0a181d0ea70bf0f37ed3324b7 /embeddedobj
parent8ff07a4d3e236aa09b3b7de673c653849b6a0250 (diff)
#112923# object closing
Diffstat (limited to 'embeddedobj')
-rw-r--r--embeddedobj/source/msole/olecomponent.cxx9
-rw-r--r--embeddedobj/source/msole/olemisc.cxx17
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;
}
//------------------------------------------------------