aboutsummaryrefslogtreecommitdiffhomepage
path: root/src/ruby/ext/grpc/rb_channel.c
diff options
context:
space:
mode:
authorGravatar Alexander Polcyn <apolcyn@google.com>2017-05-17 21:39:09 -0700
committerGravatar Alexander Polcyn <apolcyn@google.com>2017-05-17 21:49:14 -0700
commitd7455abfbd1394a6984b901a305785e9cba7b2d6 (patch)
tree956fa70db0b9a776d7df045f582f4f4eb0d69003 /src/ruby/ext/grpc/rb_channel.c
parentc24d53b0cfffe2cd78d53c0c86de43346dcc7ee7 (diff)
make get conn state always safe to call
Diffstat (limited to 'src/ruby/ext/grpc/rb_channel.c')
-rw-r--r--src/ruby/ext/grpc/rb_channel.c12
1 files changed, 4 insertions, 8 deletions
diff --git a/src/ruby/ext/grpc/rb_channel.c b/src/ruby/ext/grpc/rb_channel.c
index 6e7baa3122..0524c49710 100644
--- a/src/ruby/ext/grpc/rb_channel.c
+++ b/src/ruby/ext/grpc/rb_channel.c
@@ -273,7 +273,7 @@ static VALUE grpc_rb_channel_init(int argc, VALUE *argv, VALUE self) {
}
typedef struct get_state_stack {
- grpc_channel *channel;
+ bg_watched_channel *bg;
int try_to_connect;
int out;
} get_state_stack;
@@ -283,14 +283,10 @@ static void *get_state_without_gil(void *arg) {
gpr_mu_lock(&global_connection_polling_mu);
GPR_ASSERT(abort_channel_polling || channel_polling_thread_started);
- if (abort_channel_polling) {
- // Assume that this channel has been destroyed by the
- // background thread.
- // The case in which the channel polling thread
- // failed to start just always shows shutdown state.
+ if (stack->bg->channel_destroyed) {
stack->out = GRPC_CHANNEL_SHUTDOWN;
} else {
- stack->out = grpc_channel_check_connectivity_state(stack->channel,
+ stack->out = grpc_channel_check_connectivity_state(stack->bg->channel,
stack->try_to_connect);
}
gpr_mu_unlock(&global_connection_polling_mu);
@@ -322,7 +318,7 @@ static VALUE grpc_rb_channel_get_connectivity_state(int argc, VALUE *argv,
return Qnil;
}
- stack.channel = wrapper->bg_wrapped->channel;
+ stack.bg = wrapper->bg_wrapped;
stack.try_to_connect = RTEST(try_to_connect_param) ? 1 : 0;
rb_thread_call_without_gvl(get_state_without_gil, &stack, NULL, NULL);