mirror of
https://github.com/python/cpython.git
synced 2025-10-25 07:48:51 +00:00
Back out "Patch #1643874: memory leak in ctypes fixed."
The code in this patch leaves no way to give up the ownership of a BSTR instance.
This commit is contained in:
parent
4d891193d1
commit
02b8feea9f
2 changed files with 8 additions and 23 deletions
|
|
@ -287,8 +287,6 @@ Library
|
|||
|
||||
- Bug #1643943: Fix %U handling for time.strptime.
|
||||
|
||||
- Patch #1643874: memory leak in ctypes fixed.
|
||||
|
||||
- Bug #1598181: Avoid O(N**2) bottleneck in subprocess communicate().
|
||||
|
||||
- Patch #1627441: close sockets properly in urllib2.
|
||||
|
|
|
|||
|
|
@ -1424,19 +1424,10 @@ Z_get(void *ptr, unsigned size)
|
|||
#endif
|
||||
|
||||
#ifdef MS_WIN32
|
||||
/* We cannot use SysFreeString as the PyCObject_FromVoidPtr
|
||||
because of different calling convention
|
||||
*/
|
||||
static void _my_SysFreeString(void *p)
|
||||
{
|
||||
SysFreeString((BSTR)p);
|
||||
}
|
||||
|
||||
static PyObject *
|
||||
BSTR_set(void *ptr, PyObject *value, unsigned size)
|
||||
{
|
||||
BSTR bstr;
|
||||
PyObject *result;
|
||||
|
||||
/* convert value into a PyUnicodeObject or NULL */
|
||||
if (Py_None == value) {
|
||||
|
|
@ -1464,19 +1455,15 @@ BSTR_set(void *ptr, PyObject *value, unsigned size)
|
|||
} else
|
||||
bstr = NULL;
|
||||
|
||||
if (bstr) {
|
||||
result = PyCObject_FromVoidPtr((void *)bstr, _my_SysFreeString);
|
||||
if (result == NULL) {
|
||||
SysFreeString(bstr);
|
||||
return NULL;
|
||||
}
|
||||
} else {
|
||||
result = Py_None;
|
||||
Py_INCREF(result);
|
||||
}
|
||||
|
||||
/* free the previous contents, if any */
|
||||
if (*(BSTR *)ptr)
|
||||
SysFreeString(*(BSTR *)ptr);
|
||||
|
||||
/* and store it */
|
||||
*(BSTR *)ptr = bstr;
|
||||
return result;
|
||||
|
||||
/* We don't need to keep any other object */
|
||||
_RET(value);
|
||||
}
|
||||
|
||||
|
||||
|
|
|
|||
Loading…
Add table
Add a link
Reference in a new issue