mirror of
				https://github.com/python/cpython.git
				synced 2025-10-31 13:41:24 +00:00 
			
		
		
		
	Merge Py_Cleanup() into Py_Finalize(). Call the various small Fini()
functions.
This commit is contained in:
		
							parent
							
								
									085d269f1d
								
							
						
					
					
						commit
						cc283f56a7
					
				
					 1 changed files with 43 additions and 36 deletions
				
			
		|  | @ -69,6 +69,8 @@ static PyObject *run_pyc_file Py_PROTO((FILE *fp, char *filename, | ||||||
| static void err_input Py_PROTO((perrdetail *)); | static void err_input Py_PROTO((perrdetail *)); | ||||||
| static void initsigs Py_PROTO((void)); | static void initsigs Py_PROTO((void)); | ||||||
| static void finisigs 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_DebugFlag; /* Needed by parser.c */ | ||||||
| int Py_VerboseFlag; /* Needed by import.c */ | int Py_VerboseFlag; /* Needed by import.c */ | ||||||
|  | @ -162,6 +164,8 @@ Py_Finalize() | ||||||
| 	PyInterpreterState *interp; | 	PyInterpreterState *interp; | ||||||
| 	PyThreadState *tstate; | 	PyThreadState *tstate; | ||||||
| 
 | 
 | ||||||
|  | 	call_sys_exitfunc(); | ||||||
|  | 
 | ||||||
| 	if (!initialized) | 	if (!initialized) | ||||||
| 		Py_FatalError("Py_Finalize: not initialized"); | 		Py_FatalError("Py_Finalize: not initialized"); | ||||||
| 	initialized = 0; | 	initialized = 0; | ||||||
|  | @ -177,9 +181,38 @@ Py_Finalize() | ||||||
| 	finisigs(); | 	finisigs(); | ||||||
| 	_PyImport_Fini(); | 	_PyImport_Fini(); | ||||||
| 	_PyBuiltin_Fini(); | 	_PyBuiltin_Fini(); | ||||||
|  | 	PyMethod_Fini(); | ||||||
|  | 	PyFrame_Fini(); | ||||||
|  | 	PyCFunction_Fini(); | ||||||
|  | 	PyTuple_Fini(); | ||||||
| 	PyString_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); | 	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
 | /* Create and initialize a new interpreter and thread, and return the
 | ||||||
|  | @ -297,22 +330,6 @@ Py_GetProgramName() | ||||||
| 	return progname; | 	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 */ | /* Create __main__ module */ | ||||||
| 
 | 
 | ||||||
| static void | static void | ||||||
|  | @ -831,8 +848,8 @@ int Py_AtExit(func) | ||||||
| 	return 0; | 	return 0; | ||||||
| } | } | ||||||
| 
 | 
 | ||||||
| void | static void | ||||||
| Py_Cleanup() | call_sys_exitfunc() | ||||||
| { | { | ||||||
| 	PyObject *exitfunc = PySys_GetObject("exitfunc"); | 	PyObject *exitfunc = PySys_GetObject("exitfunc"); | ||||||
| 
 | 
 | ||||||
|  | @ -849,9 +866,11 @@ Py_Cleanup() | ||||||
| 	} | 	} | ||||||
| 
 | 
 | ||||||
| 	Py_FlushLine(); | 	Py_FlushLine(); | ||||||
|  | } | ||||||
| 
 | 
 | ||||||
| 	Py_Finalize(); | static void | ||||||
| 
 | call_ll_exitfuncs() | ||||||
|  | { | ||||||
| 	while (nexitfuncs > 0) | 	while (nexitfuncs > 0) | ||||||
| 		(*exitfuncs[--nexitfuncs])(); | 		(*exitfuncs[--nexitfuncs])(); | ||||||
| 
 | 
 | ||||||
|  | @ -867,21 +886,7 @@ void | ||||||
| Py_Exit(sts) | Py_Exit(sts) | ||||||
| 	int sts; | 	int sts; | ||||||
| { | { | ||||||
| 	Py_Cleanup(); | 	Py_Finalize(); | ||||||
| 
 |  | ||||||
| #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 */ |  | ||||||
| 
 | 
 | ||||||
| #ifdef macintosh | #ifdef macintosh | ||||||
| 	PyMac_Exit(sts); | 	PyMac_Exit(sts); | ||||||
|  | @ -896,7 +901,9 @@ sighandler(sig) | ||||||
| 	int sig; | 	int sig; | ||||||
| { | { | ||||||
| 	signal(sig, SIG_DFL); /* Don't catch recursive signals */ | 	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 | #ifdef HAVE_KILL | ||||||
| 	kill(getpid(), sig); /* Pretend the signal killed us */ | 	kill(getpid(), sig); /* Pretend the signal killed us */ | ||||||
| #else | #else | ||||||
|  |  | ||||||
		Loading…
	
	Add table
		Add a link
		
	
		Reference in a new issue
	
	 Guido van Rossum
						Guido van Rossum