summaryrefslogtreecommitdiffhomepage
path: root/src/nxt_router.c
diff options
context:
space:
mode:
authorMax Romanov <max.romanov@nginx.com>2017-10-04 15:00:35 +0300
committerMax Romanov <max.romanov@nginx.com>2017-10-04 15:00:35 +0300
commit730f5a9dd9b3674246d06d18e05c8899e018ef5f (patch)
treec4769942a0510eb5f802e4c1845dceaca2d3588b /src/nxt_router.c
parenta4b5b5d45d26077ac822b25d5d26f58661c02dcf (diff)
downloadunit-730f5a9dd9b3674246d06d18e05c8899e018ef5f.tar.gz
unit-730f5a9dd9b3674246d06d18e05c8899e018ef5f.tar.bz2
Using request mem pool for req<->app link.
Request <-> application link structure (nxt_req_app_link_t) used to register the request in application request queue (nxt_app_t.requests) and generate application-specific port message. Now it is allocated from request pool. This pool created for request parsing and used to allocate and store information specific to this request.
Diffstat (limited to 'src/nxt_router.c')
-rw-r--r--src/nxt_router.c21
1 files changed, 19 insertions, 2 deletions
diff --git a/src/nxt_router.c b/src/nxt_router.c
index 63d11055..33b8d65e 100644
--- a/src/nxt_router.c
+++ b/src/nxt_router.c
@@ -31,6 +31,7 @@ typedef struct {
nxt_conn_t *conn;
nxt_app_t *app;
nxt_port_t *app_port;
+ nxt_app_parse_ctx_t *ap;
nxt_req_app_link_t *ra;
nxt_queue_link_t link; /* for nxt_conn_t.requests */
@@ -320,7 +321,7 @@ nxt_router_ra_create(nxt_task_t *task, nxt_req_conn_link_t *rc)
nxt_event_engine_t *engine;
nxt_req_app_link_t *ra;
- mp = rc->conn->mem_pool;
+ mp = rc->ap->mem_pool;
engine = task->thread->engine;
ra = nxt_mp_retain(mp, sizeof(nxt_req_app_link_t));
@@ -550,6 +551,12 @@ nxt_router_rc_unlink(nxt_task_t *task, nxt_req_conn_link_t *rc)
rc->app = NULL;
}
+ if (rc->ap != NULL) {
+ nxt_app_http_req_done(task, rc->ap);
+
+ rc->ap = NULL;
+ }
+
nxt_queue_remove(&rc->link);
rc->conn = NULL;
@@ -3127,7 +3134,7 @@ nxt_router_process_http_request(nxt_task_t *task, nxt_conn_t *c,
if (nxt_slow_path(rc == NULL)) {
nxt_router_gen_error(task, c, 500, "Failed to allocate "
- "req->conn link");
+ "req<->conn link");
return;
}
@@ -3140,8 +3147,18 @@ nxt_router_process_http_request(nxt_task_t *task, nxt_conn_t *c,
nxt_debug(task, "stream #%uD linked to conn %p at engine %p",
rc->stream, c, engine);
+ rc->ap = ap;
+ c->socket.data = NULL;
+
ra = nxt_router_ra_create(task, rc);
+ if (nxt_slow_path(ra == NULL)) {
+ nxt_router_gen_error(task, c, 500, "Failed to allocate "
+ "req<->app link");
+
+ return;
+ }
+
ra->ap = ap;
res = nxt_router_app_port(task, ra);