Resolving a racing condition while adding ports on the app's side.

An earlier attempt (ad6265786871) to resolve this condition on the
router's side added a new issue: the app could get a request before
acquiring a port.
This commit is contained in:
Max Romanov
2020-04-10 16:21:58 +03:00
parent c7f5c1c664
commit 58cc13ab29
5 changed files with 48 additions and 13 deletions

View File

@@ -4811,7 +4811,7 @@ nxt_router_app_prepare_request(nxt_task_t *task,
apr_action = NXT_APR_REQUEST_FAILED;
c_port = nxt_process_connected_port_find_add(port->process, reply_port);
c_port = nxt_process_connected_port_find(port->process, reply_port);
if (nxt_slow_path(c_port != reply_port)) {
res = nxt_port_send_port(task, port, reply_port, 0);
@@ -4820,10 +4820,10 @@ nxt_router_app_prepare_request(nxt_task_t *task,
nxt_request_app_link_error(task, port->app, req_app_link,
"Failed to send reply port to application");
nxt_process_connected_port_remove(port->process, reply_port);
goto release_port;
}
nxt_process_connected_port_add(port->process, reply_port);
}
buf = nxt_router_prepare_msg(task, req_app_link->request, port,