From 840780dc4acf8afd08f648b1e3d83c2294bb081b Mon Sep 17 00:00:00 2001 From: ThorstenB Date: Thu, 20 Jan 2011 01:06:46 +0100 Subject: [PATCH] Another place to catch SG exceptions. SGBinding::fire needs to catch, otherwise exceptions in the event handler context cause an FG exit (fixes a crash with the route manager dialog). --- simgear/structure/SGBinding.cxx | 16 +++++++++++++--- 1 file changed, 13 insertions(+), 3 deletions(-) diff --git a/simgear/structure/SGBinding.cxx b/simgear/structure/SGBinding.cxx index 9e5fce06..836d7abc 100644 --- a/simgear/structure/SGBinding.cxx +++ b/simgear/structure/SGBinding.cxx @@ -16,6 +16,8 @@ #include +#include + SGBinding::SGBinding() : _command(0), _arg(new SGPropertyNode), @@ -62,9 +64,17 @@ SGBinding::fire () const _command = SGCommandMgr::instance()->getCommand(_command_name); if (_command == 0) { SG_LOG(SG_INPUT, SG_WARN, "No command attached to binding"); - } else if (!(*_command)(_arg)) { - SG_LOG(SG_INPUT, SG_ALERT, "Failed to execute command " - << _command_name); + } else + { + try { + if (!(*_command)(_arg)) { + SG_LOG(SG_INPUT, SG_ALERT, "Failed to execute command " + << _command_name); + } + } catch (sg_exception& e) { + SG_LOG(SG_GENERAL, SG_ALERT, "command '" << _command_name << "' failed with exception\n" + << "\tmessage:" << e.getMessage() << " (from " << e.getOrigin() << ")"); + } } } } -- 2.39.5