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