Fix asan issue

pull/7900/head
Yuchen Zeng 9 years ago
parent 6f8f09f5d9
commit 1d0c1c4168
  1. 2
      examples/cpp/helloworld/Makefile
  2. 13
      src/core/ext/resolver/dns/c_ares/grpc_ares_wrapper.c

@ -39,7 +39,7 @@ LDFLAGS += -L/usr/local/lib `pkg-config --libs grpc++ grpc` \
-lgrpc++_reflection \ -lgrpc++_reflection \
-lprotobuf -lpthread -ldl -lprotobuf -lpthread -ldl
else else
LDFLAGS += -L/usr/local/lib -lgrpc++ -lgrpc \ LDFLAGS += -L/usr/local/lib `pkg-config --libs grpc++ grpc` \
-Wl,--no-as-needed -lgrpc++_reflection -Wl,--as-needed \ -Wl,--no-as-needed -lgrpc++_reflection -Wl,--as-needed \
-lprotobuf -lpthread -ldl -lprotobuf -lpthread -ldl
endif endif

@ -71,6 +71,7 @@ typedef struct grpc_ares_request {
void *arg; void *arg;
int pending_quries; int pending_quries;
int success; int success;
grpc_error *error;
grpc_ares_ev_driver *ev_driver; grpc_ares_ev_driver *ev_driver;
} grpc_ares_request; } grpc_ares_request;
@ -100,7 +101,6 @@ static void on_done_cb(void *arg, int status, int timeouts,
struct hostent *hostent) { struct hostent *hostent) {
gpr_log(GPR_ERROR, "status: %d", status); gpr_log(GPR_ERROR, "status: %d", status);
grpc_ares_request *r = (grpc_ares_request *)arg; grpc_ares_request *r = (grpc_ares_request *)arg;
grpc_error *err = GRPC_ERROR_NONE;
gpr_log(GPR_ERROR, "status: %s", r->name); gpr_log(GPR_ERROR, "status: %s", r->name);
grpc_resolved_addresses **addresses = r->addrs_out; grpc_resolved_addresses **addresses = r->addrs_out;
size_t i; size_t i;
@ -108,8 +108,8 @@ static void on_done_cb(void *arg, int status, int timeouts,
if (status == ARES_SUCCESS) { if (status == ARES_SUCCESS) {
gpr_log(GPR_ERROR, "status ARES_SUCCESS"); gpr_log(GPR_ERROR, "status ARES_SUCCESS");
GRPC_ERROR_UNREF(err); GRPC_ERROR_UNREF(r->error);
err = GRPC_ERROR_NONE; r->error = GRPC_ERROR_NONE;
r->success = 1; r->success = 1;
if (*addresses == NULL) { if (*addresses == NULL) {
*addresses = gpr_malloc(sizeof(grpc_resolved_addresses)); *addresses = gpr_malloc(sizeof(grpc_resolved_addresses));
@ -165,13 +165,13 @@ static void on_done_cb(void *arg, int status, int timeouts,
} else if (!r->success) { } else if (!r->success) {
gpr_log(GPR_ERROR, "status not ARES_SUCCESS"); gpr_log(GPR_ERROR, "status not ARES_SUCCESS");
// TODO(zyc): add more error detail // TODO(zyc): add more error detail
if (err == GRPC_ERROR_NONE) { if (r->error == GRPC_ERROR_NONE) {
err = GRPC_ERROR_CREATE("C-ares query error"); r->error = GRPC_ERROR_CREATE("C-ares query error");
} }
} }
if (--r->pending_quries == 0) { if (--r->pending_quries == 0) {
grpc_exec_ctx exec_ctx = GRPC_EXEC_CTX_INIT; grpc_exec_ctx exec_ctx = GRPC_EXEC_CTX_INIT;
grpc_exec_ctx_sched(&exec_ctx, r->on_done, err, NULL); grpc_exec_ctx_sched(&exec_ctx, r->on_done, r->error, NULL);
grpc_exec_ctx_flush(&exec_ctx); grpc_exec_ctx_flush(&exec_ctx);
grpc_exec_ctx_finish(&exec_ctx); grpc_exec_ctx_finish(&exec_ctx);
@ -293,6 +293,7 @@ void grpc_resolve_address_ares_impl(grpc_exec_ctx *exec_ctx, const char *name,
r->host = gpr_strdup(host); r->host = gpr_strdup(host);
r->pending_quries = 0; r->pending_quries = 0;
r->success = 0; r->success = 0;
r->error = GRPC_ERROR_NONE;
grpc_closure_init(&r->request_closure, request_resolving_address, r); grpc_closure_init(&r->request_closure, request_resolving_address, r);
grpc_exec_ctx_sched(exec_ctx, &r->request_closure, GRPC_ERROR_NONE, NULL); grpc_exec_ctx_sched(exec_ctx, &r->request_closure, GRPC_ERROR_NONE, NULL);
} }

Loading…
Cancel
Save