|  | @@ -81,14 +81,18 @@ static void on_secure_transport_setup_done(void *arg,
 | 
	
		
			
				|  |  |    if (status != GRPC_SECURITY_OK) {
 | 
	
		
			
				|  |  |      gpr_log(GPR_ERROR, "Secure transport setup failed with error %d.", status);
 | 
	
		
			
				|  |  |      memset(c->result, 0, sizeof(*c->result));
 | 
	
		
			
				|  |  | -    notify = c->notify;
 | 
	
		
			
				|  |  | -    c->notify = NULL;
 | 
	
		
			
				|  |  | -    grpc_iomgr_add_callback(notify);
 | 
	
		
			
				|  |  |    } else {
 | 
	
		
			
				|  |  |      c->result->transport = grpc_create_chttp2_transport(
 | 
	
		
			
				|  |  |          c->args.channel_args, secure_endpoint,
 | 
	
		
			
				|  |  |          NULL, 0, c->args.metadata_context, 1);
 | 
	
		
			
				|  |  | +    c->result->filters = gpr_malloc(sizeof(grpc_channel_filter *) * 2);
 | 
	
		
			
				|  |  | +    c->result->filters[0] = &grpc_client_auth_filter;
 | 
	
		
			
				|  |  | +    c->result->filters[1] = &grpc_http_client_filter;
 | 
	
		
			
				|  |  | +    c->result->num_filters = 2;
 | 
	
		
			
				|  |  |    }
 | 
	
		
			
				|  |  | +  notify = c->notify;
 | 
	
		
			
				|  |  | +  c->notify = NULL;
 | 
	
		
			
				|  |  | +  grpc_iomgr_add_callback(notify);
 | 
	
		
			
				|  |  |  }
 | 
	
		
			
				|  |  |  
 | 
	
		
			
				|  |  |  static void connected(void *arg, grpc_endpoint *tcp) {
 | 
	
	
		
			
				|  | @@ -123,6 +127,7 @@ typedef struct {
 | 
	
		
			
				|  |  |    grpc_subchannel_factory base;
 | 
	
		
			
				|  |  |    gpr_refcount refs;
 | 
	
		
			
				|  |  |    grpc_mdctx *mdctx;
 | 
	
		
			
				|  |  | +  grpc_channel_args *merge_args;
 | 
	
		
			
				|  |  |    grpc_channel_security_connector *security_connector;
 | 
	
		
			
				|  |  |  } subchannel_factory;
 | 
	
		
			
				|  |  |  
 | 
	
	
		
			
				|  | @@ -142,14 +147,18 @@ static void subchannel_factory_unref(grpc_subchannel_factory *scf) {
 | 
	
		
			
				|  |  |  static grpc_subchannel *subchannel_factory_create_subchannel(grpc_subchannel_factory *scf, grpc_subchannel_args *args) {
 | 
	
		
			
				|  |  |    subchannel_factory *f = (subchannel_factory *)scf;
 | 
	
		
			
				|  |  |    connector *c = gpr_malloc(sizeof(*c));
 | 
	
		
			
				|  |  | +  grpc_channel_args *final_args =
 | 
	
		
			
				|  |  | +      grpc_channel_args_merge(args->args, f->merge_args);
 | 
	
		
			
				|  |  |    grpc_subchannel *s;
 | 
	
		
			
				|  |  |    memset(c, 0, sizeof(*c));
 | 
	
		
			
				|  |  |    c->base.vtable = &connector_vtable;
 | 
	
		
			
				|  |  |    c->security_connector = f->security_connector;
 | 
	
		
			
				|  |  |    gpr_ref_init(&c->refs, 1);
 | 
	
		
			
				|  |  |    args->mdctx = f->mdctx;
 | 
	
		
			
				|  |  | +  args->args = final_args;
 | 
	
		
			
				|  |  |    s = grpc_subchannel_create(&c->base, args);
 | 
	
		
			
				|  |  |    grpc_connector_unref(&c->base);
 | 
	
		
			
				|  |  | +  grpc_channel_args_destroy(final_args);
 | 
	
		
			
				|  |  |    return s;
 | 
	
		
			
				|  |  |  }
 | 
	
		
			
				|  |  |  
 | 
	
	
		
			
				|  | @@ -334,7 +343,7 @@ grpc_channel *grpc_secure_channel_create(grpc_credentials *creds,
 | 
	
		
			
				|  |  |    connector_arg = grpc_security_connector_to_arg(&connector->base);
 | 
	
		
			
				|  |  |    args_copy = grpc_channel_args_copy_and_add(
 | 
	
		
			
				|  |  |        new_args_from_connector != NULL ? new_args_from_connector : args,
 | 
	
		
			
				|  |  | -      &connector_arg);
 | 
	
		
			
				|  |  | +      &connector_arg, 1);
 | 
	
		
			
				|  |  |    /* TODO(census)
 | 
	
		
			
				|  |  |    if (grpc_channel_args_is_census_enabled(args)) {
 | 
	
		
			
				|  |  |      filters[n++] = &grpc_client_census_filter;
 | 
	
	
		
			
				|  | @@ -347,6 +356,7 @@ grpc_channel *grpc_secure_channel_create(grpc_credentials *creds,
 | 
	
		
			
				|  |  |    gpr_ref_init(&f->refs, 1);
 | 
	
		
			
				|  |  |    f->mdctx = mdctx;
 | 
	
		
			
				|  |  |    f->security_connector = connector;
 | 
	
		
			
				|  |  | +  f->merge_args = grpc_channel_args_copy(args_copy);
 | 
	
		
			
				|  |  |    resolver = grpc_resolver_create(target, &f->base);
 | 
	
		
			
				|  |  |    if (!resolver) {
 | 
	
		
			
				|  |  |      return NULL;
 |