static void destroy_channel(grpc_exec_ctx *exec_ctx, grpc_channel *channel) { size_t i; grpc_channel_stack_destroy(exec_ctx, CHANNEL_STACK_FROM_CHANNEL(channel)); for (i = 0; i < NUM_CACHED_STATUS_ELEMS; i++) { GRPC_MDELEM_UNREF(channel->grpc_status_elem[i]); } GRPC_MDSTR_UNREF(channel->grpc_status_string); GRPC_MDSTR_UNREF(channel->grpc_compression_algorithm_string); GRPC_MDSTR_UNREF(channel->grpc_encodings_accepted_by_peer_string); GRPC_MDSTR_UNREF(channel->grpc_message_string); GRPC_MDSTR_UNREF(channel->path_string); GRPC_MDSTR_UNREF(channel->authority_string); while (channel->registered_calls) { registered_call *rc = channel->registered_calls; channel->registered_calls = rc->next; GRPC_MDELEM_UNREF(rc->path); if (rc->authority) { GRPC_MDELEM_UNREF(rc->authority); } gpr_free(rc); } if (channel->default_authority != NULL) { GRPC_MDELEM_UNREF(channel->default_authority); } grpc_mdctx_unref(channel->metadata_context); gpr_mu_destroy(&channel->registered_call_mu); gpr_free(channel->target); gpr_free(channel); }
static void finally_destroy_channel(void *c, int success) { /* ignore success or not... this is a destruction callback and will only happen once - the only purpose here is to release resources */ grpc_child_channel *channel = c; lb_channel_data *chand = LINK_BACK_ELEM_FROM_CHANNEL(channel)->channel_data; /* wait for the initiator to leave the mutex */ gpr_mu_lock(&chand->mu); gpr_mu_unlock(&chand->mu); grpc_channel_stack_destroy(channel); gpr_free(channel); }
static void test_create_channel_stack(void) { const grpc_channel_filter filter = { call_func, channel_func, sizeof(int), call_init_func, call_destroy_func, sizeof(int), channel_init_func, channel_destroy_func, "some_test_filter"}; const grpc_channel_filter *filters = &filter; grpc_channel_stack *channel_stack; grpc_call_stack *call_stack; grpc_channel_element *channel_elem; grpc_call_element *call_elem; grpc_arg arg; grpc_channel_args chan_args; grpc_mdctx *metadata_context; int *channel_data; int *call_data; LOG_TEST_NAME(); metadata_context = grpc_mdctx_create(); arg.type = GRPC_ARG_INTEGER; arg.key = "test_key"; arg.value.integer = 42; chan_args.num_args = 1; chan_args.args = &arg; channel_stack = gpr_malloc(grpc_channel_stack_size(&filters, 1)); grpc_channel_stack_init(&filters, 1, &chan_args, metadata_context, channel_stack); GPR_ASSERT(channel_stack->count == 1); channel_elem = grpc_channel_stack_element(channel_stack, 0); channel_data = (int *)channel_elem->channel_data; GPR_ASSERT(*channel_data == 0); call_stack = gpr_malloc(channel_stack->call_stack_size); grpc_call_stack_init(channel_stack, NULL, NULL, call_stack); GPR_ASSERT(call_stack->count == 1); call_elem = grpc_call_stack_element(call_stack, 0); GPR_ASSERT(call_elem->filter == channel_elem->filter); GPR_ASSERT(call_elem->channel_data == channel_elem->channel_data); call_data = (int *)call_elem->call_data; GPR_ASSERT(*call_data == 0); GPR_ASSERT(*channel_data == 1); grpc_call_stack_destroy(call_stack); gpr_free(call_stack); GPR_ASSERT(*channel_data == 2); grpc_channel_stack_destroy(channel_stack); gpr_free(channel_stack); grpc_mdctx_unref(metadata_context); }
static void destroy_channel(void *p, int ok) { grpc_channel *channel = p; grpc_channel_stack_destroy(CHANNEL_STACK_FROM_CHANNEL(channel)); grpc_mdstr_unref(channel->grpc_status_string); grpc_mdstr_unref(channel->grpc_message_string); grpc_mdstr_unref(channel->path_string); grpc_mdstr_unref(channel->authority_string); while (channel->registered_calls) { registered_call *rc = channel->registered_calls; channel->registered_calls = rc->next; grpc_mdelem_unref(rc->path); grpc_mdelem_unref(rc->authority); gpr_free(rc); } grpc_mdctx_unref(channel->metadata_context); gpr_mu_destroy(&channel->registered_call_mu); gpr_free(channel); }
static void destroy_channel(grpc_exec_ctx *exec_ctx, grpc_channel *channel) { grpc_channel_stack_destroy(exec_ctx, CHANNEL_STACK_FROM_CHANNEL(channel)); while (channel->registered_calls) { registered_call *rc = channel->registered_calls; channel->registered_calls = rc->next; GRPC_MDELEM_UNREF(rc->path); if (rc->authority) { GRPC_MDELEM_UNREF(rc->authority); } gpr_free(rc); } if (channel->default_authority != NULL) { GRPC_MDELEM_UNREF(channel->default_authority); } gpr_mu_destroy(&channel->registered_call_mu); gpr_free(channel->target); gpr_free(channel); }
static void destroy_channel(void *p, int ok) { grpc_channel *channel = p; size_t i; grpc_channel_stack_destroy(CHANNEL_STACK_FROM_CHANNEL(channel)); for (i = 0; i < NUM_CACHED_STATUS_ELEMS; i++) { grpc_mdelem_unref(channel->grpc_status_elem[i]); } grpc_mdstr_unref(channel->grpc_status_string); grpc_mdstr_unref(channel->grpc_compression_level_string); grpc_mdstr_unref(channel->grpc_message_string); grpc_mdstr_unref(channel->path_string); grpc_mdstr_unref(channel->authority_string); while (channel->registered_calls) { registered_call *rc = channel->registered_calls; channel->registered_calls = rc->next; grpc_mdelem_unref(rc->path); grpc_mdelem_unref(rc->authority); gpr_free(rc); } grpc_mdctx_unref(channel->metadata_context); gpr_mu_destroy(&channel->registered_call_mu); gpr_free(channel); }
static void connection_destroy(grpc_exec_ctx *exec_ctx, void *arg, int success) { grpc_connected_subchannel *c = arg; grpc_channel_stack_destroy(exec_ctx, CHANNEL_STACK_FROM_CONNECTION(c)); gpr_free(c); }
static void connection_destroy(connection *c) { GPR_ASSERT(c->refs == 0); grpc_channel_stack_destroy(CHANNEL_STACK_FROM_CONNECTION(c)); gpr_free(c); }
static void free_channel(grpc_exec_ctx *exec_ctx, void *arg, grpc_error *error) { grpc_channel_stack_destroy(exec_ctx, arg); gpr_free(arg); }