Added basic port error handler.

This commit is contained in:
Max Romanov
2017-08-02 13:36:29 +03:00
parent f23f985899
commit b150f07e80
8 changed files with 81 additions and 40 deletions

View File

@@ -15,8 +15,32 @@ static void nxt_port_handler(nxt_task_t *task, nxt_port_recv_msg_t *msg);
static nxt_atomic_uint_t nxt_port_last_id = 1;
static void
nxt_port_mp_cleanup(nxt_task_t *task, void *obj, void *data)
{
nxt_mp_t *mp;
nxt_port_t *port;
port = obj;
mp = data;
nxt_assert(port->pair[0] == -1);
nxt_assert(port->pair[1] == -1);
nxt_assert(port->app_req_id == 0);
nxt_assert(port->app_link.next == NULL);
nxt_assert(nxt_queue_is_empty(&port->messages));
nxt_assert(nxt_lvlhsh_is_empty(&port->rpc_streams));
nxt_assert(nxt_lvlhsh_is_empty(&port->rpc_peers));
nxt_mp_free(mp, port);
}
nxt_port_t *
nxt_port_new(nxt_port_id_t id, nxt_pid_t pid, nxt_process_type_t type)
nxt_port_new(nxt_task_t *task, nxt_port_id_t id, nxt_pid_t pid,
nxt_process_type_t type)
{
nxt_mp_t *mp;
nxt_port_t *port;
@@ -36,6 +60,8 @@ nxt_port_new(nxt_port_id_t id, nxt_pid_t pid, nxt_process_type_t type)
port->mem_pool = mp;
port->next_stream = 1;
nxt_mp_cleanup(mp, nxt_port_mp_cleanup, task, port, mp);
nxt_queue_init(&port->messages);
} else {
@@ -74,7 +100,7 @@ nxt_port_release(nxt_port_t *port)
nxt_process_port_remove(port);
}
nxt_mp_release(port->mem_pool, port);
nxt_mp_release(port->mem_pool, NULL);
return 1;
}
@@ -222,7 +248,7 @@ nxt_port_new_port_handler(nxt_task_t *task, nxt_port_recv_msg_t *msg)
return;
}
port = nxt_port_new(new_port_msg->id, new_port_msg->pid,
port = nxt_port_new(task, new_port_msg->id, new_port_msg->pid,
new_port_msg->type);
if (nxt_slow_path(port == NULL)) {
return;