Fixed typos in GB inner dielectric commit for some kernels.
[gromacs.git] / src / gmxlib / sighandler.c
blob733c9ddc42001d91c1e3e3ca8be6135adf8660a6
1 /*
2 *
3 * This source code is part of
4 *
5 * G R O M A C S
6 *
7 * GROningen MAchine for Chemical Simulations
8 *
9 * VERSION 3.2.0
10 * Written by David van der Spoel, Erik Lindahl, Berk Hess, and others.
11 * Copyright (c) 1991-2000, University of Groningen, The Netherlands.
12 * Copyright (c) 2001-2004, The GROMACS development team,
13 * check out http://www.gromacs.org for more information.
15 * This program is free software; you can redistribute it and/or
16 * modify it under the terms of the GNU General Public License
17 * as published by the Free Software Foundation; either version 2
18 * of the License, or (at your option) any later version.
20 * If you want to redistribute modifications, please consider that
21 * scientific software is very special. Version control is crucial -
22 * bugs must be traceable. We will be happy to consider code for
23 * inclusion in the official distribution, but derived work must not
24 * be called official GROMACS. Details are found in the README & COPYING
25 * files - if they are missing, get the official version at www.gromacs.org.
27 * To help us fund GROMACS development, we humbly ask that you cite
28 * the papers on the package - you can find them in the top README file.
30 * For more info, check our website at http://www.gromacs.org
32 * And Hey:
33 * GROwing Monsters And Cloning Shrimps
35 #ifdef HAVE_CONFIG_H
36 #include <config.h>
37 #endif
39 #include "typedefs.h"
40 #include "gmx_fatal.h"
41 #include "sighandler.h"
43 /* The following two variables and the signal_handler function
44 * are used from md.c and pme.c as well
46 * Do not fear these global variables: they represent inherently process-global
47 * information that needs to be shared across threads
51 /* we got a signal to stop in the next step: */
52 volatile sig_atomic_t bGotStopNextStepSignal=FALSE;
53 /* we got a signal to stop in the next neighbour search step: */
54 volatile sig_atomic_t bGotStopNextNSStepSignal=FALSE;
56 /* our names for the handled signals. These must match the number given
57 in signal_handler. */
58 const char *signal_name[] =
60 "TERM",
61 "INT",
62 "second INT"
65 /* the last signal received, according to the numbering
66 we use in signal_name */
67 volatile sig_atomic_t last_signal_number_recvd=-1;
69 RETSIGTYPE signal_handler(int n)
71 switch (n) {
72 case SIGTERM:
73 bGotStopNextStepSignal = TRUE;
74 last_signal_number_recvd = 0;
75 break;
76 /* windows doesn't do SIGINT correctly according to ANSI (yes, signals are in
77 ANSI C89, and windows spawns a thread specifically to run the INT signal
78 handler), but that doesn't matter for a simple signal handler like this. */
79 case SIGINT:
80 if (!bGotStopNextNSStepSignal)
82 bGotStopNextNSStepSignal = TRUE;
83 last_signal_number_recvd = 1;
84 } else if (!bGotStopNextStepSignal)
86 bGotStopNextStepSignal = TRUE;
87 last_signal_number_recvd = 2;
89 else
90 abort();
91 break;
96 void signal_handler_install(void)
98 if (getenv("GMX_NO_TERM") == NULL)
100 if (debug)
102 fprintf(debug,"Installing signal handler for SIGTERM\n");
104 signal(SIGTERM,signal_handler);
106 if (getenv("GMX_NO_INT") == NULL)
108 if (debug)
110 fprintf(debug,"Installing signal handler for SIGINT\n");
112 signal(SIGINT,signal_handler);