From 5c64839734fe0f9c6def4f01f432c3aeee65b2e6 Mon Sep 17 00:00:00 2001 From: Roberto De Ioris Date: Fri, 9 Nov 2012 20:18:43 +0100 Subject: [PATCH] even the router_uwsgi plugin can offload --- plugins/router_uwsgi/router_uwsgi.c | 17 +++++++++++++++++ 1 file changed, 17 insertions(+) diff --git a/plugins/router_uwsgi/router_uwsgi.c b/plugins/router_uwsgi/router_uwsgi.c index ed566020..9f4755fc 100644 --- a/plugins/router_uwsgi/router_uwsgi.c +++ b/plugins/router_uwsgi/router_uwsgi.c @@ -44,6 +44,23 @@ int uwsgi_routing_func_uwsgi_remote(struct wsgi_request *wsgi_req, struct uwsgi_ uwsgi_req_append(wsgi_req, "UWSGI_APPID", 11, ur->data2, ur->data2_len); } + // ok now if have offload threads, directly use them + if (wsgi_req->socket->can_offload) { + struct uwsgi_buffer *ub = uwsgi_buffer_new(4 + wsgi_req->uh.pktsize); + if (ub) { + uh->pktsize = wsgi_req->uh.pktsize; + if (uwsgi_buffer_append(ub, (char *) uh, 4)) goto bad; + if (uwsgi_buffer_append(ub, wsgi_req->buffer, uh->pktsize)) goto bad; + if (!uwsgi_offload_request_net_do(wsgi_req, addr, ub)) { + wsgi_req->status = -30; + return UWSGI_ROUTE_BREAK; + } +bad: + uwsgi_buffer_destroy(ub); + } + } + + int uwsgi_fd = uwsgi_connect(addr, uwsgi.shared->options[UWSGI_OPTION_SOCKET_TIMEOUT], 0); if (uwsgi_fd < 0) { uwsgi_log("unable to connect to host %s\n", addr);