aboutsummaryrefslogtreecommitdiffhomepage
path: root/src/ruby/ext/grpc/rb_channel.c
diff options
context:
space:
mode:
authorGravatar Alexander Polcyn <apolcyn@google.com>2017-04-14 12:10:55 -0700
committerGravatar Alexander Polcyn <apolcyn@google.com>2017-04-14 15:19:00 -0700
commit2a9b5d77ed0b139f71f9b9e04e527fb09afdbec9 (patch)
tree80b3fdc55e3a1cd350fe811fb5818532e19be777 /src/ruby/ext/grpc/rb_channel.c
parentbb75f3ea820b8c2d0f0ac1dc66a62f7ded9e6f22 (diff)
defer grpc_init and background threads until first grpc object init
Diffstat (limited to 'src/ruby/ext/grpc/rb_channel.c')
-rw-r--r--src/ruby/ext/grpc/rb_channel.c11
1 files changed, 7 insertions, 4 deletions
diff --git a/src/ruby/ext/grpc/rb_channel.c b/src/ruby/ext/grpc/rb_channel.c
index 1c20c8813f..6d12ff9ebd 100644
--- a/src/ruby/ext/grpc/rb_channel.c
+++ b/src/ruby/ext/grpc/rb_channel.c
@@ -166,6 +166,8 @@ static VALUE grpc_rb_channel_init(int argc, VALUE *argv, VALUE self) {
grpc_channel_args args;
MEMZERO(&args, grpc_channel_args, 1);
+ grpc_ruby_once_init();
+
/* "3" == 3 mandatory args */
rb_scan_args(argc, argv, "3", &target, &channel_args, &credentials);
@@ -521,10 +523,12 @@ static VALUE run_poll_channels_loop(VALUE arg) {
* calls - so that c-core can reconnect if needed, when there aren't any RPC's.
* TODO(apolcyn) remove this when core handles new RPCs on dead connections.
*/
-static void start_poll_channels_loop() {
- channel_polling_cq = grpc_completion_queue_create(NULL);
+void grpc_rb_channel_polling_thread_start() {
+ GPR_ASSERT(!abort_channel_polling);
+ GPR_ASSERT(channel_polling_cq == NULL);
+
gpr_mu_init(&global_connection_polling_mu);
- abort_channel_polling = 0;
+ channel_polling_cq = grpc_completion_queue_create(NULL);
rb_thread_create(run_poll_channels_loop, NULL);
}
@@ -597,7 +601,6 @@ void Init_grpc_channel() {
id_insecure_channel = rb_intern("this_channel_is_insecure");
Init_grpc_propagate_masks();
Init_grpc_connectivity_states();
- start_poll_channels_loop();
}
/* Gets the wrapped channel from the ruby wrapper */