27a28,32 > static void > nxt_port_rpc_remove_from_peers(nxt_task_t *task, nxt_port_t *port, > nxt_port_rpc_reg_t *reg); > > 171,173c176,178 < if (peer == -1 || reg->peer != -1) { < nxt_log_error(NXT_LOG_ERR, task->log, "rpc: stream #%uD failed to " < "change peer %PI->%PI", reg->stream, reg->peer, peer); --- > if (nxt_slow_path(peer == reg->peer)) { > return; > } 174a180,186 > if (reg->peer != -1) { > nxt_port_rpc_remove_from_peers(task, port, reg); > > reg->peer = -1; > } > > if (peer == -1) { 362d373 < msg.port_msg.last = 1; 377a389 > msg.port_msg.last = 1; 379,392d390 < reg->error_handler(task, &msg, reg->data); < < nxt_port_rpc_lhq_stream(&lhq, &stream); < lhq.pool = port->mem_pool; < < ret = nxt_lvlhsh_delete(&port->rpc_streams, &lhq); < < if (nxt_slow_path(ret != NXT_OK)) { < nxt_log_error(NXT_LOG_ERR, task->log, < "rpc: stream #%uD failed to delete handler", stream); < < return; < } < 407a406,426 > reg->peer = -1; > > reg->error_handler(task, &msg, reg->data); > > /* Reset 'last' flag to preserve rpc handler. */ > if (msg.port_msg.last == 0) { > continue; > } > > nxt_port_rpc_lhq_stream(&lhq, &stream); > lhq.pool = port->mem_pool; > > ret = nxt_lvlhsh_delete(&port->rpc_streams, &lhq); > > if (nxt_slow_path(ret != NXT_OK)) { > nxt_log_error(NXT_LOG_ERR, task->log, > "rpc: stream #%uD failed to delete handler", stream); > > return; > } >