|
|
@ -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.
|
|
|
|