diff options
author | Michael Meeks <michael.meeks@suse.com> | 2012-07-23 14:53:27 +0100 |
---|---|---|
committer | Petr Mladek <pmladek@suse.cz> | 2012-07-24 10:14:56 +0200 |
commit | 59205e8d8136eeb5a2648b2fb39d747ebfdb19de (patch) | |
tree | 16e9d874be74ec1d24406f3591306ad61e37b59f | |
parent | 27538d706b76717a28c001e14d27576ade842b15 (diff) |
fdo#47368 - fix one potential re-enterancy hazard around even emission
Change-Id: I8be50fb82d1333731dae825b1785e981fe69adbd
Signed-off-by: Norbert Thiebaud <nthiebaud@gmail.com>
Signed-off-by: Petr Mladek <pmladek@suse.cz>
Signed-off-by: Stephan Bergmann <sbergman@redhat.com>
-rw-r--r-- | vcl/source/app/vclevent.cxx | 9 |
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++; } } |