Merge pull request #8270 from daniel-j-born/server_port_index

Correctly count port indices and siblings.
pull/8634/head
Yuchen Zeng 8 years ago committed by GitHub
commit 047518f91d
  1. 45
      src/core/lib/iomgr/tcp_server_posix.c

@ -657,41 +657,46 @@ done:
}
}
/* Return listener at port_index or NULL. Should only be called with s->mu
locked. */
static grpc_tcp_listener *get_port_index(grpc_tcp_server *s,
unsigned port_index) {
unsigned num_ports = 0;
grpc_tcp_listener *sp;
for (sp = s->head; sp; sp = sp->next) {
if (!sp->is_sibling) {
if (++num_ports > port_index) {
return sp;
}
}
}
return NULL;
}
unsigned grpc_tcp_server_port_fd_count(grpc_tcp_server *s,
unsigned port_index) {
unsigned num_fds = 0;
grpc_tcp_listener *sp;
gpr_mu_lock(&s->mu);
for (sp = s->head; sp && port_index != 0; sp = sp->next) {
if (!sp->is_sibling) {
--port_index;
}
grpc_tcp_listener *sp = get_port_index(s, port_index);
for (; sp; sp = sp->sibling) {
++num_fds;
}
for (; sp; sp = sp->sibling, ++num_fds)
;
gpr_mu_unlock(&s->mu);
return num_fds;
}
int grpc_tcp_server_port_fd(grpc_tcp_server *s, unsigned port_index,
unsigned fd_index) {
grpc_tcp_listener *sp;
int fd;
gpr_mu_lock(&s->mu);
for (sp = s->head; sp && port_index != 0; sp = sp->next) {
if (!sp->is_sibling) {
--port_index;
grpc_tcp_listener *sp = get_port_index(s, port_index);
for (; sp; sp = sp->sibling, --fd_index) {
if (fd_index == 0) {
gpr_mu_unlock(&s->mu);
return sp->fd;
}
}
for (; sp && fd_index != 0; sp = sp->sibling, --fd_index)
;
if (sp) {
fd = sp->fd;
} else {
fd = -1;
}
gpr_mu_unlock(&s->mu);
return fd;
return -1;
}
void grpc_tcp_server_start(grpc_exec_ctx *exec_ctx, grpc_tcp_server *s,

Loading…
Cancel
Save