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.
This commit is contained in:
Max Romanov
2017-10-04 15:00:35 +03:00
parent a4b5b5d45d
commit 730f5a9dd9
2 changed files with 20 additions and 3 deletions

View File

@@ -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);