Mercurial > cpython-lru_cache-weakref
diff Python/pythonrun.c @ 5939:2c65bb6ab87c legacy-trunk
Merge Py_Cleanup() into Py_Finalize(). Call the various small Fini()
functions.
| author | Guido van Rossum <guido@python.org> |
|---|---|
| date | Tue, 05 Aug 1997 02:22:03 +0000 |
| parents | 8d2194e22e67 |
| children | 98a282cfb013 |
line wrap: on
line diff
--- a/Python/pythonrun.c Tue Aug 05 02:20:51 1997 +0000 +++ b/Python/pythonrun.c Tue Aug 05 02:22:03 1997 +0000 @@ -69,6 +69,8 @@ static void err_input Py_PROTO((perrdetail *)); static void initsigs Py_PROTO((void)); static void finisigs Py_PROTO((void)); +static void call_sys_exitfunc Py_PROTO((void)); +static void call_ll_exitfuncs Py_PROTO((void)); int Py_DebugFlag; /* Needed by parser.c */ int Py_VerboseFlag; /* Needed by import.c */ @@ -162,6 +164,8 @@ PyInterpreterState *interp; PyThreadState *tstate; + call_sys_exitfunc(); + if (!initialized) Py_FatalError("Py_Finalize: not initialized"); initialized = 0; @@ -177,9 +181,38 @@ finisigs(); _PyImport_Fini(); _PyBuiltin_Fini(); + PyMethod_Fini(); + PyFrame_Fini(); + PyCFunction_Fini(); + PyTuple_Fini(); PyString_Fini(); + PyInt_Fini(); + PyFloat_Fini(); + + /* XXX Still allocated: + - various static ad-hoc pointers to interned strings + - int and float free list blocks + - whatever various modules and libraries allocate + */ PyGrammar_RemoveAccelerators(&_PyParser_Grammar); + + call_ll_exitfuncs(); + +#ifdef COUNT_ALLOCS + dump_counts(); +#endif + +#ifdef Py_REF_DEBUG + fprintf(stderr, "[%ld refs]\n", _Py_RefTotal); +#endif + +#ifdef Py_TRACE_REFS + if (_Py_AskYesNo("Print left references?")) { + _Py_PrintReferences(stderr); + } + _Py_ResetReferences(); +#endif /* Py_TRACE_REFS */ } /* Create and initialize a new interpreter and thread, and return the @@ -297,22 +330,6 @@ return progname; } -/* - Py_Initialize() - -- do everything, no-op on second call, call fatal on failure, set path - - #2 - -- create new interp+tstate & make it current, return NULL on failure, - make it current, do all setup, set path - - #3 - -- #2 without set path - - #4 - -- is there any point to #3 for caller-provided current interp+tstate? - -*/ - /* Create __main__ module */ static void @@ -831,8 +848,8 @@ return 0; } -void -Py_Cleanup() +static void +call_sys_exitfunc() { PyObject *exitfunc = PySys_GetObject("exitfunc"); @@ -849,9 +866,11 @@ } Py_FlushLine(); +} - Py_Finalize(); - +static void +call_ll_exitfuncs() +{ while (nexitfuncs > 0) (*exitfuncs[--nexitfuncs])(); @@ -867,21 +886,7 @@ Py_Exit(sts) int sts; { - Py_Cleanup(); - -#ifdef COUNT_ALLOCS - dump_counts(); -#endif - -#ifdef Py_REF_DEBUG - fprintf(stderr, "[%ld refs]\n", _Py_RefTotal); -#endif - -#ifdef Py_TRACE_REFS - if (_Py_AskYesNo("Print left references?")) { - _Py_PrintReferences(stderr); - } -#endif /* Py_TRACE_REFS */ + Py_Finalize(); #ifdef macintosh PyMac_Exit(sts); @@ -896,7 +901,9 @@ int sig; { signal(sig, SIG_DFL); /* Don't catch recursive signals */ - Py_Cleanup(); /* Do essential clean-up */ + /* Do essential exit processing only */ + call_sys_exitfunc(); + call_ll_exitfuncs(); #ifdef HAVE_KILL kill(getpid(), sig); /* Pretend the signal killed us */ #else
