Merge branch 'ruby_signal_handling_improvement' into ruby_explicit_kw_args

pull/6662/head
murgatroid99 9 years ago
commit 83939ce3ac
  1. 18
      src/ruby/ext/grpc/rb_completion_queue.c

@ -62,13 +62,10 @@ static void *grpc_rb_completion_queue_next_no_gil(void *param) {
gpr_timespec deadline;
do {
deadline = gpr_time_add(gpr_now(GPR_CLOCK_REALTIME), increment);
if (gpr_time_cmp(deadline, next_call->timeout) > 0) {
// Then we have run out of time
break;
}
next_call->event = grpc_completion_queue_next(next_call->cq,
deadline, NULL);
if (next_call->event.success) {
if (next_call->event.type != GRPC_QUEUE_TIMEOUT ||
gpr_time_cmp(deadline, next_call->timeout) > 0) {
break;
}
} while (!next_call->interrupted);
@ -82,14 +79,11 @@ static void *grpc_rb_completion_queue_pluck_no_gil(void *param) {
gpr_timespec deadline;
do {
deadline = gpr_time_add(gpr_now(GPR_CLOCK_REALTIME), increment);
if (gpr_time_cmp(deadline, next_call->timeout) > 0) {
// Then we have run out of time
break;
}
next_call->event = grpc_completion_queue_pluck(next_call->cq,
next_call->tag,
deadline, NULL);
if (next_call->event.type != GRPC_QUEUE_TIMEOUT) {
if (next_call->event.type != GRPC_QUEUE_TIMEOUT ||
gpr_time_cmp(deadline, next_call->timeout) > 0) {
break;
}
} while (!next_call->interrupted);
@ -195,8 +189,8 @@ grpc_event grpc_rb_completion_queue_pluck_event(VALUE self, VALUE tag,
The basic reason we need this relatively complicated construction is that
we need to re-acquire the GVL when an interrupt comes in, so that the ruby
interpeter can do what it needs to do with the interrupt. But we also need
to get back to plucking when */
interpreter can do what it needs to do with the interrupt. But we also need
to get back to plucking when the interrupt has been handled. */
do {
next_call.interrupted = 0;
rb_thread_call_without_gvl(grpc_rb_completion_queue_pluck_no_gil,

Loading…
Cancel
Save