Bug #1500293: fix memory leaks in _subprocess module.
This commit is contained in:
parent
ddbaa660d3
commit
ad62489e47
|
@ -388,6 +388,7 @@ if mswindows:
|
|||
hStdInput = None
|
||||
hStdOutput = None
|
||||
hStdError = None
|
||||
wShowWindow = 0
|
||||
class pywintypes:
|
||||
error = IOError
|
||||
else:
|
||||
|
@ -744,18 +745,17 @@ class Popen(object):
|
|||
args = list2cmdline(args)
|
||||
|
||||
# Process startup details
|
||||
default_startupinfo = STARTUPINFO()
|
||||
if startupinfo is None:
|
||||
startupinfo = default_startupinfo
|
||||
if not None in (p2cread, c2pwrite, errwrite):
|
||||
startupinfo = STARTUPINFO()
|
||||
if None not in (p2cread, c2pwrite, errwrite):
|
||||
startupinfo.dwFlags |= STARTF_USESTDHANDLES
|
||||
startupinfo.hStdInput = p2cread
|
||||
startupinfo.hStdOutput = c2pwrite
|
||||
startupinfo.hStdError = errwrite
|
||||
|
||||
if shell:
|
||||
default_startupinfo.dwFlags |= STARTF_USESHOWWINDOW
|
||||
default_startupinfo.wShowWindow = SW_HIDE
|
||||
startupinfo.dwFlags |= STARTF_USESHOWWINDOW
|
||||
startupinfo.wShowWindow = SW_HIDE
|
||||
comspec = os.environ.get("COMSPEC", "cmd.exe")
|
||||
args = comspec + " /c " + args
|
||||
if (GetVersion() >= 0x80000000L or
|
||||
|
|
|
@ -250,19 +250,23 @@ static int
|
|||
getint(PyObject* obj, char* name)
|
||||
{
|
||||
PyObject* value;
|
||||
int ret;
|
||||
|
||||
value = PyObject_GetAttrString(obj, name);
|
||||
if (! value) {
|
||||
PyErr_Clear(); /* FIXME: propagate error? */
|
||||
return 0;
|
||||
}
|
||||
return (int) PyInt_AsLong(value);
|
||||
ret = (int) PyInt_AsLong(value);
|
||||
Py_DECREF(value);
|
||||
return ret;
|
||||
}
|
||||
|
||||
static HANDLE
|
||||
gethandle(PyObject* obj, char* name)
|
||||
{
|
||||
sp_handle_object* value;
|
||||
HANDLE ret;
|
||||
|
||||
value = (sp_handle_object*) PyObject_GetAttrString(obj, name);
|
||||
if (! value) {
|
||||
|
@ -270,8 +274,11 @@ gethandle(PyObject* obj, char* name)
|
|||
return NULL;
|
||||
}
|
||||
if (value->ob_type != &sp_handle_type)
|
||||
return NULL;
|
||||
return value->handle;
|
||||
ret = NULL;
|
||||
else
|
||||
ret = value->handle;
|
||||
Py_DECREF(value);
|
||||
return ret;
|
||||
}
|
||||
|
||||
static PyObject*
|
||||
|
|
Loading…
Reference in New Issue