|  | @@ -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
 |