summaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
-rw-r--r--include/svl/broadcast.hxx1
-rw-r--r--svl/source/notify/broadcast.cxx8
2 files changed, 7 insertions, 2 deletions
diff --git a/include/svl/broadcast.hxx b/include/svl/broadcast.hxx
index ab62d488cce6..80d9568b6392 100644
--- a/include/svl/broadcast.hxx
+++ b/include/svl/broadcast.hxx
@@ -55,6 +55,7 @@ public:
private:
ListenersType maListeners;
+ bool mbDying;
};
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.