diff options
Diffstat (limited to 'svl/source')
-rw-r--r-- | svl/source/notify/broadcast.cxx | 8 |
1 files changed, 6 insertions, 2 deletions
diff --git a/svl/source/notify/broadcast.cxx b/svl/source/notify/broadcast.cxx index 79c17578e25d..7e59e36e2ec7 100644 --- a/svl/source/notify/broadcast.cxx +++ b/svl/source/notify/broadcast.cxx @@ -69,21 +69,25 @@ void SvtBroadcaster::Add( SvtListener* p ) void SvtBroadcaster::Remove( SvtListener* p ) { + if (mbDying) + return; + maListeners.erase(p); if (maListeners.empty()) ListenersGone(); } -SvtBroadcaster::SvtBroadcaster() {} +SvtBroadcaster::SvtBroadcaster() : mbDying(false) {} SvtBroadcaster::SvtBroadcaster( const SvtBroadcaster &rBC ) : - maListeners(rBC.maListeners) + maListeners(rBC.maListeners), mbDying(false) { std::for_each(maListeners.begin(), maListeners.end(), StartListeningHandler(*this)); } SvtBroadcaster::~SvtBroadcaster() { + mbDying = true; Broadcast( SfxSimpleHint(SFX_HINT_DYING) ); // unregister all listeners. |