From 1926cd59f5791d3dce771ec8cd5a026e482b2ba7 Mon Sep 17 00:00:00 2001 From: Steve Bennett Date: Wed, 12 Oct 2016 10:12:50 +1000 Subject: signal: restore default signal handling If the interpreter or signal command is deleted, restore default signal handling and free allocated memory. Signed-off-by: Steve Bennett --- jim-signal.c | 21 ++++++++++++++++++++- 1 file changed, 20 insertions(+), 1 deletion(-) (limited to 'jim-signal.c') diff --git a/jim-signal.c b/jim-signal.c index 6785240..483d021 100644 --- a/jim-signal.c +++ b/jim-signal.c @@ -404,6 +404,25 @@ static const jim_subcmd_type signal_command_table[] = { { NULL } }; +/** + * Restore default signal handling. + */ +static void JimSignalCmdDelete(Jim_Interp *interp, void *privData) +{ + int i; + if (sa_old) { + for (i = 1; i < MAX_SIGNALS; i++) { + if (siginfo[i].status != SIGNAL_ACTION_DEFAULT) { + sigaction(i, &sa_old[i], 0); + siginfo[i].status = SIGNAL_ACTION_DEFAULT; + } + } + } + Jim_Free(sa_old); + sa_old = NULL; + sigloc = NULL; +} + static int Jim_AlarmCmd(Jim_Interp *interp, int argc, Jim_Obj *const *argv) { int ret; @@ -525,7 +544,7 @@ int Jim_signalInit(Jim_Interp *interp) /* Make sure we know where to store the signals which occur */ sigloc = &interp->sigmask; - Jim_CreateCommand(interp, "signal", Jim_SubCmdProc, (void *)signal_command_table, NULL); + Jim_CreateCommand(interp, "signal", Jim_SubCmdProc, (void *)signal_command_table, JimSignalCmdDelete); } return JIM_OK; -- cgit v1.1