]> granicus.if.org Git - python/commitdiff
Release the interpreter lock for calls that may block: _locking(),
authorGuido van Rossum <guido@python.org>
Fri, 29 May 1998 01:27:07 +0000 (01:27 +0000)
committerGuido van Rossum <guido@python.org>
Fri, 29 May 1998 01:27:07 +0000 (01:27 +0000)
_getch(), _getche().

Fix bogus error return when open_osfhandle() doesn't have the right
argument list.

PC/msvcrtmodule.c

index 3c19ce77678362e5a68bc5fa325025d265191ac4..fd46c0f3c26c40083d71071f5ea2101fb3d56328 100755 (executable)
@@ -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);
 }