summaryrefslogtreecommitdiffstats
path: root/Python/pythonrun.c
diff options
context:
space:
mode:
authorGuido van Rossum <guido@python.org>1992-10-18 18:53:57 (GMT)
committerGuido van Rossum <guido@python.org>1992-10-18 18:53:57 (GMT)
commita9e7dc10816dcf5eda63d3ef00930ef9d55e0675 (patch)
tree5454bc7a52a71fe9639ec7f0cef856c413b25157 /Python/pythonrun.c
parent2db91358def94cf8081f27b736988320d14eba39 (diff)
downloadcpython-a9e7dc10816dcf5eda63d3ef00930ef9d55e0675.zip
cpython-a9e7dc10816dcf5eda63d3ef00930ef9d55e0675.tar.gz
cpython-a9e7dc10816dcf5eda63d3ef00930ef9d55e0675.tar.bz2
* bltinmodule.c: added built-in function cmp(a, b)
* flmodule.c: added {do,check}_only_forms to fl's list of functions; and don't print a message when an unknown object is returned. * pythonrun.c: catch SIGHUP and SIGTERM to do essential cleanup. * Made jpegmodule.c smaller by using getargs() and mkvalue() consistently. * Increased parser stack size to 500 in parser.h. * Implemented custom allocation of stack frames to frameobject.c and added dynamic stack overflow checks (value stack only) to ceval.c. (There seems to be a bug left: sometimes stack traces don't make sense.)
Diffstat (limited to 'Python/pythonrun.c')
-rw-r--r--Python/pythonrun.c49
1 files changed, 45 insertions, 4 deletions
diff --git a/Python/pythonrun.c b/Python/pythonrun.c
index 90a4294..1bcc083 100644
--- a/Python/pythonrun.c
+++ b/Python/pythonrun.c
@@ -38,10 +38,21 @@ OF OR IN CONNECTION WITH THE USE OR PERFORMANCE OF THIS SOFTWARE.
#include "pythonrun.h"
#include "import.h"
+#ifdef unix
+#define HANDLE_SIGNALS
+#endif
+
+#ifdef HANDLE_SIGNALS
+#include <signal.h>
+#include "sigtype.h"
+#endif
+
extern char *getpythonpath();
extern grammar gram; /* From graminit.c */
+void initsigs(); /* Forward */
+
int debugging; /* Needed by parser.c */
int verbose; /* Needed by import.c */
@@ -67,10 +78,10 @@ initall()
initsys();
initcalls(); /* Configuration-dependent initializations */
-
- initintr(); /* For intrcheck() */
setpythonpath(getpythonpath());
+
+ initsigs(); /* Signal handling stuff, including initintr() */
}
/* Parse input from a file and execute it */
@@ -372,8 +383,7 @@ extern int threads_started;
#endif
void
-goaway(sts)
- int sts;
+cleanup()
{
object *exitfunc = sysget("exitfunc");
@@ -395,6 +405,13 @@ goaway(sts)
}
flushline();
+}
+
+void
+goaway(sts)
+ int sts;
+{
+ cleanup();
#ifdef USE_THREAD
@@ -433,6 +450,30 @@ goaway(sts)
/*NOTREACHED*/
}
+#ifdef HANDLE_SIGNALS
+SIGTYPE
+sighandler(sig)
+ int sig;
+{
+ signal(sig, SIG_DFL); /* Don't catch recursive signals */
+ cleanup(); /* Do essential clean-up */
+ kill(getpid(), sig); /* Pretend the signal killed us */
+ /*NOTREACHED*/
+}
+#endif
+
+void
+initsigs()
+{
+ initintr();
+#ifdef HANDLE_SIGNALS
+ if (signal(SIGHUP, SIG_IGN) != SIG_IGN)
+ signal(SIGHUP, sighandler);
+ if (signal(SIGTERM, SIG_IGN) != SIG_IGN)
+ signal(SIGTERM, sighandler);
+#endif
+}
+
#ifdef TRACE_REFS
/* Ask a yes/no question */