* 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.)
This commit is contained in:
Guido van Rossum 1992-10-18 18:53:57 +00:00
parent 2db91358de
commit a9e7dc1081
7 changed files with 150 additions and 19 deletions

View file

@ -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 */