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

@@ -590,6 +590,17 @@ nxt_process_close_ports(nxt_task_t *task, nxt_process_t *process)
}
void
nxt_process_connected_port_add(nxt_process_t *process, nxt_port_t *port)
{
nxt_thread_mutex_lock(&process->cp_mutex);
nxt_port_hash_add(&process->connected_ports, port);
nxt_thread_mutex_unlock(&process->cp_mutex);
}
void
nxt_process_connected_port_remove(nxt_process_t *process, nxt_port_t *port)
{
@@ -602,7 +613,7 @@ nxt_process_connected_port_remove(nxt_process_t *process, nxt_port_t *port)
nxt_port_t *
nxt_process_connected_port_find_add(nxt_process_t *process, nxt_port_t *port)
nxt_process_connected_port_find(nxt_process_t *process, nxt_port_t *port)
{
nxt_port_t *res;
@@ -610,10 +621,6 @@ nxt_process_connected_port_find_add(nxt_process_t *process, nxt_port_t *port)
res = nxt_port_hash_find(&process->connected_ports, port->pid, port->id);
if (nxt_slow_path(res == NULL)) {
nxt_port_hash_add(&process->connected_ports, port);
}
nxt_thread_mutex_unlock(&process->cp_mutex);
return res;