Skip to content

_PyTrash_begin and _PyTrash_end do not have implementation #128910

@sobolevn

Description

@sobolevn

We only have this left for _PyTrash_begin and _PyTrash_end:

~/Desktop/cpython2  main ✗                                                                
» ag _PyTrash_begin .
Misc/NEWS.d/3.9.0a5.rst
1217:PyThreadState attributes, but call new private _PyTrash_begin() and

Include/cpython/object.h
479:PyAPI_FUNC(int) _PyTrash_begin(PyThreadState *tstate, PyObject *op);
» ag _PyTrash_end .  
Misc/NEWS.d/3.9.0a5.rst
1218:_PyTrash_end() functions which hide implementation details.

Include/cpython/object.h
480:PyAPI_FUNC(void) _PyTrash_end(PyThreadState *tstate);                  

Source:

/* Python 3.9 private API, invoked by the macros below. */
PyAPI_FUNC(int) _PyTrash_begin(PyThreadState *tstate, PyObject *op);
PyAPI_FUNC(void) _PyTrash_end(PyThreadState *tstate);

They don't even have implementations. Looks like that they used to be called from Py_TRASHCAN_BEGIN and Py_TRASHCAN_END in 3.9:

PyAPI_FUNC(int) _PyTrash_begin(struct _ts *tstate, PyObject *op);
PyAPI_FUNC(void) _PyTrash_end(struct _ts *tstate);
#define PyTrash_UNWIND_LEVEL 50
#define Py_TRASHCAN_BEGIN_CONDITION(op, cond) \
do { \
PyThreadState *_tstate = NULL; \
/* If "cond" is false, then _tstate remains NULL and the deallocator \
* is run normally without involving the trashcan */ \
if (cond) { \
_tstate = PyThreadState_GET(); \
if (_PyTrash_begin(_tstate, _PyObject_CAST(op))) { \
break; \
} \
}
/* The body of the deallocator is here. */
#define Py_TRASHCAN_END \
if (_tstate) { \
_PyTrash_end(_tstate); \
} \
} while (0);
#define Py_TRASHCAN_BEGIN(op, dealloc) \
Py_TRASHCAN_BEGIN_CONDITION(op, \
Py_TYPE(op)->tp_dealloc == (destructor)(dealloc))

But, they are unused since #117763 in ~3.11

What should we do?

  1. Nothing
  2. Remove them
  3. Raise deprecation warning when they are called (but they return void, it would be hard to do)

CC @markshannon @vstinner

Linked PRs

Metadata

Metadata

Assignees

No one assigned

    Projects

    No projects

    Milestone

    No milestone

    Relationships

    None yet

    Development

    No branches or pull requests

    Issue actions