mirror of
https://github.com/python/cpython.git
synced 2025-12-23 09:19:18 +00:00
gh-102013: Add PyUnstable_GC_VisitObjects (#102014)
This commit is contained in:
parent
457e4d1a51
commit
cbd3fbfb6e
5 changed files with 146 additions and 0 deletions
|
|
@ -157,6 +157,25 @@ PyAPI_FUNC(int) PyGC_Enable(void);
|
|||
PyAPI_FUNC(int) PyGC_Disable(void);
|
||||
PyAPI_FUNC(int) PyGC_IsEnabled(void);
|
||||
|
||||
|
||||
#if !defined(Py_LIMITED_API)
|
||||
/* Visit all live GC-capable objects, similar to gc.get_objects(None). The
|
||||
* supplied callback is called on every such object with the void* arg set
|
||||
* to the supplied arg. Returning 0 from the callback ends iteration, returning
|
||||
* 1 allows iteration to continue. Returning any other value may result in
|
||||
* undefined behaviour.
|
||||
*
|
||||
* If new objects are (de)allocated by the callback it is undefined if they
|
||||
* will be visited.
|
||||
|
||||
* Garbage collection is disabled during operation. Explicitly running a
|
||||
* collection in the callback may lead to undefined behaviour e.g. visiting the
|
||||
* same objects multiple times or not at all.
|
||||
*/
|
||||
typedef int (*gcvisitobjects_t)(PyObject*, void*);
|
||||
PyAPI_FUNC(void) PyUnstable_GC_VisitObjects(gcvisitobjects_t callback, void* arg);
|
||||
#endif
|
||||
|
||||
/* Test if a type has a GC head */
|
||||
#define PyType_IS_GC(t) PyType_HasFeature((t), Py_TPFLAGS_HAVE_GC)
|
||||
|
||||
|
|
|
|||
Loading…
Add table
Add a link
Reference in a new issue