- New C API PyGC_Collect(), same as calling gc.collect().

- Call this in Py_Finalize().
- Expand the Misc/NEWS text on PY_LONG_LONG.
This commit is contained in:
Guido van Rossum 2003-04-17 17:29:22 +00:00
parent cf8d285ba3
commit e13ddc9ec8
4 changed files with 37 additions and 2 deletions

View File

@ -228,6 +228,9 @@ PyAPI_FUNC(PyVarObject *) _PyObject_NewVar(PyTypeObject *, int);
* ==========================
*/
/* C equivalent of gc.collect(). */
long PyGC_Collect(void);
/* Test if a type has a GC head */
#define PyType_IS_GC(t) PyType_HasFeature((t), Py_TPFLAGS_HAVE_GC)

View File

@ -169,11 +169,17 @@ Build
C API
-----
- Added PyGC_Collect(), equivalent to calling gc.collect().
- PyThreadState_GetDict() was changed not to raise an exception or
issue a fatal error when no current thread state is available. This
makes it possible to print dictionaries when no thread is active.
- LONG_LONG was renamed to PY_LONG_LONG.
- LONG_LONG was renamed to PY_LONG_LONG. Extensions that use this and
need compatibility with previous versions can use this:
#ifndef PY_LONG_LONG
#define PY_LONG_LONG LONG_LONG
#endif
- Added PyObject_SelfIter() to fill the tp_iter slot for the
typical case where the method returns its self argument.

View File

@ -980,8 +980,26 @@ initgc(void)
#undef ADD_INT
}
/* API to invoke gc.collect() from C */
long
PyGC_Collect(void)
{
long n;
if (collecting)
n = 0; /* already collecting, don't do anything */
else {
collecting = 1;
n = collect(NUM_GENERATIONS - 1);
collecting = 0;
}
return n;
}
/* for debugging */
void _PyGC_Dump(PyGC_Head *g)
void
_PyGC_Dump(PyGC_Head *g)
{
_PyObject_Dump(FROM_GC(g));
}

View File

@ -255,9 +255,17 @@ Py_Finalize(void)
Py_XDECREF(PyModule_WarningsModule);
PyModule_WarningsModule = NULL;
/* Collect garbage. This may call finalizers; it's nice to call these
before all modules are destroyed. */
PyGC_Collect();
/* Destroy all modules */
PyImport_Cleanup();
/* Collect final garbage. This disposes of cycles created by
new-style class definitions, for example. */
PyGC_Collect();
/* Destroy the database used by _PyImport_{Fixup,Find}Extension */
_PyImport_Fini();