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).
This commit is contained in:
ThorstenB
2011-01-20 01:06:46 +01:00
parent d14fe813a9
commit 02b3c37b9f

View File

@@ -16,6 +16,8 @@
#include <simgear/math/SGMath.hxx>
#include <simgear/structure/exception.hxx>
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() << ")");
}
}
}
}