Appears to be the simplest solution to prevent resizing internal objects.
See also
8e76c71.
return vec;
} else if (PyLong_AsLong(size) > 0) {
// short read, return a shorter array
return vec;
} else if (PyLong_AsLong(size) > 0) {
// short read, return a shorter array
- PyArrayObject *shortread = (PyArrayObject*)PyTuple_GetItem(done, 0);
+ PyObject *vec = PyTuple_GetItem(done, 0);
+ // take a copy to prevent resizing internal arrays
+ PyArrayObject *shortread = PyArray_FROM_OTF(vec, NPY_NOTYPE,
+ NPY_ARRAY_ENSURECOPY);
PyArray_Dims newdims;
PyObject *reshaped;
newdims.len = PyArray_NDIM(shortread);
PyArray_Dims newdims;
PyObject *reshaped;
newdims.len = PyArray_NDIM(shortread);
}
reshaped = PyArray_Newshape(shortread, &newdims, NPY_CORDER);
Py_DECREF(shortread);
}
reshaped = PyArray_Newshape(shortread, &newdims, NPY_CORDER);
Py_DECREF(shortread);
return reshaped;
} else {
PyErr_SetNone(PyExc_StopIteration);
return reshaped;
} else {
PyErr_SetNone(PyExc_StopIteration);