diff options
author | Kevin Smith <git@kismith.co.uk> | 2010-10-08 10:18:20 (GMT) |
---|---|---|
committer | Kevin Smith <git@kismith.co.uk> | 2010-10-08 10:18:20 (GMT) |
commit | 874ed4f42dd29fc2b8e7b905072e6a1b9a26582c (patch) | |
tree | c19e6fe25956b1662bcd97d62f9e5bd40bc32e28 | |
parent | a793e9f8f6ee0e1ed52d3b9fbac7b236437d94f0 (diff) | |
download | swift-874ed4f42dd29fc2b8e7b905072e6a1b9a26582c.zip swift-874ed4f42dd29fc2b8e7b905072e6a1b9a26582c.tar.bz2 |
Fix for very unlikely timing-related crash when quitting during event handling
-rw-r--r-- | Swift/Controllers/MainController.cpp | 1 | ||||
-rw-r--r-- | Swift/Controllers/XMPPEvents/EventController.cpp | 5 | ||||
-rw-r--r-- | Swift/Controllers/XMPPEvents/EventController.h | 1 |
3 files changed, 7 insertions, 0 deletions
diff --git a/Swift/Controllers/MainController.cpp b/Swift/Controllers/MainController.cpp index ccefa4b..06b231c 100644 --- a/Swift/Controllers/MainController.cpp +++ b/Swift/Controllers/MainController.cpp @@ -178,6 +178,7 @@ MainController::MainController( } MainController::~MainController() { + eventController_->disconnectAll(); delete systemTrayController_; delete soundEventController_; delete xmlConsoleController_; diff --git a/Swift/Controllers/XMPPEvents/EventController.cpp b/Swift/Controllers/XMPPEvents/EventController.cpp index b14ff46..4e70978 100644 --- a/Swift/Controllers/XMPPEvents/EventController.cpp +++ b/Swift/Controllers/XMPPEvents/EventController.cpp @@ -35,4 +35,9 @@ void EventController::handleEventConcluded(boost::shared_ptr<StanzaEvent> event) onEventQueueLengthChange(events_.size()); } +void EventController::disconnectAll() { + onEventQueueLengthChange.disconnect_all_slots(); + onEventQueueEventAdded.disconnect_all_slots(); +} + } diff --git a/Swift/Controllers/XMPPEvents/EventController.h b/Swift/Controllers/XMPPEvents/EventController.h index 59bc55f..ba571df 100644 --- a/Swift/Controllers/XMPPEvents/EventController.h +++ b/Swift/Controllers/XMPPEvents/EventController.h @@ -25,6 +25,7 @@ namespace Swift { boost::signal<void (int)> onEventQueueLengthChange; boost::signal<void (boost::shared_ptr<StanzaEvent>)> onEventQueueEventAdded; const EventList& getEvents() const {return events_;} + void disconnectAll(); private: void handleEventConcluded(boost::shared_ptr<StanzaEvent> event); |