[Python-Dev] Omit Py_buffer struct from Stable ABI for Python 3.2?

Nick Coghlan ncoghlan at gmail.com
Wed Jan 5 17:07:37 CET 2011


On Thu, Jan 6, 2011 at 12:03 AM, Mark Dickinson <dickinsm at gmail.com> wrote:
> Maybe I'm misunderstanding.  What's the responsibility of a buffer
> export w.r.t. the obj field---i.e., what should 3rd party code be
> filling that obj field with in a call to getbuffer?

It should be a pointer to the object (with the reference count
incremented appropriately).

GetBuffer/ReleaseBuffer should actually manage it automatically, but
I'd have to look at the code to make sure that is the case (and, if it
isn't, there may be backwards compatibility implications in fixing
it).

> It looks to me as though it's really the memoryview object that needs
> this information;  that it doesn't belong in the Py_buffer struct.
> Isn't that what the 'base' field in PyMemoryViewObject in PEP 3118 was
> supposed to be for?  Though I notice that that field is unused in the
> actual PyMemoryViewObject in Include/memoryobject.h.

If nothing else, PyObject_ReleaseBuffer needs it - otherwise the
function signature would need to include a separate argument to tell
it who the buffer belongs to (so it can find the appropriate function
pointer to call).

The implementation makes sense (since every call to GetBuffer needs to
be paired with a corresponding call to ReleaseBuffer, it makes sense
to keep the object reference inside the Py_buffer struct), but the
fact the documentation was never corrected suggests there are going to
be plenty of broken implementations of the protocol kicking around,
potentially even in the standard library.

Cheers,
Nick.

-- 
Nick Coghlan   |   ncoghlan at gmail.com   |   Brisbane, Australia


More information about the Python-Dev mailing list