-
-
Notifications
You must be signed in to change notification settings - Fork 33.2k
Closed
Labels
Description
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:
cpython/Include/cpython/object.h
Lines 478 to 481 in 313b96e
| /* 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:
cpython/Include/cpython/object.h
Lines 520 to 545 in 340a82d
| 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?
- Nothing
- Remove them
- Raise deprecation warning when they are called (but they return
void, it would be hard to do)