65,71d64 < typedef struct { < nxt_mp_t *mem_pool; < nxt_port_recv_msg_t msg; < nxt_work_t work; < } nxt_remove_pid_msg_t; < < 77,81d69 < static void nxt_router_worker_remove_pid_handler(nxt_task_t *task, void *obj, < void *data); < static void nxt_router_worker_remove_pid_done(nxt_task_t *task, void *obj, < void *data); < 575c563,565 < if (msg->new_port == NULL || msg->new_port->type != NXT_PROCESS_WORKER) { --- > if (msg->u.new_port == NULL || > msg->u.new_port->type != NXT_PROCESS_WORKER) > { 623a614,627 > static void > nxt_router_worker_remove_pid(nxt_task_t *task, nxt_port_t *port, void *data) > { > union { > nxt_pid_t removed_pid; > void *data; > } u; > > u.data = data; > > nxt_port_rpc_remove_peer(task, port, u.removed_pid); > } > > 627,630c631 < nxt_mp_t *mp; < nxt_buf_t *buf; < nxt_event_engine_t *engine; < nxt_remove_pid_msg_t *rp; --- > nxt_event_engine_t *engine; 638,643d638 < mp = nxt_mp_create(1024, 128, 256, 32); < < buf = nxt_buf_mem_alloc(mp, nxt_buf_used_size(msg->buf), 0); < buf->mem.free = nxt_cpymem(buf->mem.free, msg->buf->mem.pos, < nxt_buf_used_size(msg->buf)); < 646,663c641,642 < rp = nxt_mp_retain(mp, sizeof(nxt_remove_pid_msg_t)); < < rp->mem_pool = mp; < < rp->msg.fd = msg->fd; < rp->msg.buf = buf; < rp->msg.port = engine->port; < rp->msg.port_msg = msg->port_msg; < rp->msg.size = msg->size; < rp->msg.new_port = NULL; < < rp->work.handler = nxt_router_worker_remove_pid_handler; < rp->work.task = &engine->task; < rp->work.obj = rp; < rp->work.data = task->thread->engine; < rp->work.next = NULL; < < nxt_event_engine_post(engine, &rp->work); --- > nxt_port_post(task, engine->port, nxt_router_worker_remove_pid, > msg->u.data); 667,668d645 < nxt_mp_release(mp, NULL); < 675,713d651 < static void < nxt_router_worker_remove_pid_handler(nxt_task_t *task, void *obj, void *data) < { < nxt_pid_t pid; < nxt_buf_t *buf; < nxt_event_engine_t *engine; < nxt_remove_pid_msg_t *rp; < < rp = obj; < < buf = rp->msg.buf; < < nxt_assert(nxt_buf_used_size(buf) == sizeof(pid)); < < nxt_memcpy(&pid, buf->mem.pos, sizeof(pid)); < < nxt_port_rpc_remove_peer(task, rp->msg.port, pid); < < engine = rp->work.data; < < rp->work.handler = nxt_router_worker_remove_pid_done; < rp->work.task = &engine->task; < rp->work.next = NULL; < < nxt_event_engine_post(engine, &rp->work); < } < < < static void < nxt_router_worker_remove_pid_done(nxt_task_t *task, void *obj, void *data) < { < nxt_remove_pid_msg_t *rp; < < rp = obj; < < nxt_mp_release(rp->mem_pool, rp); < } < < 2531c2469 < port = msg->new_port; --- > port = msg->u.new_port;