fixes for better signal handling
git-svn-id: https://yap.svn.sf.net/svnroot/yap/trunk@1159 b08c6af1-5177-4d33-ba66-4b1c6b8b522a
This commit is contained in:
parent
f72b3ad98e
commit
90db51f867
64
C/sysbits.c
64
C/sysbits.c
@ -1124,35 +1124,31 @@ InteractSIGINT(int ch) {
|
||||
siglongjmp (Yap_RestartEnv, 1);
|
||||
#endif
|
||||
}
|
||||
return(-1);
|
||||
return -1;
|
||||
case 'c':
|
||||
/* continue */
|
||||
return(1);
|
||||
return 1;
|
||||
case 'd':
|
||||
Yap_signal (YAP_DEBUG_SIGNAL);
|
||||
/* enter debug mode */
|
||||
Yap_PutValue (Yap_LookupAtom ("debug"), MkIntTerm (1));
|
||||
return(1);
|
||||
return 1;
|
||||
case 'e':
|
||||
/* exit */
|
||||
Yap_exit(0);
|
||||
return(-1);
|
||||
return -1;
|
||||
case 't':
|
||||
/* start tracing */
|
||||
Yap_PutValue (Yap_LookupAtom ("debug"), MkIntTerm (1));
|
||||
Yap_PutValue (Yap_LookupAtom ("spy_sl"), MkIntTerm (0));
|
||||
Yap_PutValue (Yap_FullLookupAtom ("$trace"), MkIntTerm (1));
|
||||
yap_flags[SPY_CREEP_FLAG] = 1;
|
||||
Yap_signal (YAP_CREEP_SIGNAL);
|
||||
return(1);
|
||||
Yap_signal (YAP_TRACE_SIGNAL);
|
||||
return 1;
|
||||
#ifdef LOW_LEVEL_TRACER
|
||||
case 'T':
|
||||
toggle_low_level_trace();
|
||||
return(1);
|
||||
return 1;
|
||||
#endif
|
||||
case 's':
|
||||
/* show some statistics */
|
||||
Yap_show_statistics();
|
||||
return(1);
|
||||
Yap_signal (YAP_STATISTICS_SIGNAL);
|
||||
return 1;
|
||||
case EOF:
|
||||
return(0);
|
||||
break;
|
||||
@ -2166,6 +2162,31 @@ p_first_signal(void)
|
||||
UNLOCK(SignalLock);
|
||||
return Yap_unify(ARG1, MkAtomTerm(Yap_LookupAtom("sig_creep")));
|
||||
}
|
||||
if (ActiveSignals & YAP_TRACE_SIGNAL) {
|
||||
ActiveSignals &= ~YAP_TRACE_SIGNAL;
|
||||
UNLOCK(SignalLock);
|
||||
return Yap_unify(ARG1, MkAtomTerm(Yap_LookupAtom("sig_trace")));
|
||||
}
|
||||
if (ActiveSignals & YAP_DEBUG_SIGNAL) {
|
||||
ActiveSignals &= ~YAP_DEBUG_SIGNAL;
|
||||
UNLOCK(SignalLock);
|
||||
return Yap_unify(ARG1, MkAtomTerm(Yap_LookupAtom("sig_debug")));
|
||||
}
|
||||
if (ActiveSignals & YAP_BREAK_SIGNAL) {
|
||||
ActiveSignals &= ~YAP_BREAK_SIGNAL;
|
||||
UNLOCK(SignalLock);
|
||||
return Yap_unify(ARG1, MkAtomTerm(Yap_LookupAtom("sig_break")));
|
||||
}
|
||||
if (ActiveSignals & YAP_STACK_DUMP_SIGNAL) {
|
||||
ActiveSignals &= ~YAP_STACK_DUMP_SIGNAL;
|
||||
UNLOCK(SignalLock);
|
||||
return Yap_unify(ARG1, MkAtomTerm(Yap_LookupAtom("sig_stack_dump")));
|
||||
}
|
||||
if (ActiveSignals & YAP_STATISTICS_SIGNAL) {
|
||||
ActiveSignals &= ~YAP_STATISTICS_SIGNAL;
|
||||
UNLOCK(SignalLock);
|
||||
return Yap_unify(ARG1, MkAtomTerm(Yap_LookupAtom("sig_statistics")));
|
||||
}
|
||||
UNLOCK(SignalLock);
|
||||
return FALSE;
|
||||
}
|
||||
@ -2195,6 +2216,21 @@ p_continue_signals(void)
|
||||
if (ActiveSignals & YAP_CREEP_SIGNAL) {
|
||||
Yap_signal(YAP_CREEP_SIGNAL);
|
||||
}
|
||||
if (ActiveSignals & YAP_TRACE_SIGNAL) {
|
||||
Yap_signal(YAP_TRACE_SIGNAL);
|
||||
}
|
||||
if (ActiveSignals & YAP_DEBUG_SIGNAL) {
|
||||
Yap_signal(YAP_DEBUG_SIGNAL);
|
||||
}
|
||||
if (ActiveSignals & YAP_BREAK_SIGNAL) {
|
||||
Yap_signal(YAP_BREAK_SIGNAL);
|
||||
}
|
||||
if (ActiveSignals & YAP_STACK_DUMP_SIGNAL) {
|
||||
Yap_signal(YAP_STACK_DUMP_SIGNAL);
|
||||
}
|
||||
if (ActiveSignals & YAP_STATISTICS_SIGNAL) {
|
||||
Yap_signal(YAP_STATISTICS_SIGNAL);
|
||||
}
|
||||
return TRUE;
|
||||
}
|
||||
|
||||
|
@ -10,7 +10,7 @@
|
||||
* File: Yap.h.m4 *
|
||||
* mods: *
|
||||
* comments: main header file for YAP *
|
||||
* version: $Id: Yap.h.m4,v 1.70 2004-10-06 16:55:48 vsc Exp $ *
|
||||
* version: $Id: Yap.h.m4,v 1.71 2004-10-08 17:20:03 vsc Exp $ *
|
||||
*************************************************************************/
|
||||
|
||||
#include "config.h"
|
||||
@ -564,7 +564,12 @@ typedef enum {
|
||||
YAP_ITI_SIGNAL = 0x80, /* received inter thread signal */
|
||||
YAP_TROVF_SIGNAL = 0x100, /* received trail overflow */
|
||||
YAP_CDOVF_SIGNAL = 0x200, /* received code overflow */
|
||||
YAP_STOVF_SIGNAL = 0x400 /* received stack overflow */
|
||||
YAP_STOVF_SIGNAL = 0x400, /* received stack overflow */
|
||||
YAP_TRACE_SIGNAL = 0x800, /* received start trace */
|
||||
YAP_DEBUG_SIGNAL = 0x1000, /* received start debug */
|
||||
YAP_BREAK_SIGNAL = 0x2000, /* received break signal */
|
||||
YAP_STACK_DUMP_SIGNAL= 0x4000, /* received stack dump signal */
|
||||
YAP_STATISTICS_SIGNAL= 0x8000 /* received statistics */
|
||||
} yap_signals;
|
||||
|
||||
#define NUMBER_OF_YAP_FLAGS INDEXING_MODE_FLAG+1
|
||||
|
@ -38,7 +38,30 @@
|
||||
% if more signals alive, set creep flag
|
||||
'$continue_signals',
|
||||
'$current_module'(M0),
|
||||
'$execute0'((Goal,M:G),M0).
|
||||
'$execute0'(G,M0).
|
||||
'$do_signal'(sig_trace, G) :-
|
||||
'$continue_signals',
|
||||
trace.
|
||||
'$do_signal'(sig_debug, G) :-
|
||||
'$continue_signals',
|
||||
'$current_module'(M0),
|
||||
debug,
|
||||
'$execute0'(G,M0).
|
||||
'$do_signal'(sig_break, G) :-
|
||||
'$continue_signals',
|
||||
'$current_module'(M0),
|
||||
break,
|
||||
'$execute0'(G,M0).
|
||||
'$do_signal'(sig_statistics, G) :-
|
||||
'$continue_signals',
|
||||
'$current_module'(M0),
|
||||
statistics,
|
||||
'$execute0'(G,M0).
|
||||
'$do_signal'(sig_stack_dump, G) :-
|
||||
'$continue_signals',
|
||||
'$current_module'(M0),
|
||||
'$stack_dump',
|
||||
'$execute0'(G,M0).
|
||||
% Unix signals
|
||||
'$do_signal'(sig_alarm, G) :-
|
||||
'$signal_handler'(sig_alarm, G).
|
||||
|
Reference in New Issue
Block a user