Commit 037077fe authored by Antoine Pitrou's avatar Antoine Pitrou

Merged revisions 84489 via svnmerge from

svn+ssh://pythondev@svn.python.org/python/branches/py3k

........
  r84489 | antoine.pitrou | 2010-09-04 19:21:57 +0200 (sam., 04 sept. 2010) | 4 lines

  Issue #7736: Release the GIL around calls to opendir() and closedir()
  in the posix module.  Patch by Marcin Bachry.
........
parent 8f94754d
...@@ -474,6 +474,9 @@ Library ...@@ -474,6 +474,9 @@ Library
Extension Modules Extension Modules
----------------- -----------------
- Issue #7736: Release the GIL around calls to opendir() and closedir()
in the posix module. Patch by Marcin Bachry.
- Issue #4835: make PyLong_FromSocket_t() and PyLong_AsSocket_t() private - Issue #4835: make PyLong_FromSocket_t() and PyLong_AsSocket_t() private
to the socket module, and fix the width of socket descriptors to be to the socket module, and fix the width of socket descriptors to be
correctly detected under 64-bit Windows. correctly detected under 64-bit Windows.
......
...@@ -2493,11 +2493,16 @@ posix_listdir(PyObject *self, PyObject *args) ...@@ -2493,11 +2493,16 @@ posix_listdir(PyObject *self, PyObject *args)
if (!PyArg_ParseTuple(args, "O&:listdir", PyUnicode_FSConverter, &oname)) if (!PyArg_ParseTuple(args, "O&:listdir", PyUnicode_FSConverter, &oname))
return NULL; return NULL;
name = bytes2str(oname, 1); name = bytes2str(oname, 1);
if ((dirp = opendir(name)) == NULL) { Py_BEGIN_ALLOW_THREADS
dirp = opendir(name);
Py_END_ALLOW_THREADS
if (dirp == NULL) {
return posix_error_with_allocated_filename(oname); return posix_error_with_allocated_filename(oname);
} }
if ((d = PyList_New(0)) == NULL) { if ((d = PyList_New(0)) == NULL) {
Py_BEGIN_ALLOW_THREADS
closedir(dirp); closedir(dirp);
Py_END_ALLOW_THREADS
release_bytes(oname); release_bytes(oname);
return NULL; return NULL;
} }
...@@ -2510,7 +2515,9 @@ posix_listdir(PyObject *self, PyObject *args) ...@@ -2510,7 +2515,9 @@ posix_listdir(PyObject *self, PyObject *args)
if (errno == 0) { if (errno == 0) {
break; break;
} else { } else {
Py_BEGIN_ALLOW_THREADS
closedir(dirp); closedir(dirp);
Py_END_ALLOW_THREADS
Py_DECREF(d); Py_DECREF(d);
return posix_error_with_allocated_filename(oname); return posix_error_with_allocated_filename(oname);
} }
...@@ -2550,7 +2557,9 @@ posix_listdir(PyObject *self, PyObject *args) ...@@ -2550,7 +2557,9 @@ posix_listdir(PyObject *self, PyObject *args)
} }
Py_DECREF(v); Py_DECREF(v);
} }
Py_BEGIN_ALLOW_THREADS
closedir(dirp); closedir(dirp);
Py_END_ALLOW_THREADS
release_bytes(oname); release_bytes(oname);
return d; return d;
......
Markdown is supported
0%
or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment