diff options
author | Boxiang Sun <daetalusun@gmail.com> | 2018-09-18 03:44:03 +0800 |
---|---|---|
committer | Boxiang Sun <daetalusun@gmail.com> | 2018-09-19 11:34:01 +0000 |
commit | b8201a3ad2e778ed58cb285369055dc4d0d450bd (patch) | |
tree | 012f15a8bca9a005cbe8792a607d9977ca60fb77 /sources/shiboken2/libshiboken/shibokenbuffer.cpp | |
parent | 42ea879a64a8c6fceadc358da322d1cd8d18e9db (diff) |
Release Py_buffer after gets its underlying pointer
PyObject_GetBuffer will increment the reference of Py_buffer, when the
buffer is no longer being used, we should call PyBuffer_Release to
reduce the reference count.
See https://docs.python.org/3/c-api/buffer.html#c.PyBuffer_Release
Task-number: PYSIDE-140
Change-Id: Ia7c231aff317252db83b2405237031fc73af2651
Reviewed-by: Friedemann Kleint <Friedemann.Kleint@qt.io>
Reviewed-by: Christian Tismer <tismer@stackless.com>
Diffstat (limited to 'sources/shiboken2/libshiboken/shibokenbuffer.cpp')
-rw-r--r-- | sources/shiboken2/libshiboken/shibokenbuffer.cpp | 9 |
1 files changed, 4 insertions, 5 deletions
diff --git a/sources/shiboken2/libshiboken/shibokenbuffer.cpp b/sources/shiboken2/libshiboken/shibokenbuffer.cpp index 05b68dade..dc29b40a7 100644 --- a/sources/shiboken2/libshiboken/shibokenbuffer.cpp +++ b/sources/shiboken2/libshiboken/shibokenbuffer.cpp @@ -48,26 +48,25 @@ bool Shiboken::Buffer::checkType(PyObject* pyObj) void* Shiboken::Buffer::getPointer(PyObject* pyObj, Py_ssize_t* size) { - + const void* buffer = 0; #ifdef IS_PY3K Py_buffer view; if (PyObject_GetBuffer(pyObj, &view, PyBUF_ND) == 0) { if (size) *size = view.len; + buffer = view.buf; + PyBuffer_Release(&view); return view.buf; - } else { - return 0; } #else - const void* buffer = 0; Py_ssize_t bufferSize = 0; PyObject_AsReadBuffer(pyObj, &buffer, &bufferSize); if (size) *size = bufferSize; - return const_cast<void*>(buffer); #endif + return const_cast<void*>(buffer); } PyObject* Shiboken::Buffer::newObject(void* memory, Py_ssize_t size, Type type) |