Use TypedData for TmpChannelArgs

pull/1295/head
Yuki Yugui Sonoda 10 years ago
parent c9b7d1cb04
commit d98db4a647
  1. 16
      src/ruby/ext/grpc/rb_channel_args.c

@ -38,6 +38,13 @@
#include "rb_grpc.h"
static rb_data_type_t grpc_rb_channel_args_data_type = {
"grpc_channel_args",
{GRPC_RB_GC_NOT_MARKED, GRPC_RB_GC_DONT_FREE, GRPC_RB_MEMSIZE_UNAVAILABLE},
NULL, NULL,
RUBY_TYPED_FREE_IMMEDIATELY
};
/* A callback the processes the hash key values in channel_args hash */
static int grpc_rb_channel_create_in_process_add_args_hash_cb(VALUE key,
VALUE val,
@ -60,7 +67,8 @@ static int grpc_rb_channel_create_in_process_add_args_hash_cb(VALUE key,
return ST_STOP;
}
Data_Get_Struct(args_obj, grpc_channel_args, args);
TypedData_Get_Struct(args_obj, grpc_channel_args,
&grpc_rb_channel_args_data_type, args);
if (args->num_args <= 0) {
rb_raise(rb_eRuntimeError, "hash_cb bug: num_args is %lu for key:%s",
args->num_args, StringValueCStr(key));
@ -126,9 +134,9 @@ static VALUE grpc_rb_hash_convert_to_channel_args0(VALUE as_value) {
MEMZERO(params->dst->args, grpc_arg, num_args);
rb_hash_foreach(params->src_hash,
grpc_rb_channel_create_in_process_add_args_hash_cb,
Data_Wrap_Struct(grpc_rb_cChannelArgs,
GRPC_RB_GC_NOT_MARKED,
GRPC_RB_GC_DONT_FREE, params->dst));
TypedData_Wrap_Struct(grpc_rb_cChannelArgs,
&grpc_rb_channel_args_data_type,
params->dst));
/* reset num_args as grpc_rb_channel_create_in_process_add_args_hash_cb
* decrements it during has processing */
params->dst->num_args = num_args;

Loading…
Cancel
Save