diff options
author | Max Romanov <max.romanov@nginx.com> | 2020-03-12 17:54:24 +0300 |
---|---|---|
committer | Max Romanov <max.romanov@nginx.com> | 2020-03-12 17:54:24 +0300 |
commit | 08b65721e25b1b94affc12078a623a11341525d1 (patch) | |
tree | f616c45376b01622c715169551135d6a6f89c92f | |
parent | 0b5aabfc3f6dafa00d4cd4da595bceeefd1a1d27 (diff) | |
download | unit-08b65721e25b1b94affc12078a623a11341525d1.tar.gz unit-08b65721e25b1b94affc12078a623a11341525d1.tar.bz2 |
Moving request memory pool retain call after RPC data allocation.
If the call is done only after a successful RPC data allocation, its
corresponding release call is not missed, which avoids a potential leak.
-rw-r--r-- | src/nxt_http_request.c | 10 | ||||
-rw-r--r-- | src/nxt_router.c | 15 |
2 files changed, 15 insertions, 10 deletions
diff --git a/src/nxt_http_request.c b/src/nxt_http_request.c index d610f65d..51553f0c 100644 --- a/src/nxt_http_request.c +++ b/src/nxt_http_request.c @@ -326,18 +326,8 @@ nxt_http_action_t * nxt_http_application_handler(nxt_task_t *task, nxt_http_request_t *r, nxt_http_action_t *action) { - nxt_event_engine_t *engine; - nxt_debug(task, "http application handler"); - nxt_mp_retain(r->mem_pool); - - engine = task->thread->engine; - r->timer.task = &engine->task; - r->timer.work_queue = &engine->fast_work_queue; - r->timer.log = engine->task.log; - r->timer.bias = NXT_TIMER_DEFAULT_BIAS; - /* * TODO: need an application flag to get local address * required by "SERVER_ADDR" in Pyhton and PHP. Not used in Go. diff --git a/src/nxt_router.c b/src/nxt_router.c index d77ffa2b..9138a9a3 100644 --- a/src/nxt_router.c +++ b/src/nxt_router.c @@ -4705,6 +4705,21 @@ nxt_router_process_http_request(nxt_task_t *task, nxt_http_request_t *r, return; } + /* + * At this point we have request req_rpc_data allocated and registered + * in port handlers. Need to fixup request memory pool. Counterpart + * release will be called via following call chain: + * nxt_request_rpc_data_unlink() -> + * nxt_router_http_request_done() -> + * nxt_router_http_request_release() + */ + nxt_mp_retain(r->mem_pool); + + r->timer.task = &engine->task; + r->timer.work_queue = &engine->fast_work_queue; + r->timer.log = engine->task.log; + r->timer.bias = NXT_TIMER_DEFAULT_BIAS; + req_rpc_data->stream = nxt_port_rpc_ex_stream(req_rpc_data); req_rpc_data->app = app; |