diff --git a/core/io.c b/core/io.c index 2728c924..5e187799 100644 --- a/core/io.c +++ b/core/io.c @@ -1085,3 +1085,10 @@ int uwsgi_is_again() { } return 0; } + +void uwsgi_disconnect(struct wsgi_request *wsgi_req) { + if (wsgi_req->socket) { + wsgi_req->socket->proto_close(wsgi_req); + } + wsgi_req->fd_closed = 1; +} diff --git a/plugins/pypy/pypy_setup.py b/plugins/pypy/pypy_setup.py index d3f99a98..57bedc96 100644 --- a/plugins/pypy/pypy_setup.py +++ b/plugins/pypy/pypy_setup.py @@ -210,6 +210,8 @@ struct uwsgi_buffer *uwsgi_websocket_recv_nb(struct wsgi_request *); char *uwsgi_chunked_read(struct wsgi_request *, size_t *, int, int); +void uwsgi_disconnect(struct wsgi_request *); + %s ''' % ('\n'.join(uwsgi_cdef), hooks) @@ -750,6 +752,11 @@ uwsgi.close(fd) """ uwsgi.close = lambda fd: lib.close(fd) +""" +uwsgi.disconnect() +""" +uwsgi.disconnect = lambda: lib.uwsgi_disconnect(uwsgi_pypy_current_wsgi_req()) + """ uwsgi.websocket_recv """ diff --git a/plugins/python/uwsgi_pymodule.c b/plugins/python/uwsgi_pymodule.c index 76231f1b..34ffdde3 100644 --- a/plugins/python/uwsgi_pymodule.c +++ b/plugins/python/uwsgi_pymodule.c @@ -2270,17 +2270,10 @@ PyObject *py_uwsgi_disconnect(PyObject * self, PyObject * args) { struct wsgi_request *wsgi_req = py_current_wsgi_req(); -#ifdef UWSGI_DEBUG - uwsgi_log("disconnecting worker %d (pid :%d) from session...\n", uwsgi.mywid, uwsgi.mypid); -#endif + uwsgi_disconnect(wsgi_req); - if (wsgi_req->socket) { - wsgi_req->socket->proto_close(wsgi_req); - } - wsgi_req->fd_closed = 1; - - Py_INCREF(Py_True); - return Py_True; + Py_INCREF(Py_None); + return Py_None; } PyObject *py_uwsgi_parse_file(PyObject * self, PyObject * args) { diff --git a/uwsgi.h b/uwsgi.h index 97779dcf..c7c8fad1 100644 --- a/uwsgi.h +++ b/uwsgi.h @@ -4068,6 +4068,7 @@ void uwsgi_takeover(void); char *uwsgi_binary_path(void); int uwsgi_is_again(); +void uwsgi_disconnect(struct wsgi_request *); void uwsgi_check_emperor(void); #ifdef UWSGI_AS_SHARED_LIBRARY