From 08b65721e25b1b94affc12078a623a11341525d1 Mon Sep 17 00:00:00 2001 From: Max Romanov Date: Thu, 12 Mar 2020 17:54:24 +0300 Subject: 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. --- src/nxt_router.c | 15 +++++++++++++++ 1 file changed, 15 insertions(+) (limited to 'src/nxt_router.c') 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; -- cgit