Message180754
[From http://stackoverflow.com/questions/12648737/huge-memory-leak-in-repeated-os-path-isdir-calls]
os.path.isdir() leaks memory under Windows in Python 2.7. The core cause is this snippet:
Modules/posixmodule.c:4226:
if (!PyArg_ParseTuple(args, "et:_isdir",
Py_FileSystemDefaultEncoding, &path))
return NULL;
attributes = GetFileAttributesA(path);
if (attributes == INVALID_FILE_ATTRIBUTES)
Py_RETURN_FALSE;
check:
if (attributes & FILE_ATTRIBUTE_DIRECTORY)
Py_RETURN_TRUE;
else
Py_RETURN_FALSE;
The buffer returned by the "et" ParseTuple format must be freed after use. Since it isn't freed, we get a memory leak here.
Patch:
--- a/Modules/posixmodule.c Mon Apr 09 19:04:04 2012 -0400
+++ b/Modules/posixmodule.c Sun Jan 27 04:10:34 2013 -0500
@@ -4226,6 +4226,7 @@
return NULL;
attributes = GetFileAttributesA(path);
+ PyMem_Free(path);
if (attributes == INVALID_FILE_ATTRIBUTES)
Py_RETURN_FALSE; |
|
Date |
User |
Action |
Args |
2013-01-27 09:10:56 | nneonneo | set | recipients:
+ nneonneo |
2013-01-27 09:10:56 | nneonneo | set | messageid: <1359277856.16.0.886323650341.issue17051@psf.upfronthosting.co.za> |
2013-01-27 09:10:56 | nneonneo | link | issue17051 messages |
2013-01-27 09:10:55 | nneonneo | create | |
|