From c8df8ad4f5fed5a9c85498987e9b416e69fb3b44 Mon Sep 17 00:00:00 2001 From: Steve Bennett Date: Mon, 22 Jul 2013 10:29:42 +1000 Subject: Ensure that signals can break vwait The following should break when a handled signal is caught. catch -signal { vwait forever } Signed-off-by: Steve Bennett --- jim.c | 15 ++++++++++++--- 1 file changed, 12 insertions(+), 3 deletions(-) (limited to 'jim.c') diff --git a/jim.c b/jim.c index b2d5853..d8c71da 100644 --- a/jim.c +++ b/jim.c @@ -10516,8 +10516,8 @@ int Jim_EvalObj(Jim_Interp *interp, Jim_Obj *scriptObjPtr) if (retcode == JIM_OK && argc) { /* Invoke the command */ retcode = JimInvokeCommand(interp, argc, argv); - if (interp->signal_level && interp->sigmask) { - /* Check for a signal after each command */ + /* Check for a signal after each command */ + if (Jim_CheckSignal(interp)) { retcode = JIM_SIGNAL; } } @@ -13679,6 +13679,15 @@ static int Jim_ExitCoreCommand(Jim_Interp *interp, int argc, Jim_Obj *const *arg return JIM_EXIT; } +/** + * Returns 1 if a signal has been received while + * in a catch -signal {} clause. + */ +int Jim_CheckSignal(Jim_Interp *interp) +{ + return interp->signal_level && interp->sigmask; +} + /* [catch] */ static int Jim_CatchCoreCommand(Jim_Interp *interp, int argc, Jim_Obj *const *argv) { @@ -13750,7 +13759,7 @@ static int Jim_CatchCoreCommand(Jim_Interp *interp, int argc, Jim_Obj *const *ar } interp->signal_level += sig; - if (interp->signal_level && interp->sigmask) { + if (Jim_CheckSignal(interp)) { /* If a signal is set, don't even try to execute the body */ exitCode = JIM_SIGNAL; } -- cgit v1.1