This issue tracker has been migrated to GitHub, and is currently read-only.
For more information, see the GitHub FAQs in the Python's Developer Guide.

Author vstinner
Recipients nascheme, pablogsal, vstinner
Date 2021-08-11.09:42:32
SpamBayes Score -1.0
Marked as misclassified Yes
Message-id <1628674952.54.0.987559316799.issue44881@roundup.psfhosted.org>
In-reply-to
Content
Moreover, before making any change, I would suggest by starting with documenting the existing trashcan C API. Right now, there is no documentation in Doc/c-api/. Documentation can be copied from Include/cpython/object.h.

Last year, I modified the trashcan API to hide implementation details. There were also issues with the stable ABI... thing which is unclear to me, since the trashcan C API is excluded from the limited C API. Well, I excluded it. Previously, it was part of it, but it did not work with the limited C API.

commit 0fa4f43db086ac3459811cca4ec5201ffbee694a
Author: Victor Stinner <vstinner@python.org>
Date:   Wed Feb 5 12:23:27 2020 +0100

    bpo-39542: Exclude trashcan from the limited C API (GH-18362)
    
    Exclude trashcan mechanism from the limited C API: it requires access to
    PyTypeObject and PyThreadState structure fields, whereas these structures
    are opaque in the limited C API.
    
    The trashcan mechanism never worked with the limited C API. Move it
    from object.h to cpython/object.h.

commit 38965ec5411da60d312b59be281f3510d58e0cf1
Author: Victor Stinner <vstinner@python.org>
Date:   Fri Mar 13 16:51:52 2020 +0100

    bpo-39947: Hide implementation detail of trashcan macros (GH-18971)
    
    Py_TRASHCAN_BEGIN_CONDITION and Py_TRASHCAN_END macro no longer
    access PyThreadState attributes, but call new private
    _PyTrash_begin() and _PyTrash_end() functions which hide
    implementation details.

commit db532a09990c837ec1348e6e6bd2719f5d4a8216
Author: Victor Stinner <vstinner@python.org>
Date:   Wed Jun 23 15:51:47 2021 +0200

    bpo-39947: Remove old private trashcan C API functions (GH-26869)
    
    Remove 4 C API private trashcan functions which were only kept for
    the backward compatibility of the stable ABI with Python 3.8 and
    older, since the trashcan API was not usable with the limited C API
    on Python 3.8 and older. The trashcan API was excluded from the
    limited C API in Python 3.9.
    
    Removed functions:
    
    * _PyTrash_deposit_object()
    * _PyTrash_destroy_chain()
    * _PyTrash_thread_deposit_object()
    * _PyTrash_thread_destroy_chain()
    
    The trashcan C API was never usable with the limited C API, since old
    trashcan macros accessed directly PyThreadState members like
    "_tstate->trash_delete_nesting", whereas the PyThreadState structure
    is opaque in the limited C API.
    
    Exclude also the PyTrash_UNWIND_LEVEL constant from the C API.
    
    The trashcan C API was modified in Python 3.9 by commit
    38965ec5411da60d312b59be281f3510d58e0cf1 and in Python 3.10 by commit
    ed1a5a5baca8f61e9a99c5be3adc16b1801514fe to hide implementation
    details.
History
Date User Action Args
2021-08-11 09:42:32vstinnersetrecipients: + vstinner, nascheme, pablogsal
2021-08-11 09:42:32vstinnersetmessageid: <1628674952.54.0.987559316799.issue44881@roundup.psfhosted.org>
2021-08-11 09:42:32vstinnerlinkissue44881 messages
2021-08-11 09:42:32vstinnercreate