Kick the tire down the road instead of blocking to free up threads

pull/1888/head
Craig Tiller 10 years ago
parent 4751fb1e46
commit 6bf450149b
  1. 7
      src/core/iomgr/pollset_posix.c

@ -207,7 +207,6 @@ static void unary_poll_do_promote(void *args, int success) {
grpc_pollset *pollset = up_args->pollset; grpc_pollset *pollset = up_args->pollset;
grpc_fd *fd = up_args->fd; grpc_fd *fd = up_args->fd;
int do_shutdown_cb = 0; int do_shutdown_cb = 0;
gpr_free(up_args);
/* /*
* This is quite tricky. There are a number of cases to keep in mind here: * This is quite tricky. There are a number of cases to keep in mind here:
@ -222,8 +221,12 @@ static void unary_poll_do_promote(void *args, int success) {
/* First we need to ensure that nobody is polling concurrently */ /* First we need to ensure that nobody is polling concurrently */
while (pollset->counter != 0) { while (pollset->counter != 0) {
grpc_pollset_kick(pollset); grpc_pollset_kick(pollset);
gpr_cv_wait(&pollset->cv, &pollset->mu, gpr_inf_future); grpc_iomgr_add_callback(unary_poll_do_promote, up_args);
gpr_mu_unlock(&pollset->mu);
return;
} }
gpr_free(up_args);
/* At this point the pollset may no longer be a unary poller. In that case /* At this point the pollset may no longer be a unary poller. In that case
* we should just call the right add function and be done. */ * we should just call the right add function and be done. */
/* TODO(klempner): If we're not careful this could cause infinite recursion. /* TODO(klempner): If we're not careful this could cause infinite recursion.

Loading…
Cancel
Save