]> granicus.if.org Git - icinga2/commitdiff
Catch exceptions in EventQueue::QueueThreadProc.
authorGunnar Beutner <gunnar.beutner@netways.de>
Fri, 8 Mar 2013 13:43:07 +0000 (14:43 +0100)
committerGunnar Beutner <gunnar.beutner@netways.de>
Fri, 8 Mar 2013 13:43:07 +0000 (14:43 +0100)
lib/base/eventqueue.cpp

index 921310e0317827fb5e3775e4a3a40c2b17028a78..ba58ad001a2fd1f6d3cb93f855c940b8b77339c4 100644 (file)
@@ -103,7 +103,17 @@ void EventQueue::QueueThreadProc(void)
 #      endif /* RUSAGE_THREAD */
 #endif /* _DEBUG */
 
-                       ev();
+                       try {
+                               ev();
+                       } catch (const std::exception& ex) {
+                               stringstream msgbuf;
+                               msgbuf << "Exception thrown in event handler: " << std::endl
+                                      << diagnostic_information(ex);
+
+                               Logger::Write(LogCritical, "base", msgbuf.str());
+                       } catch (...) {
+                               Logger::Write(LogCritical, "base", "Exception of unknown type thrown in event handler.");
+                       }
 
 #ifdef _DEBUG
                        double et = Utility::GetTime();