summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorMichael Meeks <michael.meeks@suse.com>2012-07-23 14:53:27 +0100
committerMichael Meeks <michael.meeks@suse.com>2012-07-25 12:14:14 +0100
commit68a81bb592f269712372173abcc50483dd556d56 (patch)
tree2e00e51f9189fc883b583c3db840c1c3b00aa5f0
parent7a63ee0c8a7c7a0aec98597e4001558c4e129d29 (diff)
fdo#47368 - fix one potential re-enterancy hazard around even emission
Change-Id: I8be50fb82d1333731dae825b1785e981fe69adbd Signed-off-by: Norbert Thiebaud <nthiebaud@gmail.com>
-rw-r--r--vcl/source/app/vclevent.cxx9
1 files changed, 7 insertions, 2 deletions
diff --git a/vcl/source/app/vclevent.cxx b/vcl/source/app/vclevent.cxx
index 613a659368d4..2656c152e6ab 100644
--- a/vcl/source/app/vclevent.cxx
+++ b/vcl/source/app/vclevent.cxx
@@ -69,7 +69,10 @@ void VclEventListeners::Call( VclSimpleEvent* pEvent ) const
ImplDelData aDel( pWinEvent->GetWindow() );
while ( aIter != aCopy.end() && ! aDel.IsDead() )
{
- (*aIter).Call( pEvent );
+ Link &rLink = *aIter;
+ // check this hasn't been removed in some re-enterancy scenario fdo#47368
+ if( std::find(m_aListeners.begin(), m_aListeners.end(), rLink) != m_aListeners.end() )
+ rLink.Call( pEvent );
aIter++;
}
}
@@ -77,7 +80,9 @@ void VclEventListeners::Call( VclSimpleEvent* pEvent ) const
{
while ( aIter != aCopy.end() )
{
- (*aIter).Call( pEvent );
+ Link &rLink = *aIter;
+ if( std::find(m_aListeners.begin(), m_aListeners.end(), rLink) != m_aListeners.end() )
+ rLink.Call( pEvent );
aIter++;
}
}