From db53cc0961e8f48bc2f45193052fbef22242d1ed Mon Sep 17 00:00:00 2001
From: Yuchen Zeng <zyc@google.com>
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 e522e6d16b..db18f7374f 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 0e229c9842..4b175fe4c5 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 e741f19b6f..bbc6ceaf6d 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 224f0957db..ef9ec96dc6 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 6b9f44c56f..739c016b1d 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'):
-- 
GitLab