From db53cc0961e8f48bc2f45193052fbef22242d1ed Mon Sep 17 00:00:00 2001 From: Yuchen Zeng Date: Wed, 10 Aug 2016 05:04:53 -0700 Subject: [PATCH] Fix node test --- binding.gyp | 3 +++ package.json | 5 +++-- src/core/ext/resolver/dns/c_ares/dns_resolver.c | 8 ++++++++ src/core/ext/resolver/dns/c_ares/grpc_ares_wrapper.c | 7 ++++++- templates/binding.gyp.template | 7 +++++++ 5 files changed, 27 insertions(+), 3 deletions(-) diff --git a/binding.gyp b/binding.gyp index e522e6d16bd..db18f7374fd 100644 --- a/binding.gyp +++ b/binding.gyp @@ -485,6 +485,7 @@ }] ], 'targets': [ + { 'cflags': [ '-std=c99', @@ -562,6 +563,7 @@ 'type': 'static_library', 'dependencies': [ 'gpr', + 'node_modules/cares/deps/cares/cares.gyp:cares', ], 'sources': [ 'src/core/lib/surface/init.c', @@ -819,6 +821,7 @@ "dependencies": [ "grpc", "gpr", + "node_modules/cares/deps/cares/cares.gyp:cares", ] }, { diff --git a/package.json b/package.json index 0e229c9842b..4b175fe4c5f 100644 --- a/package.json +++ b/package.json @@ -23,14 +23,15 @@ "test": "./node_modules/.bin/mocha src/node/test && npm run-script lint", "gen_docs": "./node_modules/.bin/jsdoc -c src/node/jsdoc_conf.json", "coverage": "./node_modules/.bin/istanbul cover ./node_modules/.bin/_mocha src/node/test", - "install": "./node_modules/.bin/node-pre-gyp install --fallback-to-build" + "install": "./node_modules/.bin/node-pre-gyp install --fallback-to-build --library='static_library'" }, "bundledDependencies": ["node-pre-gyp"], "dependencies": { "arguejs": "^0.2.3", "lodash": "^3.9.3", "nan": "^2.0.0", - "protobufjs": "^4.0.0" + "protobufjs": "^4.0.0", + "cares": "^1.1.0" }, "devDependencies": { "async": "^1.5.0", diff --git a/src/core/ext/resolver/dns/c_ares/dns_resolver.c b/src/core/ext/resolver/dns/c_ares/dns_resolver.c index e741f19b6f3..bbc6ceaf6de 100644 --- a/src/core/ext/resolver/dns/c_ares/dns_resolver.c +++ b/src/core/ext/resolver/dns/c_ares/dns_resolver.c @@ -177,6 +177,11 @@ static void dns_on_resolved(grpc_exec_ctx *exec_ctx, void *arg, grpc_client_config_set_lb_policy(config, lb_policy); GRPC_LB_POLICY_UNREF(exec_ctx, lb_policy, "construction"); } + if (r->pollent) { + grpc_polling_entity_del_from_pollset_set(exec_ctx, r->pollent, + r->base.pollset_set); + r->pollent = NULL; + } grpc_resolved_addresses_destroy(addresses); } else { gpr_log(GPR_ERROR, "addresses == NULL"); @@ -228,6 +233,9 @@ static void dns_next(grpc_exec_ctx *exec_ctx, grpc_resolver *resolver, r->pollent = pollent; grpc_polling_entity_add_to_pollset_set(exec_ctx, pollent, r->base.pollset_set); + } else { + gpr_log(GPR_ERROR, "pollent is NULL"); + r->pollent = NULL; } r->resolving = 1; r->addresses = NULL; diff --git a/src/core/ext/resolver/dns/c_ares/grpc_ares_wrapper.c b/src/core/ext/resolver/dns/c_ares/grpc_ares_wrapper.c index 224f0957dbd..ef9ec96dc66 100644 --- a/src/core/ext/resolver/dns/c_ares/grpc_ares_wrapper.c +++ b/src/core/ext/resolver/dns/c_ares/grpc_ares_wrapper.c @@ -242,14 +242,18 @@ grpc_ares_request *grpc_resolve_address_ares_impl( err = grpc_error_set_str(GRPC_ERROR_CREATE("unparseable host:port"), GRPC_ERROR_STR_TARGET_ADDRESS, name); grpc_exec_ctx_sched(exec_ctx, on_done, err, NULL); + goto done; } else if (port == NULL) { if (default_port == NULL) { err = grpc_error_set_str(GRPC_ERROR_CREATE("no port in name"), GRPC_ERROR_STR_TARGET_ADDRESS, name); grpc_exec_ctx_sched(exec_ctx, on_done, err, NULL); + goto done; } port = gpr_strdup(default_port); - } else if (try_fake_resolve(host, port, addrs)) { + } + + if (try_fake_resolve(host, port, addrs)) { grpc_exec_ctx_sched(exec_ctx, on_done, GRPC_ERROR_NONE, NULL); } else { err = grpc_ares_ev_driver_create(&ev_driver, pollset_set); @@ -269,6 +273,7 @@ grpc_ares_request *grpc_resolve_address_ares_impl( grpc_exec_ctx_sched(exec_ctx, &r->request_closure, GRPC_ERROR_NONE, NULL); } +done: gpr_free(host); gpr_free(port); return r; diff --git a/templates/binding.gyp.template b/templates/binding.gyp.template index 6b9f44c56fc..739c016b1df 100644 --- a/templates/binding.gyp.template +++ b/templates/binding.gyp.template @@ -173,6 +173,13 @@ }] ], 'targets': [ + <% + for lib in libs: + if 'grpc' in lib.transitive_deps or lib.name == 'grpc': + lib.deps.append('node_modules/cares/deps/cares/cares.gyp:cares') + for module in node_modules: + module.deps.append('node_modules/cares/deps/cares/cares.gyp:cares') + %> % for module in node_modules: % for lib in libs: % if lib.name in module.transitive_deps and lib.name not in ('boringssl', 'z'):