handle SIGPIPE and improve USR1 and USR2
git-svn-id: https://yap.svn.sf.net/svnroot/yap/trunk@2242 b08c6af1-5177-4d33-ba66-4b1c6b8b522a
This commit is contained in:
parent
a70fb91592
commit
7c24afa0f2
20
C/sysbits.c
20
C/sysbits.c
@ -1492,19 +1492,25 @@ ReceiveSignal (int s)
|
|||||||
case SIGKILL:
|
case SIGKILL:
|
||||||
Yap_Error(INTERRUPT_ERROR,MkIntTerm(s),NULL);
|
Yap_Error(INTERRUPT_ERROR,MkIntTerm(s),NULL);
|
||||||
#endif
|
#endif
|
||||||
#if defined(SIGUSR1)
|
#ifdef SIGUSR1
|
||||||
case SIGUSR1:
|
case SIGUSR1:
|
||||||
/* force the system to creep */
|
/* force the system to creep */
|
||||||
Yap_signal (YAP_USR1_SIGNAL);
|
Yap_signal (YAP_USR1_SIGNAL);
|
||||||
break;
|
break;
|
||||||
#endif /* defined(SIGUSR1) */
|
#endif /* defined(SIGUSR1) */
|
||||||
#if defined(SIGUSR2)
|
#ifdef SIGUSR2
|
||||||
case SIGUSR2:
|
case SIGUSR2:
|
||||||
/* force the system to creep */
|
/* force the system to creep */
|
||||||
Yap_signal (YAP_USR2_SIGNAL);
|
Yap_signal (YAP_USR2_SIGNAL);
|
||||||
break;
|
break;
|
||||||
#endif /* defined(SIGUSR2) */
|
#endif /* defined(SIGUSR2) */
|
||||||
#if defined(SIGHUP)
|
#ifdef SIGPIPE
|
||||||
|
case SIGPIPE:
|
||||||
|
/* force the system to creep */
|
||||||
|
Yap_signal (YAP_PIPE_SIGNAL);
|
||||||
|
break;
|
||||||
|
#endif /* defined(SIGPIPE) */
|
||||||
|
#ifdef SIGHUP
|
||||||
case SIGHUP:
|
case SIGHUP:
|
||||||
/* force the system to creep */
|
/* force the system to creep */
|
||||||
Yap_signal (YAP_HUP_SIGNAL);
|
Yap_signal (YAP_HUP_SIGNAL);
|
||||||
@ -1545,6 +1551,9 @@ InitSignals (void)
|
|||||||
my_signal (SIGHUP, ReceiveSignal);
|
my_signal (SIGHUP, ReceiveSignal);
|
||||||
my_signal (SIGALRM, HandleALRM);
|
my_signal (SIGALRM, HandleALRM);
|
||||||
#endif
|
#endif
|
||||||
|
#ifdef SIGPIPE
|
||||||
|
my_signal (SIGPIPE, ReceiveSignal);
|
||||||
|
#endif
|
||||||
#if _MSC_VER || defined(__MINGW32__)
|
#if _MSC_VER || defined(__MINGW32__)
|
||||||
signal (SIGINT, SIG_IGN);
|
signal (SIGINT, SIG_IGN);
|
||||||
SetConsoleCtrlHandler(MSCHandleSignal,TRUE);
|
SetConsoleCtrlHandler(MSCHandleSignal,TRUE);
|
||||||
@ -2543,6 +2552,11 @@ p_first_signal(void)
|
|||||||
UNLOCK(SignalLock);
|
UNLOCK(SignalLock);
|
||||||
return Yap_unify(ARG1, MkAtomTerm(Yap_LookupAtom("sig_usr1")));
|
return Yap_unify(ARG1, MkAtomTerm(Yap_LookupAtom("sig_usr1")));
|
||||||
}
|
}
|
||||||
|
if (ActiveSignals & YAP_PIPE_SIGNAL) {
|
||||||
|
ActiveSignals &= ~YAP_PIPE_SIGNAL;
|
||||||
|
UNLOCK(SignalLock);
|
||||||
|
return Yap_unify(ARG1, MkAtomTerm(Yap_LookupAtom("sig_pipe")));
|
||||||
|
}
|
||||||
if (ActiveSignals & YAP_HUP_SIGNAL) {
|
if (ActiveSignals & YAP_HUP_SIGNAL) {
|
||||||
ActiveSignals &= ~YAP_HUP_SIGNAL;
|
ActiveSignals &= ~YAP_HUP_SIGNAL;
|
||||||
UNLOCK(SignalLock);
|
UNLOCK(SignalLock);
|
||||||
|
5
H/Yap.h
5
H/Yap.h
@ -10,7 +10,7 @@
|
|||||||
* File: Yap.h.m4 *
|
* File: Yap.h.m4 *
|
||||||
* mods: *
|
* mods: *
|
||||||
* comments: main header file for YAP *
|
* comments: main header file for YAP *
|
||||||
* version: $Id: Yap.h,v 1.36 2008-05-15 13:41:46 vsc Exp $ *
|
* version: $Id: Yap.h,v 1.37 2008-05-23 10:02:13 vsc Exp $ *
|
||||||
*************************************************************************/
|
*************************************************************************/
|
||||||
|
|
||||||
#include "config.h"
|
#include "config.h"
|
||||||
@ -573,7 +573,8 @@ typedef enum
|
|||||||
YAP_STACK_DUMP_SIGNAL = 0x4000, /* received stack dump signal */
|
YAP_STACK_DUMP_SIGNAL = 0x4000, /* received stack dump signal */
|
||||||
YAP_STATISTICS_SIGNAL = 0x8000, /* received statistics */
|
YAP_STATISTICS_SIGNAL = 0x8000, /* received statistics */
|
||||||
YAP_DELAY_CREEP_SIGNAL = 0x10000, /* received a creep but should not do it */
|
YAP_DELAY_CREEP_SIGNAL = 0x10000, /* received a creep but should not do it */
|
||||||
YAP_AGC_SIGNAL = 0x20000 /* call atom garbage collector asap */
|
YAP_AGC_SIGNAL = 0x20000, /* call atom garbage collector asap */
|
||||||
|
YAP_PIPE_SIGNAL = 0x40000 /* call atom garbage collector asap */
|
||||||
} yap_signals;
|
} yap_signals;
|
||||||
|
|
||||||
#define NUMBER_OF_YAP_FLAGS LAST_FLAG
|
#define NUMBER_OF_YAP_FLAGS LAST_FLAG
|
||||||
|
@ -17,6 +17,8 @@ xb
|
|||||||
|
|
||||||
<h2>Yap-5.1.3:</h2>
|
<h2>Yap-5.1.3:</h2>
|
||||||
<ul>
|
<ul>
|
||||||
|
<li> FIXED: handle SIGPIPE and improve USR1 and USR2 (obs from Nicos
|
||||||
|
Angelopoulos).</li>
|
||||||
<li> NEW: tmp_file/2 (request from Nicos Angelopoulos).</li>
|
<li> NEW: tmp_file/2 (request from Nicos Angelopoulos).</li>
|
||||||
<li> FIXED: too much pruning on predicate_property/2 (obs from Nicos
|
<li> FIXED: too much pruning on predicate_property/2 (obs from Nicos
|
||||||
Angelopoulos).</li>
|
Angelopoulos).</li>
|
||||||
|
@ -11,7 +11,7 @@
|
|||||||
* File: utilities for displaying messages in YAP. *
|
* File: utilities for displaying messages in YAP. *
|
||||||
* comments: error messages for YAP *
|
* comments: error messages for YAP *
|
||||||
* *
|
* *
|
||||||
* Last rev: $Date: 2008-05-15 13:41:47 $,$Author: vsc $ *
|
* Last rev: $Date: 2008-05-23 10:02:13 $,$Author: vsc $ *
|
||||||
* *
|
* *
|
||||||
* *
|
* *
|
||||||
*************************************************************************/
|
*************************************************************************/
|
||||||
@ -243,6 +243,8 @@ system_message(error(resource_error(threads), Where)) -->
|
|||||||
[ 'RESOURCE ERROR- too many open threads' - [Where] ].
|
[ 'RESOURCE ERROR- too many open threads' - [Where] ].
|
||||||
system_message(error(resource_error(memory), Where)) -->
|
system_message(error(resource_error(memory), Where)) -->
|
||||||
[ 'RESOURCE ERROR- not enough virtual memory' - [Where] ].
|
[ 'RESOURCE ERROR- not enough virtual memory' - [Where] ].
|
||||||
|
system_message(error(signal(SIG,_), _)) -->
|
||||||
|
[ 'UNEXPECTED SIGNAL: ~a' [SIG] ].
|
||||||
system_message(error(syntax_error(G,0,Msg,[],0,0), _)) -->
|
system_message(error(syntax_error(G,0,Msg,[],0,0), _)) -->
|
||||||
[ 'SYNTAX ERROR: ~a' - [G,Msg] ].
|
[ 'SYNTAX ERROR: ~a' - [G,Msg] ].
|
||||||
system_message(error(syntax_error(_,_,_,Term,Pos,Start), Where)) -->
|
system_message(error(syntax_error(_,_,_,Term,Pos,Start), Where)) -->
|
||||||
|
@ -72,6 +72,8 @@
|
|||||||
'$signal_handler'(sig_usr1, G).
|
'$signal_handler'(sig_usr1, G).
|
||||||
'$do_signal'(sig_usr2, G) :-
|
'$do_signal'(sig_usr2, G) :-
|
||||||
'$signal_handler'(sig_usr2, G).
|
'$signal_handler'(sig_usr2, G).
|
||||||
|
'$do_signal'(sig_pipe, G) :-
|
||||||
|
'$signal_handler'(sig_pipe, G).
|
||||||
|
|
||||||
'$signal_handler'(Sig, [M|G]) :-
|
'$signal_handler'(Sig, [M|G]) :-
|
||||||
'$signal_do'(Sig, Goal),
|
'$signal_do'(Sig, Goal),
|
||||||
@ -122,8 +124,9 @@
|
|||||||
( exists('~/.prologrc') -> [-'~/.prologrc'] ; true ),
|
( exists('~/.prologrc') -> [-'~/.prologrc'] ; true ),
|
||||||
( exists('~/prolog.ini') -> [-'~/prolog.ini'] ; true ))).
|
( exists('~/prolog.ini') -> [-'~/prolog.ini'] ; true ))).
|
||||||
% die on signal default.
|
% die on signal default.
|
||||||
'$signal_def'(sig_usr1, (print_message(error, 'Received user signal 1'),halt)).
|
'$signal_def'(sig_usr1, throw(error(signal(usr1,[]),true))).
|
||||||
'$signal_def'(sig_usr2, (print_message(error, 'Received user signal 2'),halt)).
|
'$signal_def'(sig_usr2, throw(error(signal(usr2,[]),true))).
|
||||||
|
'$signal_def'(sig_pipe, throw(error(signal(pipe,[]),true))).
|
||||||
% ignore sig_alarm by default
|
% ignore sig_alarm by default
|
||||||
'$signal_def'(sig_alarm, true).
|
'$signal_def'(sig_alarm, true).
|
||||||
|
|
||||||
|
Reference in New Issue
Block a user