From 2c235df9ac8fc96a5379cc6d99903a88a10bcd3a Mon Sep 17 00:00:00 2001 From: Oliver Lehmann Date: Wed, 12 Apr 1989 10:44:24 +0000 Subject: [PATCH] ING_DB --- .../contrib/ingres/dbs/src/amx_lib/AAsignal.c | 139 ++++++++++++++++++ 1 file changed, 139 insertions(+) create mode 100644 WEGA/contrib/ingres/dbs/src/amx_lib/AAsignal.c diff --git a/WEGA/contrib/ingres/dbs/src/amx_lib/AAsignal.c b/WEGA/contrib/ingres/dbs/src/amx_lib/AAsignal.c new file mode 100644 index 0000000..6db2293 --- /dev/null +++ b/WEGA/contrib/ingres/dbs/src/amx_lib/AAsignal.c @@ -0,0 +1,139 @@ +# include +# include "AA_liba.h" + +/* C library functions */ +# ifdef MSDOS +# define NO_KILL +# else +extern int (*signal())(); +# endif +extern long time(); + +/* user signal catch */ +static int (*AAsigint)(); +# ifndef MSDOS +static int (*AAsigquit)(); +static int (*AAsigterm)(); +# endif + +# ifndef NO_KILL +static int AAcntint; +static int AAcntquit; +static int AAcntterm; +# endif + +/* the update daemon for long transactions */ +# define AADAEMON 30 /* seconds */ + +static char AAINTERRUPT[] = "database in progress (%s)\n"; + + +/* AMX interrupt signal catch */ +AA_int() +{ + signal(SIGINT, (int (*)()) 1); +# ifndef NO_KILL + AAcntint++; +# endif + printf(AAINTERRUPT, "INT"); +} + +# ifndef MSDOS +/* AMX quit signal catch */ +AA_quit() +{ + signal(SIGQUIT, (int (*)()) 1); +# ifndef NO_KILL + AAcntquit++; +# endif + printf(AAINTERRUPT, "QUIT"); +} + +/* AMX software termination signal catch */ +AA_term() +{ + signal(SIGTERM, (int (*)()) 1); +# ifndef NO_KILL + AAcntterm++; +# endif + printf(AAINTERRUPT, "TERM"); +} +# endif + +AA_on() +{ + AAsigint = signal(SIGINT, AA_int); +# ifndef MSDOS + AAsigquit = signal(SIGQUIT, AA_quit); + AAsigterm = signal(SIGTERM, AA_term); +# endif + + if (!AAdaemon) + time(&AAdaemon); + +# ifdef AMX_TRACE + AAtTfp(16, 0, "daemon on\t%ld\n", AAdaemon); +# endif +} + +AA_off() +{ + register DESCXX *d; + register int i; + + i = time((char *) 0) - AAdaemon; + +# ifdef AMX_TRACE + AAtTfp(17, 0, "daemon off\t%d\n", i); +# endif + + if (i > AADAEMON) + { +# ifdef AMX_TRACE + AAtTfp(17, 1, "flush bufs\n"); +# endif + /* flush all pages */ + AApageflush((ACCBUF *) 0); + + d = AA_DESC; + + /* flush catalog informations */ + while (d = d->xx_next) + { + if (d->xx_desc.reladds) + AAnoclose(d); + } + + sync(); + AAdaemon = 0L; + } + + signal(SIGINT, AAsigint); +# ifndef NO_KILL + if (AAcntint) + { + AAcntint = 0; + kill(SIGINT, 0); + } +# endif + +# ifndef MSDOS + signal(SIGQUIT, AAsigquit); +# ifndef NO_KILL + if (AAcntquit) + { + AAcntquit = 0; + kill(SIGQUIT, 0); + } +# endif + + signal(SIGTERM, AAsigterm); +# ifndef NO_KILL + if (AAcntterm) + { + AAcntterm = 0; + kill(SIGTERM, 0); + } +# endif +# endif +}