| 
					
				 | 
			
			
				@@ -40,6 +40,7 @@ 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				 #include <sys/types.h> 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				 #include <string.h> 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				  
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+#include "src/core/iomgr/executor.h" 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				 #include "src/core/iomgr/iomgr_internal.h" 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				 #include "src/core/iomgr/sockaddr_utils.h" 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				 #include "src/core/support/block_annotate.h" 
			 | 
		
	
	
		
			
				| 
					
				 | 
			
			
				@@ -55,8 +56,8 @@ typedef struct { 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				   char *name; 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				   char *default_port; 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				   grpc_resolve_cb cb; 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+  grpc_closure request_closure; 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				   void *arg; 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-  grpc_iomgr_object iomgr_object; 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				 } request; 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				  
			 | 
		
	
		
			
				 | 
				 | 
			
			
				 grpc_resolved_addresses *grpc_blocking_resolve_address( 
			 | 
		
	
	
		
			
				| 
					
				 | 
			
			
				@@ -129,9 +130,9 @@ done: 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				   return addrs; 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				 } 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				  
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-/* Thread function to asynch-ify grpc_blocking_resolve_address */ 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-static void do_request(void *rp) { 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-  grpc_exec_ctx exec_ctx = GRPC_EXEC_CTX_INIT; 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+/* Callback to be passed to grpc_executor to asynch-ify 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+ * grpc_blocking_resolve_address */ 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+static void do_request_thread(grpc_exec_ctx *exec_ctx, void *rp, int success) { 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				   request *r = rp; 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				   grpc_resolved_addresses *resolved = 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				       grpc_blocking_resolve_address(r->name, r->default_port); 
			 | 
		
	
	
		
			
				| 
					
				 | 
			
			
				@@ -139,10 +140,8 @@ static void do_request(void *rp) { 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				   grpc_resolve_cb cb = r->cb; 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				   gpr_free(r->name); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				   gpr_free(r->default_port); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-  grpc_iomgr_unregister_object(&r->iomgr_object); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+  cb(exec_ctx, arg, resolved); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				   gpr_free(r); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-  cb(&exec_ctx, arg, resolved); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-  grpc_exec_ctx_finish(&exec_ctx); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				 } 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				  
			 | 
		
	
		
			
				 | 
				 | 
			
			
				 void grpc_resolved_addresses_destroy(grpc_resolved_addresses *addrs) { 
			 | 
		
	
	
		
			
				| 
					
				 | 
			
			
				@@ -153,16 +152,12 @@ void grpc_resolved_addresses_destroy(grpc_resolved_addresses *addrs) { 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				 void grpc_resolve_address(const char *name, const char *default_port, 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				                           grpc_resolve_cb cb, void *arg) { 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				   request *r = gpr_malloc(sizeof(request)); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-  gpr_thd_id id; 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-  char *label; 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-  gpr_asprintf(&label, "resolve:%s", name); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-  grpc_iomgr_register_object(&r->iomgr_object, label); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-  gpr_free(label); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+  grpc_closure_init(&r->request_closure, do_request_thread, r); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				   r->name = gpr_strdup(name); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				   r->default_port = gpr_strdup(default_port); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				   r->cb = cb; 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				   r->arg = arg; 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-  gpr_thd_new(&id, do_request, r, NULL); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+  grpc_executor_enqueue(&r->request_closure, 1); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				 } 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				  
			 | 
		
	
		
			
				 | 
				 | 
			
			
				 #endif 
			 |