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);
|
siglongjmp (Yap_RestartEnv, 1);
|
||||||
#endif
|
#endif
|
||||||
}
|
}
|
||||||
return(-1);
|
return -1;
|
||||||
case 'c':
|
case 'c':
|
||||||
/* continue */
|
/* continue */
|
||||||
return(1);
|
return 1;
|
||||||
case 'd':
|
case 'd':
|
||||||
|
Yap_signal (YAP_DEBUG_SIGNAL);
|
||||||
/* enter debug mode */
|
/* enter debug mode */
|
||||||
Yap_PutValue (Yap_LookupAtom ("debug"), MkIntTerm (1));
|
return 1;
|
||||||
return(1);
|
|
||||||
case 'e':
|
case 'e':
|
||||||
/* exit */
|
/* exit */
|
||||||
Yap_exit(0);
|
Yap_exit(0);
|
||||||
return(-1);
|
return -1;
|
||||||
case 't':
|
case 't':
|
||||||
/* start tracing */
|
/* start tracing */
|
||||||
Yap_PutValue (Yap_LookupAtom ("debug"), MkIntTerm (1));
|
Yap_signal (YAP_TRACE_SIGNAL);
|
||||||
Yap_PutValue (Yap_LookupAtom ("spy_sl"), MkIntTerm (0));
|
return 1;
|
||||||
Yap_PutValue (Yap_FullLookupAtom ("$trace"), MkIntTerm (1));
|
|
||||||
yap_flags[SPY_CREEP_FLAG] = 1;
|
|
||||||
Yap_signal (YAP_CREEP_SIGNAL);
|
|
||||||
return(1);
|
|
||||||
#ifdef LOW_LEVEL_TRACER
|
#ifdef LOW_LEVEL_TRACER
|
||||||
case 'T':
|
case 'T':
|
||||||
toggle_low_level_trace();
|
toggle_low_level_trace();
|
||||||
return(1);
|
return 1;
|
||||||
#endif
|
#endif
|
||||||
case 's':
|
case 's':
|
||||||
/* show some statistics */
|
/* show some statistics */
|
||||||
Yap_show_statistics();
|
Yap_signal (YAP_STATISTICS_SIGNAL);
|
||||||
return(1);
|
return 1;
|
||||||
case EOF:
|
case EOF:
|
||||||
return(0);
|
return(0);
|
||||||
break;
|
break;
|
||||||
@ -2166,6 +2162,31 @@ p_first_signal(void)
|
|||||||
UNLOCK(SignalLock);
|
UNLOCK(SignalLock);
|
||||||
return Yap_unify(ARG1, MkAtomTerm(Yap_LookupAtom("sig_creep")));
|
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);
|
UNLOCK(SignalLock);
|
||||||
return FALSE;
|
return FALSE;
|
||||||
}
|
}
|
||||||
@ -2195,6 +2216,21 @@ p_continue_signals(void)
|
|||||||
if (ActiveSignals & YAP_CREEP_SIGNAL) {
|
if (ActiveSignals & YAP_CREEP_SIGNAL) {
|
||||||
Yap_signal(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;
|
return TRUE;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -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.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"
|
#include "config.h"
|
||||||
@ -564,7 +564,12 @@ typedef enum {
|
|||||||
YAP_ITI_SIGNAL = 0x80, /* received inter thread signal */
|
YAP_ITI_SIGNAL = 0x80, /* received inter thread signal */
|
||||||
YAP_TROVF_SIGNAL = 0x100, /* received trail overflow */
|
YAP_TROVF_SIGNAL = 0x100, /* received trail overflow */
|
||||||
YAP_CDOVF_SIGNAL = 0x200, /* received code 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;
|
} yap_signals;
|
||||||
|
|
||||||
#define NUMBER_OF_YAP_FLAGS INDEXING_MODE_FLAG+1
|
#define NUMBER_OF_YAP_FLAGS INDEXING_MODE_FLAG+1
|
||||||
|
@ -38,7 +38,30 @@
|
|||||||
% if more signals alive, set creep flag
|
% if more signals alive, set creep flag
|
||||||
'$continue_signals',
|
'$continue_signals',
|
||||||
'$current_module'(M0),
|
'$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
|
% Unix signals
|
||||||
'$do_signal'(sig_alarm, G) :-
|
'$do_signal'(sig_alarm, G) :-
|
||||||
'$signal_handler'(sig_alarm, G).
|
'$signal_handler'(sig_alarm, G).
|
||||||
|
Reference in New Issue
Block a user