On Wed, Sep 6, 2017 at 3:53 AM, Stefan Behnel <stefan...@behnel.de> wrote: > Hi, > > consider this code: > > cdef np.ndarray[int32, ndim=1] a > a = new_int32_buffer() > a = new_float32_buffer() > > This fails during the second assignment, but only during validation, after > unpacking the buffer. The code that handles this case is generated here: > > https://github.com/cython/cython/blob/c95ca9f21a3524718a83c3415bb7102a508154be/Cython/Compiler/Buffer.py#L376 > > Note the twist where it says: > > # If acquisition failed, attempt to reacquire the old buffer > # before raising the exception. > > I faintly remember a discussion about that case (apparently back in 2008), > but can't find it in my mail archive. Might have been off-list at the time. > > Question: Instead of re-acquiring the buffer (and thus faking the > non-assignment), wouldn't it be better to acquire the new buffer in a temp, > and only overwrite the old "Py_buffer" if all is fine with it?
That makes a lot more sense to me, assuming overwriting is cheap enough. (Can an error happen in releasing the old value?) _______________________________________________ cython-devel mailing list cython-devel@python.org https://mail.python.org/mailman/listinfo/cython-devel