diff options
author | Remko Tronçon <git@el-tramo.be> | 2011-03-28 17:56:30 (GMT) |
---|---|---|
committer | Remko Tronçon <git@el-tramo.be> | 2011-03-28 17:56:30 (GMT) |
commit | 2848b093a1764d00ee9f2c0b92c1b50f38c62d71 (patch) | |
tree | 83df9cce1c9674dfb5628647430e6f902c65868c /Swiften/EventLoop | |
parent | 8264fcbc3c907aebbcf22c0b452c56d371173c45 (diff) | |
download | swift-contrib-2848b093a1764d00ee9f2c0b92c1b50f38c62d71.zip swift-contrib-2848b093a1764d00ee9f2c0b92c1b50f38c62d71.tar.bz2 |
Catch all exceptions in event loop.
Diffstat (limited to 'Swiften/EventLoop')
-rw-r--r-- | Swiften/EventLoop/EventLoop.cpp | 24 |
1 files changed, 12 insertions, 12 deletions
diff --git a/Swiften/EventLoop/EventLoop.cpp b/Swiften/EventLoop/EventLoop.cpp index 69d8abe..56bb6ac 100644 --- a/Swiften/EventLoop/EventLoop.cpp +++ b/Swiften/EventLoop/EventLoop.cpp @@ -12,8 +12,18 @@ #include <Swiften/Base/Log.h> + namespace Swift { +inline void invokeCallback(const Event& event) { + try { + event.callback(); + } + catch (const std::exception& e) { + std::cerr << "Uncaught exception in event loop: " << e.what() << std::endl; + } +} + EventLoop::EventLoop() : nextEventID_(0), handlingEvents_(false) { } @@ -41,24 +51,14 @@ void EventLoop::handleEvent(const Event& event) { } if (doCallback) { handlingEvents_ = true; - try { - event.callback(); - } - catch (const boost::bad_function_call&) { - SWIFT_LOG(error) << "Invalid function call" << std::endl; - } + invokeCallback(event); // Process events that were passed to handleEvent during the callback // (i.e. through recursive calls of handleEvent) while (!eventsToHandle_.empty()) { Event nextEvent = eventsToHandle_.front(); eventsToHandle_.pop_front(); - try { - nextEvent.callback(); - } - catch (const boost::bad_function_call&) { - SWIFT_LOG(error) << "Invalid function call" << std::endl; - } + invokeCallback(nextEvent); } handlingEvents_ = false; } |