summaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorKevin Smith <git@kismith.co.uk>2010-10-08 10:18:20 (GMT)
committerKevin Smith <git@kismith.co.uk>2010-10-08 10:18:20 (GMT)
commit874ed4f42dd29fc2b8e7b905072e6a1b9a26582c (patch)
treec19e6fe25956b1662bcd97d62f9e5bd40bc32e28
parenta793e9f8f6ee0e1ed52d3b9fbac7b236437d94f0 (diff)
downloadswift-874ed4f42dd29fc2b8e7b905072e6a1b9a26582c.zip
swift-874ed4f42dd29fc2b8e7b905072e6a1b9a26582c.tar.bz2
Fix for very unlikely timing-related crash when quitting during event handling
-rw-r--r--Swift/Controllers/MainController.cpp1
-rw-r--r--Swift/Controllers/XMPPEvents/EventController.cpp5
-rw-r--r--Swift/Controllers/XMPPEvents/EventController.h1
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);