Issue #16628: Fix a memory leak in ctypes.resize().
This commit is contained in:
parent
ed636a84b9
commit
305e1a749f
|
@ -175,6 +175,8 @@ Core and Builtins
|
||||||
Library
|
Library
|
||||||
-------
|
-------
|
||||||
|
|
||||||
|
- Issue #16628: Fix a memory leak in ctypes.resize().
|
||||||
|
|
||||||
- Issue #13120: Allow to call pdb.set_trace() from thread.
|
- Issue #13120: Allow to call pdb.set_trace() from thread.
|
||||||
Patch by Ilya Sandler.
|
Patch by Ilya Sandler.
|
||||||
|
|
||||||
|
|
|
@ -2442,7 +2442,7 @@ PyCData_clear(CDataObject *self)
|
||||||
assert(dict); /* Cannot be NULL for CDataObject instances */
|
assert(dict); /* Cannot be NULL for CDataObject instances */
|
||||||
Py_CLEAR(self->b_objects);
|
Py_CLEAR(self->b_objects);
|
||||||
if ((self->b_needsfree)
|
if ((self->b_needsfree)
|
||||||
&& ((size_t)dict->size > sizeof(self->b_value)))
|
&& _CDataObject_HasExternalBuffer(self))
|
||||||
PyMem_Free(self->b_ptr);
|
PyMem_Free(self->b_ptr);
|
||||||
self->b_ptr = NULL;
|
self->b_ptr = NULL;
|
||||||
Py_CLEAR(self->b_base);
|
Py_CLEAR(self->b_base);
|
||||||
|
|
|
@ -1666,7 +1666,7 @@ resize(PyObject *self, PyObject *args)
|
||||||
obj->b_size = size;
|
obj->b_size = size;
|
||||||
goto done;
|
goto done;
|
||||||
}
|
}
|
||||||
if (obj->b_size <= sizeof(obj->b_value)) {
|
if (!_CDataObject_HasExternalBuffer(obj)) {
|
||||||
/* We are currently using the objects default buffer, but it
|
/* We are currently using the objects default buffer, but it
|
||||||
isn't large enough any more. */
|
isn't large enough any more. */
|
||||||
void *ptr = PyMem_Malloc(size);
|
void *ptr = PyMem_Malloc(size);
|
||||||
|
|
|
@ -116,6 +116,7 @@ extern int PyObject_stginfo(PyObject *self, Py_ssize_t *psize, Py_ssize_t *palig
|
||||||
extern PyTypeObject PyCData_Type;
|
extern PyTypeObject PyCData_Type;
|
||||||
#define CDataObject_CheckExact(v) ((v)->ob_type == &PyCData_Type)
|
#define CDataObject_CheckExact(v) ((v)->ob_type == &PyCData_Type)
|
||||||
#define CDataObject_Check(v) PyObject_TypeCheck(v, &PyCData_Type)
|
#define CDataObject_Check(v) PyObject_TypeCheck(v, &PyCData_Type)
|
||||||
|
#define _CDataObject_HasExternalBuffer(v) ((v)->b_ptr != (char *)&(v)->b_value)
|
||||||
|
|
||||||
extern PyTypeObject PyCSimpleType_Type;
|
extern PyTypeObject PyCSimpleType_Type;
|
||||||
#define PyCSimpleTypeObject_CheckExact(v) ((v)->ob_type == &PyCSimpleType_Type)
|
#define PyCSimpleTypeObject_CheckExact(v) ((v)->ob_type == &PyCSimpleType_Type)
|
||||||
|
|
Loading…
Reference in New Issue