From: <cli...@li...> - 2010-04-14 12:08:08
|
Send clisp-cvs mailing list submissions to cli...@li... To subscribe or unsubscribe via the World Wide Web, visit https://lists.sourceforge.net/lists/listinfo/clisp-cvs or, via email, send a message with subject or body 'help' to cli...@li... You can reach the person managing the list at cli...@li... When replying, please edit your Subject line so it is more specific than "Re: Contents of clisp-cvs digest..." CLISP CVS commits for today Today's Topics: 1. clisp/src ChangeLog,1.7305,1.7306 spvw.d,1.528,1.529 (Vladimir Tzankov) ---------------------------------------------------------------------- Message: 1 Date: Tue, 13 Apr 2010 16:22:34 +0000 From: Vladimir Tzankov <vt...@us...> Subject: clisp/src ChangeLog,1.7305,1.7306 spvw.d,1.528,1.529 To: cli...@li... Message-ID: <E1O...@sf...> Update of /cvsroot/clisp/clisp/src In directory sfp-cvsdas-2.v30.ch3.sourceforge.com:/tmp/cvs-serv25953/src Modified Files: ChangeLog spvw.d Log Message: [MULTITHREAD]: handle terminating signals only once Index: spvw.d =================================================================== RCS file: /cvsroot/clisp/clisp/src/spvw.d,v retrieving revision 1.528 retrieving revision 1.529 diff -u -d -r1.528 -r1.529 --- spvw.d 12 Apr 2010 20:23:22 -0000 1.528 +++ spvw.d 13 Apr 2010 16:22:32 -0000 1.529 @@ -4269,13 +4269,39 @@ /* SIGUSR2 WILL BE used for CALL-WITH-TIMEOUT */ #define SIG_TIMEOUT_CALL SIGUSR2 +/* UP: adds to sigset_t mask all terminating signals we handle + > mask: sigset_t mask to add to */ +local void fill_terminating_signals_mask(sigset_t *mask) +{ +#ifdef SIGHUP + sigaddset(mask,SIGHUP); +#endif +#ifdef SIGQUIT + sigaddset(mask,SIGQUIT); +#endif +#ifdef SIGILL + sigaddset(mask,SIGILL); +#endif +#ifdef SIGABRT + sigaddset(mask,SIGABRT); +#endif +#ifdef SIGKILL + sigaddset(mask,SIGKILL); +#endif +#ifdef SIGTERM + sigaddset(mask,SIGTERM); +#endif +#ifdef SIGTTOU + /* always ignored */ + sigaddset(mask,SIGTTOU); +#endif +} + /* UP: creates mask of signals that we do not want to be delivered directly to threads. The same signals are handled by special non lisp thread */ local sigset_t async_signal_mask() { - /* TODO: SIGCLD needs special handling - it's possible - to leave some zombie probably. */ var sigset_t sigblock_mask; sigemptyset(&sigblock_mask); sigaddset(&sigblock_mask,SIGINT); @@ -4284,31 +4310,17 @@ #if defined(SIGWINCH) sigaddset(&sigblock_mask,SIGWINCH); #endif - /* following are terminating signals - handle them only if we are not - already being killed*/ if (!quit_on_signal_in_progress) { - #ifdef SIGHUP - sigaddset(&sigblock_mask,SIGHUP); - #endif - #ifdef SIGQUIT - sigaddset(&sigblock_mask,SIGQUIT); - #endif - #ifdef SIGILL - sigaddset(&sigblock_mask,SIGILL); - #endif - #ifdef SIGABRT - sigaddset(&sigblock_mask,SIGABRT); - #endif - #ifdef SIGKILL - sigaddset(&sigblock_mask,SIGKILL); - #endif - #ifdef SIGTERM - sigaddset(&sigblock_mask,SIGTERM); - #endif - #ifdef SIGTTOU - /* always ignored */ - sigaddset(&sigblock_mask,SIGTTOU); - #endif + /* add terminating signals */ + fill_terminating_signals_mask(&sigblock_mask); + } else { + /* till now terminating signals were blocked so we can retrieve + them synchronously via sigwait(). Now after we got one - unblock + them so on next such the process will be terminated immediately. */ + var sigset_t term_mask; + sigemptyset(&term_mask); + fill_terminating_signals_mask(&term_mask); + sigprocmask(SIG_UNBLOCK,&term_mask,NULL); } return sigblock_mask; } @@ -4317,12 +4329,16 @@ < returns signal number */ local int signal_wait() { - var int sig; + var int sig = 0; /* initialize it with invalid value */ var sigset_t sig_mask=async_signal_mask(); - while (sigwait(&sig_mask, &sig)) { - /* strange - no way to have bad mask but it happens sometimes - (observed on 32 bit debian during (disaseemble 'car) and - CTRL-Z and "fg" later) */ + while (sigwait(&sig_mask, &sig) || + !sigismember(&sig_mask,sig)) { + /* Strange - no way to have bad mask but it happens sometimes + (observed on 32 bit debian during (disassemble 'car) and + CTRL-Z and "fg" later). + Also on osx was observed success from sigwait() without setting any + value in &sig. + Ignore both cases (sigwait() failure and signal not in the waited set)*/ } return sig; } @@ -4660,13 +4676,6 @@ case SIGTTOU: break; /* just ignore it */ #endif - #ifdef UNIX_MACOSX - /* TODO: vfork()-ed processes cause SIGHUP/SIGCONT on OSX. - currently - ignore them - but it's TODO item. .*/ - case SIGHUP: - case SIGCONT: - break; - #endif default: /* just terminate all threads - the last one will kill the process from delete_thread */ Index: ChangeLog =================================================================== RCS file: /cvsroot/clisp/clisp/src/ChangeLog,v retrieving revision 1.7305 retrieving revision 1.7306 diff -u -d -r1.7305 -r1.7306 --- ChangeLog 13 Apr 2010 03:25:14 -0000 1.7305 +++ ChangeLog 13 Apr 2010 16:22:31 -0000 1.7306 @@ -1,11 +1,20 @@ +2010-04-13 Vladimir Tzankov <vtz...@gm...> + + * spvw.d (fill_terminating_signals_mask): add terminating signals to + sigset_t mask + (async_signal_mask): unblock terminating signals if the process is + exiting due to such signal + (signal_wait): ignore signals not set in the mask passed to sigwait() + (signal_handler_thread) [UNIX_MACOSX]: do not ignore SIGHUP + 2010-04-13 Arseny Slobodyuk <am...@us...> Fix for a bug#1481218 with default drive directory: within CLISP default_directory_of() is used to fill missed pathname directory component in pathnames like C:lisp.exe. - This functionality now added to real_path as well to + This functionality now added to real_path as well to support lisp invocation like 'C:\>e:lisp.exe -M e:lispinit.mem'. - * w32shell.c (real_path): detect and handle default drive + * w32shell.c (real_path): detect and handle default drive directory references. Optimization: less use of strlen. 2010-04-12 Vladimir Tzankov <vtz...@gm...> ------------------------------ ------------------------------------------------------------------------------ Download Intel® Parallel Studio Eval Try the new software tools for yourself. Speed compiling, find bugs proactively, and fine-tune applications for parallel performance. See why Intel Parallel Studio got high marks during beta. http://p.sf.net/sfu/intel-sw-dev ------------------------------ _______________________________________________ clisp-cvs mailing list cli...@li... https://lists.sourceforge.net/lists/listinfo/clisp-cvs End of clisp-cvs Digest, Vol 48, Issue 6 **************************************** |