| 
					
				 | 
			
			
				@@ -87,24 +87,27 @@ typedef struct { 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				   int resolved_num; 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				 } zookeeper_resolver; 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				  
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-static void zookeeper_destroy(grpc_resolver *r); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+static void zookeeper_destroy(grpc_exec_ctx *exec_ctx, grpc_resolver *r); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				  
			 | 
		
	
		
			
				 | 
				 | 
			
			
				 static void zookeeper_start_resolving_locked(zookeeper_resolver *r); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-static grpc_closure *zookeeper_maybe_finish_next_locked(zookeeper_resolver *r) 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-    GRPC_MUST_USE_RESULT; 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+static void zookeeper_maybe_finish_next_locked(grpc_exec_ctx *exec_ctx, 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+                                               zookeeper_resolver *r); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				  
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-static void zookeeper_shutdown(grpc_resolver *r); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-static void zookeeper_channel_saw_error(grpc_resolver *r, 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+static void zookeeper_shutdown(grpc_exec_ctx *exec_ctx, grpc_resolver *r); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+static void zookeeper_channel_saw_error(grpc_exec_ctx *exec_ctx, 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+                                        grpc_resolver *r, 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				                                         struct sockaddr *failing_address, 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				                                         int failing_address_len); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-static void zookeeper_next(grpc_resolver *r, grpc_client_config **target_config, 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+static void zookeeper_next(grpc_exec_ctx *exec_ctx, grpc_resolver *r, 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+                           grpc_client_config **target_config, 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				                            grpc_closure *on_complete); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				  
			 | 
		
	
		
			
				 | 
				 | 
			
			
				 static const grpc_resolver_vtable zookeeper_resolver_vtable = { 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				     zookeeper_destroy, zookeeper_shutdown, zookeeper_channel_saw_error, 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				     zookeeper_next}; 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				  
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-static void zookeeper_shutdown(grpc_resolver *resolver) { 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+static void zookeeper_shutdown(grpc_exec_ctx *exec_ctx, 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+                               grpc_resolver *resolver) { 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				   zookeeper_resolver *r = (zookeeper_resolver *)resolver; 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				   grpc_closure *call = NULL; 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				   gpr_mu_lock(&r->mu); 
			 | 
		
	
	
		
			
				| 
					
				 | 
			
			
				@@ -116,11 +119,12 @@ static void zookeeper_shutdown(grpc_resolver *resolver) { 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				   zookeeper_close(r->zookeeper_handle); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				   gpr_mu_unlock(&r->mu); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				   if (call != NULL) { 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-    call->cb(call->cb_arg, 1); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+    call->cb(exec_ctx, call->cb_arg, 1); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				   } 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				 } 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				  
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-static void zookeeper_channel_saw_error(grpc_resolver *resolver, 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+static void zookeeper_channel_saw_error(grpc_exec_ctx *exec_ctx, 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+                                        grpc_resolver *resolver, 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				                                         struct sockaddr *sa, int len) { 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				   zookeeper_resolver *r = (zookeeper_resolver *)resolver; 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				   gpr_mu_lock(&r->mu); 
			 | 
		
	
	
		
			
				| 
					
				 | 
			
			
				@@ -130,11 +134,10 @@ static void zookeeper_channel_saw_error(grpc_resolver *resolver, 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				   gpr_mu_unlock(&r->mu); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				 } 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				  
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-static void zookeeper_next(grpc_resolver *resolver, 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+static void zookeeper_next(grpc_exec_ctx *exec_ctx, grpc_resolver *resolver, 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				                            grpc_client_config **target_config, 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				                            grpc_closure *on_complete) { 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				   zookeeper_resolver *r = (zookeeper_resolver *)resolver; 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-  grpc_closure *call; 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				   gpr_mu_lock(&r->mu); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				   GPR_ASSERT(r->next_completion == NULL); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				   r->next_completion = on_complete; 
			 | 
		
	
	
		
			
				| 
					
				 | 
			
			
				@@ -142,10 +145,9 @@ static void zookeeper_next(grpc_resolver *resolver, 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				   if (r->resolved_version == 0 && r->resolving == 0) { 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				     zookeeper_start_resolving_locked(r); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				   } else { 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-    call = zookeeper_maybe_finish_next_locked(r); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+    zookeeper_maybe_finish_next_locked(exec_ctx, r); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				   } 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				   gpr_mu_unlock(&r->mu); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-  if (call) call->cb(call->cb_arg, 1); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				 } 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				  
			 | 
		
	
		
			
				 | 
				 | 
			
			
				 /** Zookeeper global watcher for connection management 
			 | 
		
	
	
		
			
				| 
					
				 | 
			
			
				@@ -180,14 +182,13 @@ static void zookeeper_watcher(zhandle_t *zookeeper_handle, int type, int state, 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				  
			 | 
		
	
		
			
				 | 
				 | 
			
			
				 /** Callback function after getting all resolved addresses 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				     Creates a subchannel for each address */ 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-static void zookeeper_on_resolved(void *arg, 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+static void zookeeper_on_resolved(grpc_exec_ctx *exec_ctx, void *arg, 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				                                   grpc_resolved_addresses *addresses) { 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				   zookeeper_resolver *r = arg; 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				   grpc_client_config *config = NULL; 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				   grpc_subchannel **subchannels; 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				   grpc_subchannel_args args; 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				   grpc_lb_policy *lb_policy; 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-  grpc_closure *call; 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				   size_t i; 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				   if (addresses != NULL) { 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				     grpc_lb_policy_args lb_policy_args; 
			 | 
		
	
	
		
			
				| 
					
				 | 
			
			
				@@ -198,13 +199,13 @@ static void zookeeper_on_resolved(void *arg, 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				       args.addr = (struct sockaddr *)(addresses->addrs[i].addr); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				       args.addr_len = addresses->addrs[i].len; 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				       subchannels[i] = grpc_subchannel_factory_create_subchannel( 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-          r->subchannel_factory, &args); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+          exec_ctx, r->subchannel_factory, &args); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				     } 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				     lb_policy_args.subchannels = subchannels; 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				     lb_policy_args.num_subchannels = addresses->naddrs; 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				     lb_policy = grpc_lb_policy_create(r->lb_policy_name, &lb_policy_args); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				     grpc_client_config_set_lb_policy(config, lb_policy); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-    GRPC_LB_POLICY_UNREF(lb_policy, "construction"); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+    GRPC_LB_POLICY_UNREF(exec_ctx, lb_policy, "construction"); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				     grpc_resolved_addresses_destroy(addresses); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				     gpr_free(subchannels); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				   } 
			 | 
		
	
	
		
			
				| 
					
				 | 
			
			
				@@ -212,20 +213,18 @@ static void zookeeper_on_resolved(void *arg, 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				   GPR_ASSERT(r->resolving == 1); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				   r->resolving = 0; 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				   if (r->resolved_config != NULL) { 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-    grpc_client_config_unref(r->resolved_config); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+    grpc_client_config_unref(exec_ctx, r->resolved_config); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				   } 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				   r->resolved_config = config; 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				   r->resolved_version++; 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-  call = zookeeper_maybe_finish_next_locked(r); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+  zookeeper_maybe_finish_next_locked(exec_ctx, r); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				   gpr_mu_unlock(&r->mu); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				  
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-  if (call) call->cb(call->cb_arg, 1); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				- 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-  GRPC_RESOLVER_UNREF(&r->base, "zookeeper-resolving"); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+  GRPC_RESOLVER_UNREF(exec_ctx, &r->base, "zookeeper-resolving"); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				 } 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				  
			 | 
		
	
		
			
				 | 
				 | 
			
			
				 /** Callback function for each DNS resolved address */ 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-static void zookeeper_dns_resolved(void *arg, 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+static void zookeeper_dns_resolved(grpc_exec_ctx *exec_ctx, void *arg, 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				                                    grpc_resolved_addresses *addresses) { 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				   size_t i; 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				   zookeeper_resolver *r = arg; 
			 | 
		
	
	
		
			
				| 
					
				 | 
			
			
				@@ -251,7 +250,7 @@ static void zookeeper_dns_resolved(void *arg, 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				   resolve_done = (r->resolved_num == r->resolved_total); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				   gpr_mu_unlock(&r->mu); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				   if (resolve_done) { 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-    zookeeper_on_resolved(r, r->resolved_addrs); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+    zookeeper_on_resolved(exec_ctx, r, r->resolved_addrs); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				   } 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				 } 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				  
			 | 
		
	
	
		
			
				| 
					
				 | 
			
			
				@@ -300,9 +299,11 @@ static void zookeeper_get_children_node_completion(int rc, const char *value, 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				   char *address = NULL; 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				   zookeeper_resolver *r = (zookeeper_resolver *)arg; 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				   int resolve_done = 0; 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+  grpc_exec_ctx exec_ctx = GRPC_EXEC_CTX_INIT; 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				  
			 | 
		
	
		
			
				 | 
				 | 
			
			
				   if (rc != 0) { 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				     gpr_log(GPR_ERROR, "Error in getting a child node of %s", r->name); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+    grpc_exec_ctx_finish(&exec_ctx); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				     return; 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				   } 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				  
			 | 
		
	
	
		
			
				| 
					
				 | 
			
			
				@@ -318,9 +319,11 @@ static void zookeeper_get_children_node_completion(int rc, const char *value, 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				     resolve_done = (r->resolved_num == r->resolved_total); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				     gpr_mu_unlock(&r->mu); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				     if (resolve_done) { 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-      zookeeper_on_resolved(r, r->resolved_addrs); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+      zookeeper_on_resolved(&exec_ctx, r, r->resolved_addrs); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				     } 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				   } 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+ 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+  grpc_exec_ctx_finish(&exec_ctx); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				 } 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				  
			 | 
		
	
		
			
				 | 
				 | 
			
			
				 static void zookeeper_get_children_completion( 
			 | 
		
	
	
		
			
				| 
					
				 | 
			
			
				@@ -411,28 +414,27 @@ static void zookeeper_start_resolving_locked(zookeeper_resolver *r) { 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				   zookeeper_resolve_address(r); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				 } 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				  
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-static grpc_closure *zookeeper_maybe_finish_next_locked(zookeeper_resolver *r) { 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-  grpc_closure *call = NULL; 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+static void zookeeper_maybe_finish_next_locked(grpc_exec_ctx *exec_ctx, 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+                                               zookeeper_resolver *r) { 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				   if (r->next_completion != NULL && 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				       r->resolved_version != r->published_version) { 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				     *r->target_config = r->resolved_config; 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				     if (r->resolved_config != NULL) { 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				       grpc_client_config_ref(r->resolved_config); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				     } 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-    call = r->next_completion; 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+    grpc_exec_ctx_enqueue(exec_ctx, r->next_completion, 1); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				     r->next_completion = NULL; 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				     r->published_version = r->resolved_version; 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				   } 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-  return call; 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				 } 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				  
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-static void zookeeper_destroy(grpc_resolver *gr) { 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+static void zookeeper_destroy(grpc_exec_ctx *exec_ctx, grpc_resolver *gr) { 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				   zookeeper_resolver *r = (zookeeper_resolver *)gr; 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				   gpr_mu_destroy(&r->mu); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				   if (r->resolved_config != NULL) { 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-    grpc_client_config_unref(r->resolved_config); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+    grpc_client_config_unref(exec_ctx, r->resolved_config); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				   } 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-  grpc_subchannel_factory_unref(r->subchannel_factory); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+  grpc_subchannel_factory_unref(exec_ctx, r->subchannel_factory); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				   gpr_free(r->name); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				   gpr_free(r->lb_policy_name); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				   gpr_free(r); 
			 |