diff --git a/src/core/ext/resolver/dns/c_ares/dns_resolver_ares.c b/src/core/ext/resolver/dns/c_ares/dns_resolver_ares.c
index 98677ae6dcb86ad150ff36951222e7fa6d6f2461..379df63b8e553b296990acc3eafa6e68b3a3a7df 100644
--- a/src/core/ext/resolver/dns/c_ares/dns_resolver_ares.c
+++ b/src/core/ext/resolver/dns/c_ares/dns_resolver_ares.c
@@ -71,8 +71,6 @@ typedef struct {
   grpc_pollset_set *interested_parties;
 
   /** Closures used by the combiner */
-  grpc_closure dns_ares_shutdown_locked;
-  grpc_closure dns_ares_channel_saw_error_locked;
   grpc_closure dns_ares_on_retry_timer_locked;
   grpc_closure dns_ares_on_resolved_locked;
 
@@ -107,21 +105,20 @@ static void dns_ares_start_resolving_locked(grpc_exec_ctx *exec_ctx,
 static void dns_ares_maybe_finish_next_locked(grpc_exec_ctx *exec_ctx,
                                               ares_dns_resolver *r);
 
-static void dns_ares_shutdown(grpc_exec_ctx *exec_ctx, grpc_resolver *r);
-static void dns_ares_channel_saw_error(grpc_exec_ctx *exec_ctx,
-                                       grpc_resolver *r);
-static void dns_ares_next(grpc_exec_ctx *exec_ctx, grpc_resolver *r,
-                          grpc_channel_args **target_result,
-                          grpc_closure *on_complete);
+static void dns_ares_shutdown_locked(grpc_exec_ctx *exec_ctx, grpc_resolver *r);
+static void dns_ares_channel_saw_error_locked(grpc_exec_ctx *exec_ctx,
+                                              grpc_resolver *r);
+static void dns_ares_next_locked(grpc_exec_ctx *exec_ctx, grpc_resolver *r,
+                                 grpc_channel_args **target_result,
+                                 grpc_closure *on_complete);
 
 static const grpc_resolver_vtable dns_ares_resolver_vtable = {
-    dns_ares_destroy, dns_ares_shutdown, dns_ares_channel_saw_error,
-    dns_ares_next};
+    dns_ares_destroy, dns_ares_shutdown_locked,
+    dns_ares_channel_saw_error_locked, dns_ares_next_locked};
 
-static void dns_ares_shutdown_locked(grpc_exec_ctx *exec_ctx, void *arg,
-                                     grpc_error *error) {
-  ares_dns_resolver *r = arg;
-  GPR_ASSERT(error == GRPC_ERROR_NONE);
+static void dns_ares_shutdown_locked(grpc_exec_ctx *exec_ctx,
+                                     grpc_resolver *resolver) {
+  ares_dns_resolver *r = (ares_dns_resolver *)resolver;
   if (r->have_retry_timer) {
     grpc_timer_cancel(exec_ctx, &r->retry_timer);
   }
@@ -131,33 +128,15 @@ static void dns_ares_shutdown_locked(grpc_exec_ctx *exec_ctx, void *arg,
                        GRPC_ERROR_CREATE("Resolver Shutdown"));
     r->next_completion = NULL;
   }
-  GRPC_RESOLVER_UNREF(exec_ctx, &r->base, "dns-ares-shutdown");
-}
-
-static void dns_ares_shutdown(grpc_exec_ctx *exec_ctx,
-                              grpc_resolver *resolver) {
-  ares_dns_resolver *r = (ares_dns_resolver *)resolver;
-  GRPC_RESOLVER_REF(&r->base, "dns-ares-shutdown");
-  grpc_closure_sched(exec_ctx, &r->dns_ares_shutdown_locked, GRPC_ERROR_NONE);
 }
 
 static void dns_ares_channel_saw_error_locked(grpc_exec_ctx *exec_ctx,
-                                              void *arg, grpc_error *error) {
-  GPR_ASSERT(error == GRPC_ERROR_NONE);
-  ares_dns_resolver *r = arg;
+                                              grpc_resolver *resolver) {
+  ares_dns_resolver *r = (ares_dns_resolver *)resolver;
   if (!r->resolving) {
     gpr_backoff_reset(&r->backoff_state);
     dns_ares_start_resolving_locked(exec_ctx, r);
   }
-  GRPC_RESOLVER_UNREF(exec_ctx, &r->base, "ares-channel-saw-error");
-}
-
-static void dns_ares_channel_saw_error(grpc_exec_ctx *exec_ctx,
-                                       grpc_resolver *resolver) {
-  ares_dns_resolver *r = (ares_dns_resolver *)resolver;
-  GRPC_RESOLVER_REF(&r->base, "ares-channel-saw-error");
-  grpc_closure_sched(exec_ctx, &r->dns_ares_channel_saw_error_locked,
-                     GRPC_ERROR_NONE);
 }
 
 static void dns_ares_on_retry_timer_locked(grpc_exec_ctx *exec_ctx, void *arg,
@@ -218,46 +197,21 @@ static void dns_ares_on_resolved_locked(grpc_exec_ctx *exec_ctx, void *arg,
   GRPC_RESOLVER_UNREF(exec_ctx, &r->base, "dns-resolving");
 }
 
-typedef struct dns_ares_next_locked_args {
-  grpc_resolver *resolver;
-  grpc_channel_args **target_result;
-  grpc_closure *on_complete;
-} dns_ares_next_locked_args;
-
-static void dns_ares_next_locked(grpc_exec_ctx *exec_ctx, void *arg,
-                                 grpc_error *error) {
-  GPR_ASSERT(error == GRPC_ERROR_NONE);
-  dns_ares_next_locked_args *args = arg;
-  ares_dns_resolver *r = (ares_dns_resolver *)args->resolver;
+static void dns_ares_next_locked(grpc_exec_ctx *exec_ctx,
+                                 grpc_resolver *resolver,
+                                 grpc_channel_args **target_result,
+                                 grpc_closure *on_complete) {
   gpr_log(GPR_DEBUG, "dns_ares_next is called.");
+  ares_dns_resolver *r = (ares_dns_resolver *)resolver;
   GPR_ASSERT(!r->next_completion);
-  r->next_completion = args->on_complete;
-  r->target_result = args->target_result;
-  gpr_free(arg);
+  r->next_completion = on_complete;
+  r->target_result = target_result;
   if (r->resolved_version == 0 && !r->resolving) {
     gpr_backoff_reset(&r->backoff_state);
     dns_ares_start_resolving_locked(exec_ctx, r);
   } else {
     dns_ares_maybe_finish_next_locked(exec_ctx, r);
   }
-  GRPC_RESOLVER_UNREF(exec_ctx, &r->base, "ares-next");
-}
-
-static void dns_ares_next(grpc_exec_ctx *exec_ctx, grpc_resolver *resolver,
-                          grpc_channel_args **target_result,
-                          grpc_closure *on_complete) {
-  ares_dns_resolver *r = (ares_dns_resolver *)resolver;
-  dns_ares_next_locked_args *args =
-      gpr_zalloc(sizeof(dns_ares_next_locked_args));
-  args->target_result = target_result;
-  args->on_complete = on_complete;
-  args->resolver = resolver;
-  GRPC_RESOLVER_REF(resolver, "ares-next");
-  grpc_closure_sched(
-      exec_ctx,
-      grpc_closure_create(dns_ares_next_locked, args,
-                          grpc_combiner_scheduler(r->base.combiner, false)),
-      GRPC_ERROR_NONE);
 }
 
 static void dns_ares_start_resolving_locked(grpc_exec_ctx *exec_ctx,
@@ -323,11 +277,6 @@ static grpc_resolver *dns_ares_create(grpc_exec_ctx *exec_ctx,
                    GRPC_DNS_RECONNECT_JITTER,
                    GRPC_DNS_MIN_CONNECT_TIMEOUT_SECONDS * 1000,
                    GRPC_DNS_RECONNECT_MAX_BACKOFF_SECONDS * 1000);
-  grpc_closure_init(&r->dns_ares_shutdown_locked, dns_ares_shutdown_locked, r,
-                    grpc_combiner_scheduler(r->base.combiner, false));
-  grpc_closure_init(&r->dns_ares_channel_saw_error_locked,
-                    dns_ares_channel_saw_error_locked, r,
-                    grpc_combiner_scheduler(r->base.combiner, false));
   grpc_closure_init(&r->dns_ares_on_retry_timer_locked,
                     dns_ares_on_retry_timer_locked, r,
                     grpc_combiner_scheduler(r->base.combiner, false));
@@ -370,7 +319,7 @@ static grpc_resolver_factory *dns_ares_resolver_factory_create() {
 void grpc_resolver_dns_ares_init(void) {
   char *resolver = gpr_getenv("GRPC_DNS_RESOLVER");
   /* TODO(zyc): Turn on c-ares based resolver by default after the address
-     sorter is added. */
+     sorter and the CNAME support are added. */
   if (resolver != NULL && gpr_stricmp(resolver, "ares") == 0) {
     grpc_error *error = grpc_ares_init();
     if (error != GRPC_ERROR_NONE) {
diff --git a/src/core/ext/resolver/dns/c_ares/grpc_ares_ev_driver_posix.c b/src/core/ext/resolver/dns/c_ares/grpc_ares_ev_driver_posix.c
index 637eaaf86b2a827ce19df94f4b77b8844210a8da..fb32b850ce2b3c121d578c15689cecb4e489395e 100644
--- a/src/core/ext/resolver/dns/c_ares/grpc_ares_ev_driver_posix.c
+++ b/src/core/ext/resolver/dns/c_ares/grpc_ares_ev_driver_posix.c
@@ -296,7 +296,6 @@ static void grpc_ares_notify_on_event_locked(grpc_exec_ctx *exec_ctx,
   while (ev_driver->fds != NULL) {
     fd_node *cur = ev_driver->fds;
     ev_driver->fds = ev_driver->fds->next;
-    // grpc_fd_shutdown(exec_ctx, cur->grpc_fd);
     fd_node_destroy(exec_ctx, cur);
   }
   ev_driver->fds = new_list;