Stefan Behnel wrote:
> Hi,
> 
> the buffer API changed in Py3b3, without updating the PEP. The reasoning
> behind the changes were discussed in full length here:
> 
> http://bugs.python.org/issue3139
> 
> Here's an incomplete patch that updates the struct, but that's definitely not
> enough, so I hope that Dag finds some time to fix things up.

Yes, I do; consider this assigned to me. Some issues needs discussion 
though:

1) I didn't find an answer to: It is still assumed that the caller holds 
a reference to the object that was the source of the buffer for the 
lifetime of it? I've made this assumption for now (as Cython always does 
it anyway). This didn't seem clear from the discussion. But at least 
there are checks for info.obj being NULL so it seems to be optional, 
i.e. if releasebuffer is not needed one does not need to set it?

2) How do we let people write their own __getbuffer__? I.e. one should 
be able to fill in info.obj to an object (and perhaps NULL), but still 
incref/decref it in a friendly Cython fashion.

I think one should type info.obj as "object" and insert code 
automatically at the beginning of __getbuffer__ to initialize it 
(without a decref to invalid memory).

If the answer to 1) is "it should always hold a reference to something", 
just assigning None and then let the function assign something else is 
enough.

But if the answer to 1) is that it can be NULL, we need to be more 
creative. Two options:

a) Type it to some kind of "object-which-can-be-NULL" (not sure if we 
have that, one would perhaps need to add that type), so that it gets 
Py_XDECREF-ed on assignment and can be assigned NULL explicitly (and 
initialize it to NULL).

b) Insert code when exiting __getbuffer__ and __releasebuffer__ which 
converts None to NULL in the info.obj field.

-- 
Dag Sverre
_______________________________________________
Cython-dev mailing list
[email protected]
http://codespeak.net/mailman/listinfo/cython-dev

Reply via email to