From 28119b1d894ee1529af352272cf63a95c7c61df9 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Fredrik=20H=C3=BCbinette=20=28Hubbe=29?= <hubbe@hubbe.net> Date: Sun, 9 Jun 1996 16:46:27 +0200 Subject: [PATCH] recursive signal calling now fixed Rev: src/lpc_signal.c:1.10 --- src/lpc_signal.c | 27 ++++++++++++++++++++++++++- 1 file changed, 26 insertions(+), 1 deletion(-) diff --git a/src/lpc_signal.c b/src/lpc_signal.c index b149afe867..cc9108068a 100644 --- a/src/lpc_signal.c +++ b/src/lpc_signal.c @@ -230,14 +230,16 @@ static RETSIGTYPE receive_signal(int signum) void check_signals() { + static int signalling=0; #ifdef DEBUG extern int d_flag; if(d_flag>5) do_debug(0); #endif - if(firstsig != lastsig) + if(firstsig != lastsig && !signalling) { int tmp=firstsig; + signalling=1; while(lastsig != tmp) { @@ -247,6 +249,8 @@ void check_signals() apply_svalue(signal_callbacks + sigbuf[lastsig], 1); pop_stack(); } + + signalling=0; } } @@ -389,6 +393,24 @@ static void f_alarm(INT32 args) push_int(alarm(seconds)); } +#ifdef HAVE_UALARM +static void f_ualarm(INT32 args) +{ + long seconds; + + if(args < 1) + error("Too few arguments to signame()\n"); + + if(sp[-args].type != T_INT) + error("Bad argument 1 to signame()\n"); + + seconds=sp[-args].u.integer; + + pop_n_elems(args); + push_int(ualarm(seconds)); +} +#endif + void init_signals() { int e; @@ -407,6 +429,9 @@ void init_signals() add_efun("signum",f_signum,"function(string:int)",0); add_efun("getpid",f_getpid,"function(:int)",0); add_efun("alarm",f_alarm,"function(int:int)",OPT_SIDE_EFFECT); +#ifdef HAVE_UALARM + add_efun("ualarm",f_ualarm,"function(int:int)",OPT_SIDE_EFFECT); +#endif } void exit_signals() -- GitLab