From: Antoine Pitrou Date: Tue, 10 Aug 2010 00:04:13 +0000 (+0000) Subject: Merged revisions 83921 via svnmerge from X-Git-Tag: v2.7.1rc1~425 X-Git-Url: https://granicus.if.org/sourcecode?a=commitdiff_plain;h=8cdede46128ea1b9c196c7aa6265d20e0a5f72ec;p=python Merged revisions 83921 via svnmerge from svn+ssh://pythondev@svn.python.org/python/branches/py3k ........ r83921 | antoine.pitrou | 2010-08-10 01:39:31 +0200 (mar., 10 août 2010) | 4 lines Issue #6915: Under Windows, os.listdir() didn't release the Global Interpreter Lock around all system calls. Original patch by Ryan Kelly. ........ --- diff --git a/Misc/ACKS b/Misc/ACKS index 23a5205fec..afc42efae4 100644 --- a/Misc/ACKS +++ b/Misc/ACKS @@ -409,6 +409,7 @@ Jacob Kaplan-Moss Lou Kates Hiroaki Kawai Sebastien Keim +Ryan Kelly Robert Kern Randall Kern Magnus Kessler diff --git a/Misc/NEWS b/Misc/NEWS index 768f5a4191..6bf21ac202 100644 --- a/Misc/NEWS +++ b/Misc/NEWS @@ -29,6 +29,9 @@ Core and Builtins Library ------- +- Issue #6915: Under Windows, os.listdir() didn't release the Global + Interpreter Lock around all system calls. Original patch by Ryan Kelly. + - Issue #3757: thread-local objects now support cyclic garbage collection. Thread-local objects involved in reference cycles will be deallocated timely by the cyclic GC, even if the underlying thread is still running. diff --git a/Modules/posixmodule.c b/Modules/posixmodule.c index d0d68c9e3a..5237f14661 100644 --- a/Modules/posixmodule.c +++ b/Modules/posixmodule.c @@ -2127,7 +2127,9 @@ posix_listdir(PyObject *self, PyObject *args) free(wnamebuf); return NULL; } + Py_BEGIN_ALLOW_THREADS hFindFile = FindFirstFileW(wnamebuf, &wFileData); + Py_END_ALLOW_THREADS if (hFindFile == INVALID_HANDLE_VALUE) { int error = GetLastError(); if (error == ERROR_FILE_NOT_FOUND) { @@ -2197,7 +2199,9 @@ posix_listdir(PyObject *self, PyObject *args) if ((d = PyList_New(0)) == NULL) return NULL; + Py_BEGIN_ALLOW_THREADS hFindFile = FindFirstFile(namebuf, &FileData); + Py_END_ALLOW_THREADS if (hFindFile == INVALID_HANDLE_VALUE) { int error = GetLastError(); if (error == ERROR_FILE_NOT_FOUND)