Dolda2000 GitWeb
/
ashd.git
/ commitdiff
commit
grep
author
committer
pickaxe
?
search:
re
summary
|
shortlog
|
log
|
commit
| commitdiff |
tree
raw
|
patch
|
inline
| side by side (parent:
4942dac
)
python: Release Python's interpreter lock in {send,recv}fd
author
Fredrik Tolf
<fredrik@dolda2000.com>
Thu, 21 Oct 2010 10:03:15 +0000
(12:03 +0200)
committer
Fredrik Tolf
<fredrik@dolda2000.com>
Thu, 21 Oct 2010 10:03:15 +0000
(12:03 +0200)
python/htp.c
patch
|
blob
|
blame
|
history
diff --git
a/python/htp.c
b/python/htp.c
index
0405809
..
e31528e
100644
(file)
--- a/
python/htp.c
+++ b/
python/htp.c
@@
-32,7
+32,10
@@
static PyObject *p_recvfd(PyObject *self, PyObject *args)
fd = 0;
if(!PyArg_ParseTuple(args, "|i", &fd))
return(NULL);
fd = 0;
if(!PyArg_ParseTuple(args, "|i", &fd))
return(NULL);
- if((ret = recvfd(fd, &data, &dlen)) < 0) {
+ Py_BEGIN_ALLOW_THREADS;
+ ret = recvfd(fd, &data, &dlen);
+ Py_END_ALLOW_THREADS;
+ if(ret < 0) {
if(errno == 0)
return(Py_BuildValue("OO", Py_None, Py_None));
PyErr_SetFromErrno(PyExc_OSError);
if(errno == 0)
return(Py_BuildValue("OO", Py_None, Py_None));
PyErr_SetFromErrno(PyExc_OSError);
@@
-45,7
+48,7
@@
static PyObject *p_recvfd(PyObject *self, PyObject *args)
static PyObject *p_sendfd(PyObject *self, PyObject *args)
{
static PyObject *p_sendfd(PyObject *self, PyObject *args)
{
- int sock, fd;
+ int sock, fd
, ret
;
PyObject *data;
if(!PyArg_ParseTuple(args, "iiO", &sock, &fd, &data))
PyObject *data;
if(!PyArg_ParseTuple(args, "iiO", &sock, &fd, &data))
@@
-54,7
+57,10
@@
static PyObject *p_sendfd(PyObject *self, PyObject *args)
PyErr_SetString(PyExc_TypeError, "datagram must be a string");
return(NULL);
}
PyErr_SetString(PyExc_TypeError, "datagram must be a string");
return(NULL);
}
- if(sendfd(sock, fd, PyString_AsString(data), PyString_Size(data)) < 0) {
+ Py_BEGIN_ALLOW_THREADS;
+ ret = sendfd(sock, fd, PyString_AsString(data), PyString_Size(data));
+ Py_END_ALLOW_THREADS;
+ if(ret < 0) {
PyErr_SetFromErrno(PyExc_OSError);
return(NULL);
}
PyErr_SetFromErrno(PyExc_OSError);
return(NULL);
}