diff options
author | Craig Tiller <craig.tiller@gmail.com> | 2015-05-15 17:11:44 -0700 |
---|---|---|
committer | Craig Tiller <ctiller@google.com> | 2015-05-20 16:32:35 -0700 |
commit | dc6e86bb7ac28822fe72394a5cf4ebb5d5a9be32 (patch) | |
tree | dcc7895f381914838ba28895b8d3399aa0c43144 /src/core/iomgr/pollset_posix.c | |
parent | e4b329ba14ad42c667114dc6fa79baa023aaeda5 (diff) |
Kick the tire down the road instead of blocking to free up threads
Diffstat (limited to 'src/core/iomgr/pollset_posix.c')
-rw-r--r-- | src/core/iomgr/pollset_posix.c | 7 |
1 files changed, 5 insertions, 2 deletions
diff --git a/src/core/iomgr/pollset_posix.c b/src/core/iomgr/pollset_posix.c index 4d1bcad9e2..ab1af0d4ee 100644 --- a/src/core/iomgr/pollset_posix.c +++ b/src/core/iomgr/pollset_posix.c @@ -258,7 +258,6 @@ static void unary_poll_do_promote(void *args, int success) { grpc_pollset *pollset = up_args->pollset; grpc_fd *fd = up_args->fd; int do_shutdown_cb = 0; - gpr_free(up_args); /* * This is quite tricky. There are a number of cases to keep in mind here: @@ -273,8 +272,12 @@ static void unary_poll_do_promote(void *args, int success) { /* First we need to ensure that nobody is polling concurrently */ while (pollset->counter != 0) { 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 * we should just call the right add function and be done. */ /* TODO(klempner): If we're not careful this could cause infinite recursion. |