diff options
author | Guido van Rossum <guido@python.org> | 1998-05-29 01:27:07 (GMT) |
---|---|---|
committer | Guido van Rossum <guido@python.org> | 1998-05-29 01:27:07 (GMT) |
commit | e4e021bf2182855910f3a6bb8e24e624ec6e92be (patch) | |
tree | b7a1631981a9dd067ad5ef4a80891d1e5c108b21 /PC | |
parent | 00d93066b010805c53f457e095294babd5e8793a (diff) | |
download | cpython-e4e021bf2182855910f3a6bb8e24e624ec6e92be.zip cpython-e4e021bf2182855910f3a6bb8e24e624ec6e92be.tar.gz cpython-e4e021bf2182855910f3a6bb8e24e624ec6e92be.tar.bz2 |
Release the interpreter lock for calls that may block: _locking(),
_getch(), _getche().
Fix bogus error return when open_osfhandle() doesn't have the right
argument list.
Diffstat (limited to 'PC')
-rwxr-xr-x | PC/msvcrtmodule.c | 12 |
1 files changed, 10 insertions, 2 deletions
diff --git a/PC/msvcrtmodule.c b/PC/msvcrtmodule.c index 3c19ce7..fd46c0f 100755 --- a/PC/msvcrtmodule.c +++ b/PC/msvcrtmodule.c @@ -39,11 +39,15 @@ static PyObject *msvcrt_locking(PyObject *self, PyObject *args) int fd; int mode; long nbytes; + int err; if (!PyArg_ParseTuple(args, "iil:locking", &fd, &mode, &nbytes)) return NULL; - if (_locking(fd, mode, nbytes) != 0) + Py_BEGIN_ALLOW_THREADS + err = _locking(fd, mode, nbytes); + Py_END_ALLOW_THREADS + if (err != 0) return PyErr_SetFromErrno(PyExc_IOError); Py_INCREF(Py_None); @@ -73,7 +77,7 @@ static PyObject *msvcrt_open_osfhandle(PyObject *self, PyObject *args) int fd; if (!PyArg_ParseTuple(args, "li:open_osfhandle", &handle, &flags)) - return PyErr_SetFromErrno(PyExc_IOError); + return NULL; fd = _open_osfhandle(handle, flags); if (fd == -1) @@ -120,7 +124,9 @@ static PyObject *msvcrt_getch(PyObject *self, PyObject *args) if (!PyArg_ParseTuple(args, ":getch")) return NULL; + Py_BEGIN_ALLOW_THREADS ch = _getch(); + Py_END_ALLOW_THREADS s[0] = ch; return PyString_FromStringAndSize(s, 1); } @@ -133,7 +139,9 @@ static PyObject *msvcrt_getche(PyObject *self, PyObject *args) if (!PyArg_ParseTuple(args, ":getche")) return NULL; + Py_BEGIN_ALLOW_THREADS ch = _getche(); + Py_END_ALLOW_THREADS s[0] = ch; return PyString_FromStringAndSize(s, 1); } |