#include "kernel/mod2.h"
#include "reporter/si_signals.h"
#include "Singular/fevoices.h"
#include "misc/options.h"
#include "Singular/tok.h"
#include "Singular/ipshell.h"
#include "Singular/cntrlc.h"
#include "Singular/feOpt.h"
#include "Singular/misc_ip.h"
#include "Singular/links/silink.h"
#include "Singular/links/ssiLink.h"
#include <NTL/version.h>
#include <NTL/tools.h>
#include <time.h>
#include <sys/time.h>
Go to the source code of this file.
◆ CALL_GDB
◆ INTERACTIVE
◆ STACK_TRACE
◆ si_hdl_typ
typedef void(* si_hdl_typ) (int) |
◆ debug()
static void debug |
( |
int |
method | ) |
|
|
static |
Definition at line 406 of file cntrlc.cc.
415 char * args[4] = { (
char*)
"gdb", (
char*)
"Singular",
NULL,
NULL };
421 sprintf (
buf,
"%d", getpid ());
431 fputs (
"\n\nquit with \"p si_stop_stack_trace_x=0\"\n\n\n",stderr);
435 fputs (
"stack_trace\n",stderr);
445 perror (
"could not fork");
static void stack_trace(char *const *args)
VAR volatile int si_stop_stack_trace_x
static void debug_stop(char *const *args)
static void * feOptValue(feOptIndex opt)
VAR BOOLEAN fe_is_raw_tty
int dReportError(const char *fmt,...)
int status int void * buf
◆ debug_stop()
static void debug_stop |
( |
char *const * |
args | ) |
|
|
static |
Definition at line 453 of file cntrlc.cc.
455 execvp (args[0], args);
456 perror (
"exec failed");
◆ init_signals()
init signal handlers and error handling for libraries: NTL, factory
Definition at line 559 of file cntrlc.cc.
563 #if (((NTL_MAJOR_VERSION==9)&&(NTL_MINOR_VERSION>=3))||(NTL_MAJOR_VERSION>=10))
VAR void(* factoryError)(const char *s)
si_hdl_typ si_set_signal(int sig, si_hdl_typ signal_handler)
meta function for binding a signal to an handler
void sigsegv_handler(int sig)
void WerrorS(const char *s)
void sig_chld_hdl(int)
additional default signal handler
◆ si_set_signal()
meta function for binding a signal to an handler
- Parameters
-
[in] | sig | Signal number |
[in] | signal_handler | Pointer to signal handler |
- Returns
- value of signal()
Definition at line 121 of file cntrlc.cc.
125 if (retval == SIG_ERR)
127 fprintf(stderr,
"Unable to init signal %d ... exiting...\n", sig);
134 struct sigaction new_action,old_action;
135 memset(&new_action, 0,
sizeof(
struct sigaction));
138 new_action.sa_handler = signal_handler;
140 sigemptyset (&new_action.sa_mask);
142 new_action.sa_flags = SA_RESTART;
144 int r=si_sigaction (sig, &new_action, &old_action);
148 fprintf(stderr,
"Unable to init signal %d ... exiting...\n", sig);
#define si_siginterrupt(arg1, arg2)
◆ sig_pipe_hdl()
void sig_pipe_hdl |
( |
int |
| ) |
|
Definition at line 67 of file cntrlc.cc.
BOOLEAN slClose(si_link l)
◆ sig_term_hdl()
void sig_term_hdl |
( |
int |
| ) |
|
Definition at line 80 of file cntrlc.cc.
VAR volatile BOOLEAN do_shutdown
VAR volatile int defer_shutdown
◆ sigint_handler()
void sigint_handler |
( |
int |
| ) |
|
Definition at line 309 of file cntrlc.cc.
315 char default_opt=
' ';
317 && ((
char*)(
feOptSpec[FE_OPT_CNTRLC].value))[0])
318 { default_opt=((
char*)(
feOptSpec[FE_OPT_CNTRLC].value))[0]; }
328 else if (default_opt!=
' ')
334 fprintf(stderr,
"// ** Interrupt at cmd:`%s` in line:'%s'\n",
338 fputs(
"abort after this command(a), abort immediately(r), print backtrace(b), continue(c) or quit Singular(q) ?",stderr);
339 fflush(stderr);fflush(stdin);
356 fputs(
"** Warning: Singular should be restarted as soon as possible **\n",stderr);
365 fputs(
"** tried too often, try another possibility **\n",stderr);
378 while (c != EOF && c !=
'\n') c = fgetc(stdin);
VAR jmp_buf si_start_jmpbuf
VAR BOOLEAN singular_in_batchmode
VAR int sigint_handler_cnt
EXTERN_VAR struct fe_option feOptSpec[]
VAR char my_yylinebuf[80]
Voice * feInitStdin(Voice *pp)
const char * Tok2Cmdname(int tok)
◆ sigsegv_handler()
void sigsegv_handler |
( |
int |
sig | ) |
|
Definition at line 277 of file cntrlc.cc.
279 fprintf(stderr,
"Singular : signal %d (v: %d):\n",
284 fprintf(stderr,
"Segment fault/Bus error occurred (r:%d)\n"
285 "please inform the authors\n",
292 fputs(
"trying to restart...\n",stderr);
void init_signals()
init signal handlers and error handling for libraries: NTL, factory
◆ stack_trace()
static void stack_trace |
( |
char *const * |
args | ) |
|
|
static |
Definition at line 461 of file cntrlc.cc.
469 int sel,
index, state;
473 if ((pipe (in_fd) == -1) || (pipe (out_fd) == -1))
475 perror (
"could open pipe");
482 si_close (0); si_dup2 (in_fd[0],0);
483 si_close (1); si_dup2 (out_fd[1],1);
484 si_close (2); si_dup2 (out_fd[1],2);
486 execvp (args[0], args);
487 perror (
"exec failed");
492 perror (
"could not fork");
497 FD_SET (out_fd[0], &fdset);
499 si_write (in_fd[1],
"backtrace\n", 10);
500 si_write (in_fd[1],
"p si_stop_stack_trace_x = 0\n", 28);
501 si_write (in_fd[1],
"quit\n", 5);
512 sel = si_select (FD_SETSIZE, &readset,
NULL,
NULL, &tv);
516 if ((sel > 0) && (FD_ISSET (out_fd[0], &readset)))
518 if (si_read (out_fd[0], &c, 1))
532 if ((c ==
'\n') || (c ==
'\r'))
535 fputs (buffer,stderr);
551 si_close (out_fd[0]);
552 si_close (out_fd[1]);
static int index(p_Length length, p_Ord ord)
◆ defer_shutdown
VAR volatile int defer_shutdown = 0 |
◆ do_shutdown
◆ pipeLastLink
◆ si_restart
◆ si_start_jmpbuf
VAR jmp_buf si_start_jmpbuf |
◆ si_stop_stack_trace_x
VAR volatile int si_stop_stack_trace_x |
◆ sigint_handler_cnt
VAR int sigint_handler_cnt =0 |
◆ singular_in_batchmode
◆ siRandomStart