summaryrefslogtreecommitdiff
path: root/vcl
diff options
context:
space:
mode:
authorsb <sb@openoffice.org>2010-03-01 11:46:25 +0100
committersb <sb@openoffice.org>2010-03-01 11:46:25 +0100
commit2c72edc36403323b2978124e82bdd0069504be45 (patch)
tree9cc585cd1d609373a5c27d65dec50cce2c661294 /vcl
parente6694e6614a9360c98df4ee611be09b8385b48a4 (diff)
sb118: release DisplayConnection::m_aMutex before calling event handlers
Diffstat (limited to 'vcl')
-rw-r--r--vcl/source/helper/xconnection.cxx16
1 files changed, 12 insertions, 4 deletions
diff --git a/vcl/source/helper/xconnection.cxx b/vcl/source/helper/xconnection.cxx
index 19ac9103bf96..caf7ee237d67 100644
--- a/vcl/source/helper/xconnection.cxx
+++ b/vcl/source/helper/xconnection.cxx
@@ -141,12 +141,16 @@ bool DisplayConnection::dispatchEvent( void* pThis, void* pData, int nBytes )
SolarMutexReleaser aRel;
DisplayConnection* This = (DisplayConnection*)pThis;
- MutexGuard aGuard( This->m_aMutex );
Sequence< sal_Int8 > aSeq( (sal_Int8*)pData, nBytes );
Any aEvent;
aEvent <<= aSeq;
- for( ::std::list< Reference< XEventHandler > >::const_iterator it = This->m_aHandlers.begin(); it != This->m_aHandlers.end(); ++it )
+ ::std::list< Reference< XEventHandler > > handlers;
+ {
+ MutexGuard aGuard( This->m_aMutex );
+ handlers = This->m_aHandlers;
+ }
+ for( ::std::list< Reference< XEventHandler > >::const_iterator it = handlers.begin(); it != handlers.end(); ++it )
if( (*it)->handleEvent( aEvent ) )
return true;
return false;
@@ -157,12 +161,16 @@ bool DisplayConnection::dispatchErrorEvent( void* pThis, void* pData, int nBytes
SolarMutexReleaser aRel;
DisplayConnection* This = (DisplayConnection*)pThis;
- MutexGuard aGuard( This->m_aMutex );
Sequence< sal_Int8 > aSeq( (sal_Int8*)pData, nBytes );
Any aEvent;
aEvent <<= aSeq;
- for( ::std::list< Reference< XEventHandler > >::const_iterator it = This->m_aErrorHandlers.begin(); it != This->m_aErrorHandlers.end(); ++it )
+ ::std::list< Reference< XEventHandler > > handlers;
+ {
+ MutexGuard aGuard( This->m_aMutex );
+ handlers = This->m_aErrorHandlers;
+ }
+ for( ::std::list< Reference< XEventHandler > >::const_iterator it = handlers.begin(); it != handlers.end(); ++it )
if( (*it)->handleEvent( aEvent ) )
return true;