Convert tests to new error scheme
diff --git a/src/core/ext/client_config/channel_connectivity.c b/src/core/ext/client_config/channel_connectivity.c
index 1898bf6..9bbb09f 100644
--- a/src/core/ext/client_config/channel_connectivity.c
+++ b/src/core/ext/client_config/channel_connectivity.c
@@ -131,13 +131,13 @@
 
   gpr_mu_lock(&w->mu);
   if (due_to_completion) {
-    grpc_error_unref(w->error);
+    GRPC_ERROR_UNREF(w->error);
     w->error = GRPC_ERROR_NONE;
   }
   switch (w->phase) {
     case WAITING:
       w->phase = CALLING_BACK;
-      grpc_cq_end_op(exec_ctx, w->cq, w->tag, grpc_error_ref(w->error),
+      grpc_cq_end_op(exec_ctx, w->cq, w->tag, GRPC_ERROR_REF(w->error),
                      finished_completion, w, &w->completion_storage);
       break;
     case CALLING_BACK:
diff --git a/src/core/ext/client_config/client_channel.c b/src/core/ext/client_config/client_channel.c
index be9e962..801cbe0 100644
--- a/src/core/ext/client_config/client_channel.c
+++ b/src/core/ext/client_config/client_channel.c
@@ -193,7 +193,7 @@
     if (lb_policy != NULL) {
       GRPC_LB_POLICY_REF(lb_policy, "channel");
       GRPC_LB_POLICY_REF(lb_policy, "config_change");
-      grpc_error_unref(state_error);
+      GRPC_ERROR_UNREF(state_error);
       state =
           grpc_lb_policy_check_connectivity(exec_ctx, lb_policy, &state_error);
     }
@@ -308,7 +308,7 @@
   if (op->disconnect_with_error != GRPC_ERROR_NONE && chand->resolver != NULL) {
     set_channel_connectivity_state_locked(
         exec_ctx, chand, GRPC_CHANNEL_FATAL_FAILURE,
-        grpc_error_ref(op->disconnect_with_error), "disconnect");
+        GRPC_ERROR_REF(op->disconnect_with_error), "disconnect");
     grpc_resolver_shutdown(exec_ctx, chand->resolver);
     GRPC_RESOLVER_UNREF(exec_ctx, chand->resolver, "channel");
     chand->resolver = NULL;
@@ -350,7 +350,7 @@
   if (cpa->connected_subchannel == NULL) {
     /* cancelled, do nothing */
   } else if (error != GRPC_ERROR_NONE) {
-    grpc_exec_ctx_push(exec_ctx, cpa->on_ready, grpc_error_ref(error), NULL);
+    grpc_exec_ctx_push(exec_ctx, cpa->on_ready, GRPC_ERROR_REF(error), NULL);
   } else if (cc_pick_subchannel(exec_ctx, cpa->elem, cpa->initial_metadata,
                                 cpa->initial_metadata_flags,
                                 cpa->connected_subchannel, cpa->on_ready)) {
diff --git a/src/core/ext/client_config/subchannel.c b/src/core/ext/client_config/subchannel.c
index 2c7b227..0f58dab 100644
--- a/src/core/ext/client_config/subchannel.c
+++ b/src/core/ext/client_config/subchannel.c
@@ -602,7 +602,7 @@
   if (c->disconnected) {
     error = GRPC_ERROR_CREATE_REFERENCING("Disconnected", &error, 1);
   } else {
-    grpc_error_ref(error);
+    GRPC_ERROR_REF(error);
   }
   if (error != GRPC_ERROR_NONE) {
     c->next_attempt =
diff --git a/src/core/ext/client_config/subchannel_call_holder.c b/src/core/ext/client_config/subchannel_call_holder.c
index 3b10aa4..b65127b 100644
--- a/src/core/ext/client_config/subchannel_call_holder.c
+++ b/src/core/ext/client_config/subchannel_call_holder.c
@@ -255,10 +255,10 @@
   size_t i;
   for (i = 0; i < holder->waiting_ops_count; i++) {
     grpc_transport_stream_op_finish_with_failure(
-        exec_ctx, &holder->waiting_ops[i], grpc_error_ref(error));
+        exec_ctx, &holder->waiting_ops[i], GRPC_ERROR_REF(error));
   }
   holder->waiting_ops_count = 0;
-  grpc_error_unref(error);
+  GRPC_ERROR_UNREF(error);
 }
 
 char *grpc_subchannel_call_holder_get_peer(
diff --git a/src/core/ext/lb_policy/pick_first/pick_first.c b/src/core/ext/lb_policy/pick_first/pick_first.c
index 48e6246..bc52e28 100644
--- a/src/core/ext/lb_policy/pick_first/pick_first.c
+++ b/src/core/ext/lb_policy/pick_first/pick_first.c
@@ -265,7 +265,7 @@
   pending_pick *pp;
   grpc_connected_subchannel *selected;
 
-  grpc_error_ref(error);
+  GRPC_ERROR_REF(error);
 
   gpr_mu_lock(&p->mu);
 
@@ -281,7 +281,7 @@
       p->checking_connectivity = GRPC_CHANNEL_FATAL_FAILURE;
     }
     grpc_connectivity_state_set(exec_ctx, &p->state_tracker,
-                                p->checking_connectivity, grpc_error_ref(error),
+                                p->checking_connectivity, GRPC_ERROR_REF(error),
                                 "selected_changed");
     if (p->checking_connectivity != GRPC_CHANNEL_FATAL_FAILURE) {
       grpc_connected_subchannel_notify_on_state_change(
@@ -328,9 +328,9 @@
           /* only trigger transient failure when we've tried all alternatives */
           grpc_connectivity_state_set(
               exec_ctx, &p->state_tracker, GRPC_CHANNEL_TRANSIENT_FAILURE,
-              grpc_error_ref(error), "connecting_transient_failure");
+              GRPC_ERROR_REF(error), "connecting_transient_failure");
         }
-        grpc_error_unref(error);
+        GRPC_ERROR_UNREF(error);
         p->checking_connectivity = grpc_subchannel_check_connectivity(
             p->subchannels[p->checking_subchannel], &error);
         if (p->checking_connectivity == GRPC_CHANNEL_TRANSIENT_FAILURE) {
@@ -346,7 +346,7 @@
       case GRPC_CHANNEL_IDLE:
         grpc_connectivity_state_set(
             exec_ctx, &p->state_tracker, GRPC_CHANNEL_CONNECTING,
-            grpc_error_ref(error), "connecting_changed");
+            GRPC_ERROR_REF(error), "connecting_changed");
         grpc_subchannel_notify_on_state_change(
             exec_ctx, p->subchannels[p->checking_subchannel],
             p->base.interested_parties, &p->checking_connectivity,
@@ -359,7 +359,7 @@
         GRPC_SUBCHANNEL_UNREF(exec_ctx, p->subchannels[p->num_subchannels],
                               "pick_first");
         if (p->num_subchannels == 0) {
-          grpc_error_ref(error);
+          GRPC_ERROR_REF(error);
           grpc_connectivity_state_set(
               exec_ctx, &p->state_tracker, GRPC_CHANNEL_FATAL_FAILURE,
               GRPC_ERROR_CREATE_REFERENCING("Pick first exhausted channels",
@@ -377,9 +377,9 @@
         } else {
           grpc_connectivity_state_set(
               exec_ctx, &p->state_tracker, GRPC_CHANNEL_TRANSIENT_FAILURE,
-              grpc_error_ref(error), "subchannel_failed");
+              GRPC_ERROR_REF(error), "subchannel_failed");
           p->checking_subchannel %= p->num_subchannels;
-          grpc_error_unref(error);
+          GRPC_ERROR_UNREF(error);
           p->checking_connectivity = grpc_subchannel_check_connectivity(
               p->subchannels[p->checking_subchannel], &error);
           goto loop;
@@ -389,7 +389,7 @@
 
   gpr_mu_unlock(&p->mu);
 
-  grpc_error_unref(error);
+  GRPC_ERROR_UNREF(error);
 }
 
 static grpc_connectivity_state pf_check_connectivity(grpc_exec_ctx *exec_ctx,
diff --git a/src/core/ext/lb_policy/round_robin/round_robin.c b/src/core/ext/lb_policy/round_robin/round_robin.c
index c119a25..ada2ef9 100644
--- a/src/core/ext/lb_policy/round_robin/round_robin.c
+++ b/src/core/ext/lb_policy/round_robin/round_robin.c
@@ -376,7 +376,7 @@
 
   int unref = 0;
 
-  grpc_error_ref(error);
+  GRPC_ERROR_REF(error);
   gpr_mu_lock(&p->mu);
 
   if (p->shutdown) {
@@ -385,7 +385,7 @@
     switch (sd->connectivity_state) {
       case GRPC_CHANNEL_READY:
         grpc_connectivity_state_set(exec_ctx, &p->state_tracker,
-                                    GRPC_CHANNEL_READY, grpc_error_ref(error),
+                                    GRPC_CHANNEL_READY, GRPC_ERROR_REF(error),
                                     "connecting_ready");
         /* add the newly connected subchannel to the list of connected ones.
          * Note that it goes to the "end of the line". */
@@ -421,7 +421,7 @@
       case GRPC_CHANNEL_IDLE:
         grpc_connectivity_state_set(
             exec_ctx, &p->state_tracker, sd->connectivity_state,
-            grpc_error_ref(error), "connecting_changed");
+            GRPC_ERROR_REF(error), "connecting_changed");
         grpc_subchannel_notify_on_state_change(
             exec_ctx, sd->subchannel, p->base.interested_parties,
             &sd->connectivity_state, &sd->connectivity_changed_closure);
@@ -439,7 +439,7 @@
         }
         grpc_connectivity_state_set(
             exec_ctx, &p->state_tracker, GRPC_CHANNEL_TRANSIENT_FAILURE,
-            grpc_error_ref(error), "connecting_transient_failure");
+            GRPC_ERROR_REF(error), "connecting_transient_failure");
         break;
       case GRPC_CHANNEL_FATAL_FAILURE:
         if (sd->ready_list_node != NULL) {
@@ -456,7 +456,7 @@
 
         unref = 1;
         if (p->num_subchannels == 0) {
-          grpc_error_ref(error);
+          GRPC_ERROR_REF(error);
           grpc_connectivity_state_set(
               exec_ctx, &p->state_tracker, GRPC_CHANNEL_FATAL_FAILURE,
               GRPC_ERROR_CREATE_REFERENCING("Round Robin Channels Exhausted",
@@ -472,7 +472,7 @@
         } else {
           grpc_connectivity_state_set(
               exec_ctx, &p->state_tracker, GRPC_CHANNEL_TRANSIENT_FAILURE,
-              grpc_error_ref(error), "subchannel_failed");
+              GRPC_ERROR_REF(error), "subchannel_failed");
         }
     } /* switch */
   }   /* !unref */
@@ -483,7 +483,7 @@
     GRPC_LB_POLICY_WEAK_UNREF(exec_ctx, &p->base, "round_robin_connectivity");
   }
 
-  grpc_error_unref(error);
+  GRPC_ERROR_UNREF(error);
 }
 
 static grpc_connectivity_state rr_check_connectivity(grpc_exec_ctx *exec_ctx,
diff --git a/src/core/ext/transport/chttp2/server/insecure/server_chttp2.c b/src/core/ext/transport/chttp2/server/insecure/server_chttp2.c
index ef860b4..a4d8880 100644
--- a/src/core/ext/transport/chttp2/server/insecure/server_chttp2.c
+++ b/src/core/ext/transport/chttp2/server/insecure/server_chttp2.c
@@ -139,7 +139,7 @@
     /* we managed to bind some addresses: continue */
   } else {
     for (i = 0; i < resolved->naddrs; i++) {
-      grpc_error_unref(errors[i]);
+      GRPC_ERROR_UNREF(errors[i]);
     }
   }
   gpr_free(errors);
diff --git a/src/core/ext/transport/chttp2/server/secure/server_secure_chttp2.c b/src/core/ext/transport/chttp2/server/secure/server_secure_chttp2.c
index 0702fe9..8cee95a 100644
--- a/src/core/ext/transport/chttp2/server/secure/server_secure_chttp2.c
+++ b/src/core/ext/transport/chttp2/server/secure/server_secure_chttp2.c
@@ -145,7 +145,7 @@
   grpc_server_secure_state *state = statep;
   if (state->destroy_callback != NULL) {
     state->destroy_callback->cb(exec_ctx, state->destroy_callback->cb_arg,
-                                grpc_error_ref(error));
+                                GRPC_ERROR_REF(error));
   }
   grpc_server_security_connector_shutdown(exec_ctx, state->sc);
   state_unref(state);
@@ -249,7 +249,7 @@
     /* we managed to bind some addresses: continue */
   } else {
     for (i = 0; i < resolved->naddrs; i++) {
-      grpc_error_unref(errors[i]);
+      GRPC_ERROR_UNREF(errors[i]);
     }
   }
   gpr_free(errors);
diff --git a/src/core/ext/transport/chttp2/transport/chttp2_transport.c b/src/core/ext/transport/chttp2/transport/chttp2_transport.c
index 14d1c26..dfee1e0 100644
--- a/src/core/ext/transport/chttp2/transport/chttp2_transport.c
+++ b/src/core/ext/transport/chttp2/transport/chttp2_transport.c
@@ -741,7 +741,7 @@
   allow_endpoint_shutdown_locked(exec_ctx, t);
 
   if (error != GRPC_ERROR_NONE) {
-    drop_connection(exec_ctx, t, grpc_error_ref(error));
+    drop_connection(exec_ctx, t, GRPC_ERROR_REF(error));
   }
 
   grpc_chttp2_cleanup_writing(exec_ctx, &t->global, &t->writing);
@@ -749,7 +749,7 @@
   grpc_chttp2_stream_global *stream_global;
   while (grpc_chttp2_list_pop_closed_waiting_for_writing(&t->global,
                                                          &stream_global)) {
-    fail_pending_writes(exec_ctx, stream_global, grpc_error_ref(error));
+    fail_pending_writes(exec_ctx, stream_global, GRPC_ERROR_REF(error));
     GRPC_CHTTP2_STREAM_UNREF(exec_ctx, stream_global, "finish_writes");
   }
 
@@ -1325,10 +1325,10 @@
                                 grpc_error *error) {
   grpc_chttp2_complete_closure_step(
       exec_ctx, stream_global, &stream_global->send_initial_metadata_finished,
-      grpc_error_ref(error));
+      GRPC_ERROR_REF(error));
   grpc_chttp2_complete_closure_step(
       exec_ctx, stream_global, &stream_global->send_trailing_metadata_finished,
-      grpc_error_ref(error));
+      GRPC_ERROR_REF(error));
   grpc_chttp2_complete_closure_step(
       exec_ctx, stream_global, &stream_global->send_message_finished, error);
 }
@@ -1339,7 +1339,7 @@
     grpc_error *error) {
   if (stream_global->read_closed && stream_global->write_closed) {
     /* already closed */
-    grpc_error_unref(error);
+    GRPC_ERROR_UNREF(error);
     return;
   }
   grpc_chttp2_list_add_check_read_ops(transport_global, stream_global);
@@ -1356,7 +1356,7 @@
       grpc_chttp2_list_add_closed_waiting_for_writing(transport_global,
                                                       stream_global);
     } else {
-      fail_pending_writes(exec_ctx, stream_global, grpc_error_ref(error));
+      fail_pending_writes(exec_ctx, stream_global, GRPC_ERROR_REF(error));
     }
   }
   if (stream_global->read_closed && stream_global->write_closed) {
@@ -1372,7 +1372,7 @@
       GRPC_CHTTP2_STREAM_UNREF(exec_ctx, stream_global, "chttp2");
     }
   }
-  grpc_error_unref(error);
+  GRPC_ERROR_UNREF(error);
 }
 
 static void close_from_api(grpc_exec_ctx *exec_ctx,
@@ -1788,7 +1788,7 @@
     *arg->slice = gpr_slice_buffer_take_first(&bs->slices);
     grpc_exec_ctx_push(exec_ctx, arg->on_complete, GRPC_ERROR_NONE, NULL);
   } else if (bs->error != GRPC_ERROR_NONE) {
-    grpc_exec_ctx_push(exec_ctx, arg->on_complete, grpc_error_ref(bs->error),
+    grpc_exec_ctx_push(exec_ctx, arg->on_complete, GRPC_ERROR_REF(bs->error),
                        NULL);
   } else {
     bs->on_next = arg->on_complete;
@@ -1869,7 +1869,7 @@
     void *argp) {
   grpc_chttp2_incoming_byte_stream *bs = argp;
   grpc_error *error = argp;
-  grpc_exec_ctx_push(exec_ctx, bs->on_next, grpc_error_ref(error), NULL);
+  grpc_exec_ctx_push(exec_ctx, bs->on_next, GRPC_ERROR_REF(error), NULL);
   bs->on_next = NULL;
   bs->error = error;
   incoming_byte_stream_unref(exec_ctx, bs);
diff --git a/src/core/ext/transport/chttp2/transport/frame_data.c b/src/core/ext/transport/chttp2/transport/frame_data.c
index 828d042..952a1cc 100644
--- a/src/core/ext/transport/chttp2/transport/frame_data.c
+++ b/src/core/ext/transport/chttp2/transport/frame_data.c
@@ -167,7 +167,7 @@
   switch (p->state) {
     case GRPC_CHTTP2_DATA_ERROR:
       p->state = GRPC_CHTTP2_DATA_ERROR;
-      return grpc_error_ref(p->error);
+      return GRPC_ERROR_REF(p->error);
     fh_0:
     case GRPC_CHTTP2_DATA_FH_0:
       stream_parsing->stats.incoming.framing_bytes++;
@@ -192,7 +192,7 @@
           p->error =
               grpc_error_set_int(p->error, GRPC_ERROR_INT_OFFSET, cur - beg);
           p->state = GRPC_CHTTP2_DATA_ERROR;
-          return grpc_error_ref(p->error);
+          return GRPC_ERROR_REF(p->error);
       }
       if (++cur == end) {
         p->state = GRPC_CHTTP2_DATA_FH_1;
diff --git a/src/core/ext/transport/chttp2/transport/hpack_parser.c b/src/core/ext/transport/chttp2/transport/hpack_parser.c
index 0e337a6..609414b 100644
--- a/src/core/ext/transport/chttp2/transport/hpack_parser.c
+++ b/src/core/ext/transport/chttp2/transport/hpack_parser.c
@@ -1004,14 +1004,14 @@
 static grpc_error *parse_error(grpc_chttp2_hpack_parser *p, const uint8_t *cur,
                                const uint8_t *end, grpc_error *err) {
   GPR_ASSERT(err != GRPC_ERROR_NONE);
-  p->last_error = grpc_error_ref(err);
+  p->last_error = GRPC_ERROR_REF(err);
   p->state = still_parse_error;
   return err;
 }
 
 static grpc_error *still_parse_error(grpc_chttp2_hpack_parser *p,
                                      const uint8_t *cur, const uint8_t *end) {
-  return grpc_error_ref(p->last_error);
+  return GRPC_ERROR_REF(p->last_error);
 }
 
 static grpc_error *parse_illegal_op(grpc_chttp2_hpack_parser *p,
diff --git a/src/core/ext/transport/chttp2/transport/parsing.c b/src/core/ext/transport/chttp2/transport/parsing.c
index 67590ae..24b7de0 100644
--- a/src/core/ext/transport/chttp2/transport/parsing.c
+++ b/src/core/ext/transport/chttp2/transport/parsing.c
@@ -922,7 +922,7 @@
                                         GRPC_CHTTP2_PROTOCOL_ERROR,
                                         &stream_parsing->stats.outgoing));
     } else {
-      grpc_error_unref(err);
+      GRPC_ERROR_UNREF(err);
     }
   }
   return err;
diff --git a/src/core/lib/iomgr/closure.c b/src/core/lib/iomgr/closure.c
index 0e84d13..866110d 100644
--- a/src/core/lib/iomgr/closure.c
+++ b/src/core/lib/iomgr/closure.c
@@ -58,10 +58,10 @@
                                 grpc_error *forced_failure) {
   for (grpc_closure *c = list->head; c != NULL; c = c->next_data.next) {
     if (c->error == GRPC_ERROR_NONE) {
-      c->error = grpc_error_ref(forced_failure);
+      c->error = GRPC_ERROR_REF(forced_failure);
     }
   }
-  grpc_error_unref(forced_failure);
+  GRPC_ERROR_UNREF(forced_failure);
 }
 
 bool grpc_closure_list_empty(grpc_closure_list closure_list) {
diff --git a/src/core/lib/iomgr/error.c b/src/core/lib/iomgr/error.c
index fb8decb..a55f02d 100644
--- a/src/core/lib/iomgr/error.c
+++ b/src/core/lib/iomgr/error.c
@@ -54,9 +54,9 @@
 
 static void *copy_string(void *str) { return gpr_strdup(str); }
 
-static void destroy_err(void *err) { grpc_error_unref(err); }
+static void destroy_err(void *err) { GRPC_ERROR_UNREF(err); }
 
-static void *copy_err(void *err) { return grpc_error_ref(err); }
+static void *copy_err(void *err) { return GRPC_ERROR_REF(err); }
 
 static void destroy_time(void *tm) { gpr_free(tm); }
 
@@ -156,8 +156,9 @@
          err == GRPC_ERROR_CANCELLED;
 }
 
-grpc_error *grpc_error_ref(grpc_error *err) {
+grpc_error *grpc_error_ref(grpc_error *err, const char *file, int line) {
   if (is_special(err)) return err;
+  gpr_log(GPR_DEBUG, "%p: %d -> %d [%s:%d]", err, err->refs.count, err->refs.count + 1, file, line);
   gpr_ref(&err->refs);
   return err;
 }
@@ -168,10 +169,13 @@
   gpr_avl_unref(err->strs);
   gpr_avl_unref(err->errs);
   gpr_avl_unref(err->times);
+  gpr_free(err);
 }
 
-void grpc_error_unref(grpc_error *err) {
-  if (!is_special(err) && gpr_unref(&err->refs)) {
+void grpc_error_unref(grpc_error *err, const char *file, int line) {
+  if (is_special(err)) return;
+  gpr_log(GPR_DEBUG, "%p: %d -> %d [%s:%d]", err, err->refs.count, err->refs.count - 1, file, line);
+  if (gpr_unref(&err->refs)) {
     error_destroy(err);
   }
 }
@@ -188,13 +192,13 @@
                           (void *)(uintptr_t)line);
   err->strs = gpr_avl_add(
       gpr_avl_add(gpr_avl_create(&avl_vtable_strs),
-                  (void *)(uintptr_t)GRPC_ERROR_STR_FILE, (void *)file),
-      (void *)(uintptr_t)GRPC_ERROR_STR_DESCRIPTION, (void *)desc);
+                  (void *)(uintptr_t)GRPC_ERROR_STR_FILE, gpr_strdup(file)),
+      (void *)(uintptr_t)GRPC_ERROR_STR_DESCRIPTION, gpr_strdup(desc));
   err->errs = gpr_avl_create(&avl_vtable_errs);
   for (size_t i = 0; i < num_referencing; i++) {
     if (referencing[i] == GRPC_ERROR_NONE) continue;
     err->errs =
-        gpr_avl_add(err->errs, (void *)(err->next_err++), referencing[i]);
+        gpr_avl_add(err->errs, (void *)(err->next_err++), GRPC_ERROR_REF(referencing[i]));
   }
   err->times = gpr_avl_add(gpr_avl_create(&avl_vtable_times),
                            (void *)(uintptr_t)GRPC_ERROR_TIME_CREATED,
@@ -218,7 +222,7 @@
   out->times = gpr_avl_ref(in->times);
   out->next_err = in->next_err;
   gpr_ref_init(&out->refs, 1);
-  grpc_error_unref(in);
+  GRPC_ERROR_UNREF(in);
   return out;
 }
 
diff --git a/src/core/lib/iomgr/error.h b/src/core/lib/iomgr/error.h
index 143c8be..9e10d0b 100644
--- a/src/core/lib/iomgr/error.h
+++ b/src/core/lib/iomgr/error.h
@@ -83,8 +83,12 @@
   grpc_error_create(__FILE__, __LINE__, desc, NULL, 0)
 #define GRPC_ERROR_CREATE_REFERENCING(desc, errs, count) \
   grpc_error_create(__FILE__, __LINE__, desc, errs, count)
-grpc_error *grpc_error_ref(grpc_error *err);
-void grpc_error_unref(grpc_error *err);
+
+grpc_error *grpc_error_ref(grpc_error *err, const char *file, int line);
+void grpc_error_unref(grpc_error *err, const char *file, int line);
+#define GRPC_ERROR_REF(err) grpc_error_ref(err, __FILE__, __LINE__)
+#define GRPC_ERROR_UNREF(err) grpc_error_unref(err, __FILE__, __LINE__)
+
 grpc_error *grpc_error_set_int(grpc_error *src, grpc_error_ints which,
                                intptr_t value);
 const intptr_t *grpc_error_get_int(grpc_error *error, grpc_error_ints which);
diff --git a/src/core/lib/iomgr/exec_ctx.c b/src/core/lib/iomgr/exec_ctx.c
index cc52c16..3155ed0 100644
--- a/src/core/lib/iomgr/exec_ctx.c
+++ b/src/core/lib/iomgr/exec_ctx.c
@@ -52,7 +52,7 @@
       did_something = true;
       GPR_TIMER_BEGIN("grpc_exec_ctx_flush.cb", 0);
       c->cb(exec_ctx, c->cb_arg, error);
-      grpc_error_unref(error);
+      GRPC_ERROR_UNREF(error);
       GPR_TIMER_END("grpc_exec_ctx_flush.cb", 0);
       c = next;
     }
diff --git a/src/core/lib/iomgr/tcp_server_posix.c b/src/core/lib/iomgr/tcp_server_posix.c
index a46cd6f..17e5e1b 100644
--- a/src/core/lib/iomgr/tcp_server_posix.c
+++ b/src/core/lib/iomgr/tcp_server_posix.c
@@ -516,8 +516,8 @@
   gpr_free(allocated_addr);
   if (sp != NULL) {
     *out_port = sp->port;
-    grpc_error_unref(errs[0]);
-    grpc_error_unref(errs[1]);
+    GRPC_ERROR_UNREF(errs[0]);
+    GRPC_ERROR_UNREF(errs[1]);
     return GRPC_ERROR_NONE;
   } else {
     *out_port = -1;
diff --git a/src/core/lib/iomgr/timer.c b/src/core/lib/iomgr/timer.c
index d785d15..bd8769b 100644
--- a/src/core/lib/iomgr/timer.c
+++ b/src/core/lib/iomgr/timer.c
@@ -307,7 +307,7 @@
   grpc_timer *timer;
   gpr_mu_lock(&shard->mu);
   while ((timer = pop_one(shard, now))) {
-    grpc_exec_ctx_push(exec_ctx, &timer->closure, grpc_error_ref(error), NULL);
+    grpc_exec_ctx_push(exec_ctx, &timer->closure, GRPC_ERROR_REF(error), NULL);
     n++;
   }
   *new_min_deadline = compute_min_deadline(shard);
@@ -362,7 +362,7 @@
         *next, gpr_time_add(now, gpr_time_from_millis(1, GPR_TIMESPAN)));
   }
 
-  grpc_error_unref(error);
+  GRPC_ERROR_UNREF(error);
 
   return (int)n;
 }
diff --git a/src/core/lib/security/credentials/composite/composite_credentials.c b/src/core/lib/security/credentials/composite/composite_credentials.c
index 4a17f7c..18189a8 100644
--- a/src/core/lib/security/credentials/composite/composite_credentials.c
+++ b/src/core/lib/security/credentials/composite/composite_credentials.c
@@ -260,4 +260,3 @@
   c->call_creds = grpc_call_credentials_ref(call_creds);
   return &c->base;
 }
-
diff --git a/src/core/lib/security/credentials/composite/composite_credentials.h b/src/core/lib/security/credentials/composite/composite_credentials.h
index c83f744..3e360c1 100644
--- a/src/core/lib/security/credentials/composite/composite_credentials.h
+++ b/src/core/lib/security/credentials/composite/composite_credentials.h
@@ -69,4 +69,3 @@
 } grpc_composite_call_credentials;
 
 #endif  // GRPC_CORE_LIB_SECURITY_CREDENTIALS_COMPOSITE_CREDENTIALS_H
-
diff --git a/src/core/lib/security/credentials/credentials.c b/src/core/lib/security/credentials/credentials.c
index 29cf9ee..3dde6e5 100644
--- a/src/core/lib/security/credentials/credentials.c
+++ b/src/core/lib/security/credentials/credentials.c
@@ -53,10 +53,9 @@
 
 /* -- Common. -- */
 
-grpc_credentials_metadata_request *
-grpc_credentials_metadata_request_create(grpc_call_credentials *creds,
-                                         grpc_credentials_metadata_cb cb,
-                                         void *user_data) {
+grpc_credentials_metadata_request *grpc_credentials_metadata_request_create(
+    grpc_call_credentials *creds, grpc_credentials_metadata_cb cb,
+    void *user_data) {
   grpc_credentials_metadata_request *r =
       gpr_malloc(sizeof(grpc_credentials_metadata_request));
   r->creds = grpc_call_credentials_ref(creds);
@@ -230,4 +229,3 @@
   }
   return NULL;
 }
-
diff --git a/src/core/lib/security/credentials/fake/fake_credentials.h b/src/core/lib/security/credentials/fake/fake_credentials.h
index 10c2a0b..e2403b5 100644
--- a/src/core/lib/security/credentials/fake/fake_credentials.h
+++ b/src/core/lib/security/credentials/fake/fake_credentials.h
@@ -53,4 +53,3 @@
 } grpc_md_only_test_credentials;
 
 #endif  // GRPC_CORE_LIB_SECURITY_CREDENTIALS_FAKE_CREDENTIALS_H
-
diff --git a/src/core/lib/security/credentials/google_default/google_default_credentials.h b/src/core/lib/security/credentials/google_default/google_default_credentials.h
index 33e8c2e..838989f 100644
--- a/src/core/lib/security/credentials/google_default/google_default_credentials.h
+++ b/src/core/lib/security/credentials/google_default/google_default_credentials.h
@@ -43,5 +43,3 @@
 void grpc_flush_cached_google_default_credentials(void);
 
 #endif  // GRPC_CORE_LIB_SECURITY_CREDENTIALS_GOOGLE_DEFAULT_CREDENTIALS_H
-
-
diff --git a/src/core/lib/security/credentials/iam/iam_credentials.c b/src/core/lib/security/credentials/iam/iam_credentials.c
index ec0f284..89defa7 100644
--- a/src/core/lib/security/credentials/iam/iam_credentials.c
+++ b/src/core/lib/security/credentials/iam/iam_credentials.c
@@ -83,5 +83,3 @@
       c->iam_md, GRPC_IAM_AUTHORITY_SELECTOR_METADATA_KEY, authority_selector);
   return &c->base;
 }
-
-
diff --git a/src/core/lib/security/credentials/iam/iam_credentials.h b/src/core/lib/security/credentials/iam/iam_credentials.h
index 7110eaf..06b4db8 100644
--- a/src/core/lib/security/credentials/iam/iam_credentials.h
+++ b/src/core/lib/security/credentials/iam/iam_credentials.h
@@ -42,6 +42,3 @@
 } grpc_google_iam_credentials;
 
 #endif  // GRPC_CORE_LIB_SECURITY_CREDENTIALS_IAM_CREDENTIALS_H
-
-
-
diff --git a/src/core/lib/security/credentials/jwt/json_token.c b/src/core/lib/security/credentials/jwt/json_token.c
index fd3d0d6..354c131 100644
--- a/src/core/lib/security/credentials/jwt/json_token.c
+++ b/src/core/lib/security/credentials/jwt/json_token.c
@@ -318,4 +318,3 @@
     grpc_jwt_encode_and_sign_override func) {
   g_jwt_encode_and_sign_override = func;
 }
-
diff --git a/src/core/lib/security/credentials/jwt/jwt_credentials.c b/src/core/lib/security/credentials/jwt/jwt_credentials.c
index 9fd0527..8755a96 100644
--- a/src/core/lib/security/credentials/jwt/jwt_credentials.c
+++ b/src/core/lib/security/credentials/jwt/jwt_credentials.c
@@ -158,4 +158,3 @@
   return grpc_service_account_jwt_access_credentials_create_from_auth_json_key(
       grpc_auth_json_key_create_from_string(json_key), token_lifetime);
 }
-
diff --git a/src/core/lib/security/credentials/jwt/jwt_credentials.h b/src/core/lib/security/credentials/jwt/jwt_credentials.h
index 6faf676..6fba3df 100644
--- a/src/core/lib/security/credentials/jwt/jwt_credentials.h
+++ b/src/core/lib/security/credentials/jwt/jwt_credentials.h
@@ -60,4 +60,3 @@
     grpc_auth_json_key key, gpr_timespec token_lifetime);
 
 #endif  // GRPC_CORE_LIB_SECURITY_CREDENTIALS_JWT_CREDENTIALS_H
-
diff --git a/src/core/lib/security/credentials/plugin/plugin_credentials.c b/src/core/lib/security/credentials/plugin/plugin_credentials.c
index b075e14..bae3573 100644
--- a/src/core/lib/security/credentials/plugin/plugin_credentials.c
+++ b/src/core/lib/security/credentials/plugin/plugin_credentials.c
@@ -127,5 +127,3 @@
   c->plugin = plugin;
   return &c->base;
 }
-
-
diff --git a/src/core/lib/security/credentials/plugin/plugin_credentials.h b/src/core/lib/security/credentials/plugin/plugin_credentials.h
index cdabbbd..0b91d2f 100644
--- a/src/core/lib/security/credentials/plugin/plugin_credentials.h
+++ b/src/core/lib/security/credentials/plugin/plugin_credentials.h
@@ -43,6 +43,3 @@
 } grpc_plugin_credentials;
 
 #endif  // GRPC_CORE_LIB_SECURITY_CREDENTIALS_PLUGIN_CREDENTIALS_H
-
-
-
diff --git a/src/core/lib/security/credentials/ssl/ssl_credentials.c b/src/core/lib/security/credentials/ssl/ssl_credentials.c
index ee8d2e4..545bca9 100644
--- a/src/core/lib/security/credentials/ssl/ssl_credentials.c
+++ b/src/core/lib/security/credentials/ssl/ssl_credentials.c
@@ -160,7 +160,6 @@
   if (c->config.pem_root_certs != NULL) gpr_free(c->config.pem_root_certs);
 }
 
-
 static grpc_security_status ssl_server_create_security_connector(
     grpc_server_credentials *creds, grpc_server_security_connector **sc) {
   grpc_ssl_server_credentials *c = (grpc_ssl_server_credentials *)creds;
@@ -170,7 +169,6 @@
 static grpc_server_credentials_vtable ssl_server_vtable = {
     ssl_server_destruct, ssl_server_create_security_connector};
 
-
 static void ssl_build_server_config(
     const char *pem_root_certs, grpc_ssl_pem_key_cert_pair *pem_key_cert_pairs,
     size_t num_key_cert_pairs,
@@ -206,7 +204,6 @@
   }
 }
 
-
 grpc_server_credentials *grpc_ssl_server_credentials_create(
     const char *pem_root_certs, grpc_ssl_pem_key_cert_pair *pem_key_cert_pairs,
     size_t num_key_cert_pairs, int force_client_auth, void *reserved) {
@@ -241,4 +238,3 @@
                           &c->config);
   return &c->base;
 }
-
diff --git a/src/core/lib/security/credentials/ssl/ssl_credentials.h b/src/core/lib/security/credentials/ssl/ssl_credentials.h
index ea4bdab..f23dbdb 100644
--- a/src/core/lib/security/credentials/ssl/ssl_credentials.h
+++ b/src/core/lib/security/credentials/ssl/ssl_credentials.h
@@ -46,4 +46,3 @@
 } grpc_ssl_server_credentials;
 
 #endif /* GRPC_CORE_LIB_SECURITY_CREDENTIALS_SSL_SSL_CREDENTIALS_H */
-
diff --git a/src/core/lib/security/transport/secure_endpoint.c b/src/core/lib/security/transport/secure_endpoint.c
index 9bd5305..a3f01ef 100644
--- a/src/core/lib/security/transport/secure_endpoint.c
+++ b/src/core/lib/security/transport/secure_endpoint.c
@@ -138,7 +138,7 @@
     }
   }
   ep->read_buffer = NULL;
-  grpc_exec_ctx_push(exec_ctx, ep->read_cb, grpc_error_ref(error), NULL);
+  grpc_exec_ctx_push(exec_ctx, ep->read_cb, GRPC_ERROR_REF(error), NULL);
   SECURE_ENDPOINT_UNREF(exec_ctx, ep, "read");
 }
 
diff --git a/src/core/lib/security/transport/server_auth_filter.c b/src/core/lib/security/transport/server_auth_filter.c
index e0a7fb5..d45ec40 100644
--- a/src/core/lib/security/transport/server_auth_filter.c
+++ b/src/core/lib/security/transport/server_auth_filter.c
@@ -169,7 +169,7 @@
       return;
     }
   }
-  grpc_exec_ctx_push(exec_ctx, calld->on_done_recv, grpc_error_ref(error),
+  grpc_exec_ctx_push(exec_ctx, calld->on_done_recv, GRPC_ERROR_REF(error),
                      NULL);
 }
 
diff --git a/src/core/lib/security/util/json_util.c b/src/core/lib/security/util/json_util.c
index 9eda12c..7eed039 100644
--- a/src/core/lib/security/util/json_util.c
+++ b/src/core/lib/security/util/json_util.c
@@ -59,4 +59,3 @@
   *copied_value = gpr_strdup(prop_value);
   return true;
 }
-
diff --git a/src/core/lib/security/util/json_util.h b/src/core/lib/security/util/json_util.h
index 3046412..5959626 100644
--- a/src/core/lib/security/util/json_util.h
+++ b/src/core/lib/security/util/json_util.h
@@ -50,8 +50,6 @@
 // Copies the value of the json child property specified by prop_name.
 // Returns false if the property was not found.
 bool grpc_copy_json_string_property(const grpc_json *json,
-                                    const char *prop_name,
-                                    char **copied_value);
+                                    const char *prop_name, char **copied_value);
 
 #endif  // GRPC_CORE_LIB_SECURITY_UTIL_JSON_UTIL_H
-
diff --git a/src/core/lib/surface/call.c b/src/core/lib/surface/call.c
index 0d6c58d..046f290 100644
--- a/src/core/lib/surface/call.c
+++ b/src/core/lib/surface/call.c
@@ -1082,7 +1082,7 @@
   gpr_mu_lock(&call->mu);
 
   if (error != GRPC_ERROR_NONE) {
-    bctl->error = grpc_error_ref(error);
+    bctl->error = GRPC_ERROR_REF(error);
   } else {
     grpc_metadata_batch *md =
         &call->metadata_batch[1 /* is_receiving */][0 /* is_trailing */];
@@ -1167,10 +1167,10 @@
                        call->final_op.server.cancelled);
     }
 
-    grpc_error_unref(error);
+    GRPC_ERROR_UNREF(error);
     error = GRPC_ERROR_NONE;
   }
-  bctl->error = grpc_error_ref(error);
+  bctl->error = GRPC_ERROR_REF(error);
   gpr_mu_unlock(&call->mu);
   if (gpr_unref(&bctl->steps_to_complete)) {
     post_batch_completion(exec_ctx, bctl);
diff --git a/src/core/lib/transport/connectivity_state.c b/src/core/lib/transport/connectivity_state.c
index c6b274a..6df32a3 100644
--- a/src/core/lib/transport/connectivity_state.c
+++ b/src/core/lib/transport/connectivity_state.c
@@ -61,6 +61,7 @@
                                   grpc_connectivity_state init_state,
                                   const char *name) {
   tracker->current_state = init_state;
+  tracker->current_error = GRPC_ERROR_NONE;
   tracker->watchers = NULL;
   tracker->name = gpr_strdup(name);
 }
@@ -69,7 +70,6 @@
                                      grpc_connectivity_state_tracker *tracker) {
   grpc_error *error;
   grpc_connectivity_state_watcher *w;
-  grpc_error_unref(tracker->current_error);
   while ((w = tracker->watchers)) {
     tracker->watchers = w->next;
 
@@ -82,6 +82,7 @@
     grpc_exec_ctx_push(exec_ctx, w->notify, error, NULL);
     gpr_free(w);
   }
+  GRPC_ERROR_UNREF(tracker->current_error);
   gpr_free(tracker->name);
 }
 
@@ -92,7 +93,7 @@
             grpc_connectivity_state_name(tracker->current_state));
   }
   if (error != NULL) {
-    *error = grpc_error_ref(tracker->current_error);
+    *error = GRPC_ERROR_REF(tracker->current_error);
   }
   return tracker->current_state;
 }
@@ -132,7 +133,7 @@
   } else {
     if (tracker->current_state != *current) {
       *current = tracker->current_state;
-      grpc_exec_ctx_push(exec_ctx, notify, GRPC_ERROR_NONE, NULL);
+      grpc_exec_ctx_push(exec_ctx, notify, GRPC_ERROR_REF(tracker->current_error), NULL);
     } else {
       grpc_connectivity_state_watcher *w = gpr_malloc(sizeof(*w));
       w->current = current;
@@ -165,7 +166,7 @@
       GPR_ASSERT(error != GRPC_ERROR_NONE);
       break;
   }
-  grpc_error_unref(tracker->current_error);
+  GRPC_ERROR_UNREF(tracker->current_error);
   tracker->current_error = error;
   if (tracker->current_state == state) {
     return;
@@ -176,7 +177,7 @@
     *w->current = tracker->current_state;
     tracker->watchers = w->next;
     grpc_exec_ctx_push(exec_ctx, w->notify,
-                       grpc_error_ref(tracker->current_error), NULL);
+                       GRPC_ERROR_REF(tracker->current_error), NULL);
     gpr_free(w);
   }
 }
diff --git a/src/core/lib/transport/transport.c b/src/core/lib/transport/transport.c
index f736297..fdf0f4b 100644
--- a/src/core/lib/transport/transport.c
+++ b/src/core/lib/transport/transport.c
@@ -146,10 +146,10 @@
 void grpc_transport_stream_op_finish_with_failure(grpc_exec_ctx *exec_ctx,
                                                   grpc_transport_stream_op *op,
                                                   grpc_error *error) {
-  grpc_exec_ctx_push(exec_ctx, op->recv_message_ready, grpc_error_ref(error),
+  grpc_exec_ctx_push(exec_ctx, op->recv_message_ready, GRPC_ERROR_REF(error),
                      NULL);
   grpc_exec_ctx_push(exec_ctx, op->recv_initial_metadata_ready,
-                     grpc_error_ref(error), NULL);
+                     GRPC_ERROR_REF(error), NULL);
   grpc_exec_ctx_push(exec_ctx, op->on_complete, error, NULL);
 }
 
@@ -178,7 +178,7 @@
   close_message_data *cmd = p;
   gpr_slice_unref(cmd->message);
   if (cmd->then_call != NULL) {
-    cmd->then_call->cb(exec_ctx, cmd->then_call->cb_arg, grpc_error_ref(error));
+    cmd->then_call->cb(exec_ctx, cmd->then_call->cb_arg, GRPC_ERROR_REF(error));
   }
   gpr_free(cmd);
 }