diff --git a/plugins/corerouter/corerouter.c b/plugins/corerouter/corerouter.c index a7bdaf04..104e656d 100644 --- a/plugins/corerouter/corerouter.c +++ b/plugins/corerouter/corerouter.c @@ -833,9 +833,21 @@ void uwsgi_corerouter_loop(int id, void *data) { } } + // not having a hook could mean a previous event in the loop cleared it... if (!hook) { - uwsgi_log("[uwsgi-corerouter] BUG, unexpected event received !!!\n"); - corerouter_close_session(ucr, cr_session); + // a single event cannot be unexpected.. + if (nevents == 1) { + if (interesting_fd == cr_session->instance_fd) { + uwsgi_log("[uwsgi-corerouter] BUG, unexpected event received from backend instance (fd: %d nevents: %d) !!!\n", interesting_fd, nevents); + } + else if (interesting_fd == cr_session->fd) { + uwsgi_log("[uwsgi-corerouter] BUG, unexpected event received from client (fd: %d nevents: %d)!!!\n", interesting_fd, nevents); + } + else { + uwsgi_log("[uwsgi-corerouter] BUG, unexpected event received !!!\n"); + } + corerouter_close_session(ucr, cr_session); + } continue; } diff --git a/plugins/gevent/gevent.c b/plugins/gevent/gevent.c index d3fcd717..4a991589 100644 --- a/plugins/gevent/gevent.c +++ b/plugins/gevent/gevent.c @@ -330,6 +330,10 @@ void uwsgi_gevent_nb_write(struct wsgi_request *wsgi_req, PyObject *str) { PyObject *ret; char *content = PyString_AsString(str); size_t content_len = PyString_Size(str); + + // do not try to write empty chunks + if (content_len == 0) return; + /// create a watcher for writes PyObject *watcher = PyObject_CallMethod(ugevent.hub_loop, "io", "ii", wsgi_req->poll.fd, 2); if (!watcher) goto error; diff --git a/plugins/http/http.c b/plugins/http/http.c index 814e4835..d70c5488 100644 --- a/plugins/http/http.c +++ b/plugins/http/http.c @@ -526,10 +526,6 @@ ssize_t hr_read_ssl_body(struct corerouter_session * cs) { struct http_session *hs = (struct http_session *) cs; int ret = SSL_read(hs->ssl, hs->post_buf->buf, hs->post_buf_max); if (ret > 0) { - // fix waiting - if (cs->event_hook_write) { - uwsgi_cr_hook_write(cs, NULL); - } int ret2 = SSL_pending(hs->ssl); if (ret2 > 0) { if (uwsgi_buffer_fix(hs->post_buf, hs->post_buf->len + ret2 )) { @@ -615,9 +611,6 @@ ssize_t hr_write_ssl_response(struct corerouter_session * cs) { if (ret > 0) { cs->buffer_pos += ret; - if (cs->event_hook_read) { - uwsgi_cr_hook_read(cs, NULL); - } // could be a partial write uwsgi_cr_hook_write(cs, hr_write_ssl_response); // ok this response chunk is sent, let's wait for another one @@ -838,9 +831,6 @@ ssize_t hr_send_expect_continue(struct corerouter_session * cs) { if (ret > 0) { len = ret; cs->buffer_pos += ret; - if (cs->event_hook_read) { - uwsgi_cr_hook_read(cs, NULL); - } // could be a partial write uwsgi_cr_hook_write(cs, hr_send_expect_continue); goto done; @@ -939,11 +929,6 @@ ssize_t hr_recv_http_ssl(struct corerouter_session * cs) { struct http_session *hs = (struct http_session *) cs; int ret = SSL_read(hs->ssl, cs->buffer->buf + cs->buffer_pos, cs->buffer->len - cs->buffer_pos); if (ret > 0) { - // fix waiting - if (cs->event_hook_write) { - uwsgi_cr_hook_write(cs, NULL); - uwsgi_cr_hook_read(cs, hr_recv_http_ssl); - } int ret2 = SSL_pending(hs->ssl); if (ret2 > 0) { if (uwsgi_buffer_fix(cs->buffer, cs->buffer->len + ret2 )) {