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 \
-lprotobuf -lpthread -ldl
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 \
-lprotobuf -lpthread -ldl
endif

@ -71,6 +71,7 @@ typedef struct grpc_ares_request {
void *arg;
int pending_quries;
int success;
grpc_error *error;
grpc_ares_ev_driver *ev_driver;
} grpc_ares_request;
@ -100,7 +101,6 @@ static void on_done_cb(void *arg, int status, int timeouts,
struct hostent *hostent) {
gpr_log(GPR_ERROR, "status: %d", status);
grpc_ares_request *r = (grpc_ares_request *)arg;
grpc_error *err = GRPC_ERROR_NONE;
gpr_log(GPR_ERROR, "status: %s", r->name);
grpc_resolved_addresses **addresses = r->addrs_out;
size_t i;
@ -108,8 +108,8 @@ static void on_done_cb(void *arg, int status, int timeouts,
if (status == ARES_SUCCESS) {
gpr_log(GPR_ERROR, "status ARES_SUCCESS");
GRPC_ERROR_UNREF(err);
err = GRPC_ERROR_NONE;
GRPC_ERROR_UNREF(r->error);
r->error = GRPC_ERROR_NONE;
r->success = 1;
if (*addresses == NULL) {
*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) {
gpr_log(GPR_ERROR, "status not ARES_SUCCESS");
// TODO(zyc): add more error detail
if (err == GRPC_ERROR_NONE) {
err = GRPC_ERROR_CREATE("C-ares query error");
if (r->error == GRPC_ERROR_NONE) {
r->error = GRPC_ERROR_CREATE("C-ares query error");
}
}
if (--r->pending_quries == 0) {
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_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->pending_quries = 0;
r->success = 0;
r->error = GRPC_ERROR_NONE;
grpc_closure_init(&r->request_closure, request_resolving_address, r);
grpc_exec_ctx_sched(exec_ctx, &r->request_closure, GRPC_ERROR_NONE, NULL);
}

Loading…
Cancel
Save