summaryrefslogtreecommitdiffstats
path: root/PC/msvcrtmodule.c
diff options
context:
space:
mode:
authorGuido van Rossum <guido@python.org>1998-05-29 01:27:07 (GMT)
committerGuido van Rossum <guido@python.org>1998-05-29 01:27:07 (GMT)
commite4e021bf2182855910f3a6bb8e24e624ec6e92be (patch)
treeb7a1631981a9dd067ad5ef4a80891d1e5c108b21 /PC/msvcrtmodule.c
parent00d93066b010805c53f457e095294babd5e8793a (diff)
downloadcpython-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/msvcrtmodule.c')
-rwxr-xr-xPC/msvcrtmodule.c12
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);
}