Corrects compile error on ruby 2.0

pull/4120/head
Tim Emiola 9 years ago
parent c8bd16b7e1
commit 9161a82565
  1. 15
      src/ruby/ext/grpc/rb_call.c
  2. 2
      src/ruby/ext/grpc/rb_channel.c
  3. 2
      src/ruby/ext/grpc/rb_channel_args.c
  4. 4
      src/ruby/ext/grpc/rb_completion_queue.c
  5. 5
      src/ruby/ext/grpc/rb_credentials.c
  6. 20
      src/ruby/ext/grpc/rb_grpc.c
  7. 5
      src/ruby/ext/grpc/rb_server.c
  8. 2
      src/ruby/ext/grpc/rb_server_credentials.c

@ -139,7 +139,15 @@ static const rb_data_type_t grpc_rb_md_ary_data_type = {
{NULL, NULL}}, {NULL, NULL}},
NULL, NULL,
NULL, NULL,
0}; #ifdef RUBY_TYPED_FREE_IMMEDIATELY
/* it is unsafe to specify RUBY_TYPED_FREE_IMMEDIATELY because
* grpc_rb_call_destroy
* touches a hash object.
* TODO(yugui) Directly use st_table and call the free function earlier?
*/
0,
#endif
};
/* Describes grpc_call struct for RTypedData */ /* Describes grpc_call struct for RTypedData */
static const rb_data_type_t grpc_call_data_type = { static const rb_data_type_t grpc_call_data_type = {
@ -148,12 +156,15 @@ static const rb_data_type_t grpc_call_data_type = {
{NULL, NULL}}, {NULL, NULL}},
NULL, NULL,
NULL, NULL,
#ifdef RUBY_TYPED_FREE_IMMEDIATELY
/* it is unsafe to specify RUBY_TYPED_FREE_IMMEDIATELY because /* it is unsafe to specify RUBY_TYPED_FREE_IMMEDIATELY because
* grpc_rb_call_destroy * grpc_rb_call_destroy
* touches a hash object. * touches a hash object.
* TODO(yugui) Directly use st_table and call the free function earlier? * TODO(yugui) Directly use st_table and call the free function earlier?
*/ */
0}; 0,
#endif
};
/* Error code details is a hash containing text strings describing errors */ /* Error code details is a hash containing text strings describing errors */
VALUE rb_error_code_details; VALUE rb_error_code_details;

@ -111,7 +111,9 @@ static rb_data_type_t grpc_channel_data_type = {
{grpc_rb_channel_mark, grpc_rb_channel_free, GRPC_RB_MEMSIZE_UNAVAILABLE, {grpc_rb_channel_mark, grpc_rb_channel_free, GRPC_RB_MEMSIZE_UNAVAILABLE,
{NULL, NULL}}, {NULL, NULL}},
NULL, NULL, NULL, NULL,
#ifdef RUBY_TYPED_FREE_IMMEDIATELY
RUBY_TYPED_FREE_IMMEDIATELY RUBY_TYPED_FREE_IMMEDIATELY
#endif
}; };
/* Allocates grpc_rb_channel instances. */ /* Allocates grpc_rb_channel instances. */

@ -44,7 +44,9 @@ static rb_data_type_t grpc_rb_channel_args_data_type = {
{GRPC_RB_GC_NOT_MARKED, GRPC_RB_GC_DONT_FREE, GRPC_RB_MEMSIZE_UNAVAILABLE, {GRPC_RB_GC_NOT_MARKED, GRPC_RB_GC_DONT_FREE, GRPC_RB_MEMSIZE_UNAVAILABLE,
{NULL, NULL}}, {NULL, NULL}},
NULL, NULL, NULL, NULL,
#ifdef RUBY_TYPED_FREE_IMMEDIATELY
RUBY_TYPED_FREE_IMMEDIATELY RUBY_TYPED_FREE_IMMEDIATELY
#endif
}; };
/* A callback the processes the hash key values in channel_args hash */ /* A callback the processes the hash key values in channel_args hash */

@ -121,9 +121,11 @@ static rb_data_type_t grpc_rb_completion_queue_data_type = {
{GRPC_RB_GC_NOT_MARKED, grpc_rb_completion_queue_destroy, {GRPC_RB_GC_NOT_MARKED, grpc_rb_completion_queue_destroy,
GRPC_RB_MEMSIZE_UNAVAILABLE, {NULL, NULL}}, GRPC_RB_MEMSIZE_UNAVAILABLE, {NULL, NULL}},
NULL, NULL, NULL, NULL,
#ifdef RUBY_TYPED_FREE_IMMEDIATELY
/* cannot immediately free because grpc_rb_completion_queue_shutdown_drain /* cannot immediately free because grpc_rb_completion_queue_shutdown_drain
* calls rb_thread_call_without_gvl. */ * calls rb_thread_call_without_gvl. */
0 0,
#endif
}; };
/* Allocates a completion queue. */ /* Allocates a completion queue. */

@ -92,7 +92,10 @@ static rb_data_type_t grpc_rb_credentials_data_type = {
GRPC_RB_MEMSIZE_UNAVAILABLE, {NULL, NULL}}, GRPC_RB_MEMSIZE_UNAVAILABLE, {NULL, NULL}},
NULL, NULL,
NULL, NULL,
RUBY_TYPED_FREE_IMMEDIATELY}; #ifdef RUBY_TYPED_FREE_IMMEDIATELY
RUBY_TYPED_FREE_IMMEDIATELY
#endif
};
/* Allocates Credential instances. /* Allocates Credential instances.
Provides safe initial defaults for the instance fields. */ Provides safe initial defaults for the instance fields. */

@ -55,7 +55,10 @@ static rb_data_type_t grpc_rb_timespec_data_type = {
{NULL, NULL}}, {NULL, NULL}},
NULL, NULL,
NULL, NULL,
RUBY_TYPED_FREE_IMMEDIATELY}; #ifdef RUBY_TYPED_FREE_IMMEDIATELY
RUBY_TYPED_FREE_IMMEDIATELY
#endif
};
/* Alloc func that blocks allocation of a given object by raising an /* Alloc func that blocks allocation of a given object by raising an
* exception. */ * exception. */
@ -262,10 +265,20 @@ static void Init_grpc_time_consts() {
id_tv_nsec = rb_intern("tv_nsec"); id_tv_nsec = rb_intern("tv_nsec");
} }
/*
TODO: find an alternative to ruby_vm_at_exit that is ok in Ruby 2.0 where
RUBY_TYPED_FREE_IMMEDIATELY is not defined.
At the moment, registering a function using ruby_vm_at_exit segfaults in Ruby
2.0. This is not an issue with the gRPC handler. More likely, this was an
in issue with 2.0 that got resolved in 2.1 and has not been backported.
*/
#ifdef RUBY_TYPED_FREE_IMMEDIATELY
static void grpc_rb_shutdown(ruby_vm_t *vm) { static void grpc_rb_shutdown(ruby_vm_t *vm) {
(void)vm; (void)vm;
grpc_shutdown(); grpc_shutdown();
} }
#endif
/* Initialize the GRPC module structs */ /* Initialize the GRPC module structs */
@ -285,7 +298,12 @@ VALUE sym_metadata = Qundef;
void Init_grpc() { void Init_grpc() {
grpc_init(); grpc_init();
/* TODO: find alternative to ruby_vm_at_exit that is ok in Ruby 2.0 */
#ifdef RUBY_TYPED_FREE_IMMEDIATELY
ruby_vm_at_exit(grpc_rb_shutdown); ruby_vm_at_exit(grpc_rb_shutdown);
#endif
grpc_rb_mGRPC = rb_define_module("GRPC"); grpc_rb_mGRPC = rb_define_module("GRPC");
grpc_rb_mGrpcCore = rb_define_module_under(grpc_rb_mGRPC, "Core"); grpc_rb_mGrpcCore = rb_define_module_under(grpc_rb_mGRPC, "Core");
grpc_rb_sNewServerRpc = grpc_rb_sNewServerRpc =

@ -101,11 +101,14 @@ static const rb_data_type_t grpc_rb_server_data_type = {
{NULL, NULL}}, {NULL, NULL}},
NULL, NULL,
NULL, NULL,
#ifdef RUBY_TYPED_FREE_IMMEDIATELY
/* It is unsafe to specify RUBY_TYPED_FREE_IMMEDIATELY because the free function would block /* It is unsafe to specify RUBY_TYPED_FREE_IMMEDIATELY because the free function would block
* and we might want to unlock GVL * and we might want to unlock GVL
* TODO(yugui) Unlock GVL? * TODO(yugui) Unlock GVL?
*/ */
0}; 0,
#endif
};
/* Allocates grpc_rb_server instances. */ /* Allocates grpc_rb_server instances. */
static VALUE grpc_rb_server_alloc(VALUE cls) { static VALUE grpc_rb_server_alloc(VALUE cls) {

@ -91,7 +91,9 @@ static const rb_data_type_t grpc_rb_server_credentials_data_type = {
{grpc_rb_server_credentials_mark, grpc_rb_server_credentials_free, {grpc_rb_server_credentials_mark, grpc_rb_server_credentials_free,
GRPC_RB_MEMSIZE_UNAVAILABLE, {NULL, NULL}}, GRPC_RB_MEMSIZE_UNAVAILABLE, {NULL, NULL}},
NULL, NULL, NULL, NULL,
#ifdef RUBY_TYPED_FREE_IMMEDIATELY
RUBY_TYPED_FREE_IMMEDIATELY RUBY_TYPED_FREE_IMMEDIATELY
#endif
}; };
/* Allocates ServerCredential instances. /* Allocates ServerCredential instances.

Loading…
Cancel
Save