diff --git a/src/core/lib/surface/server.c b/src/core/lib/surface/server.c
index be16162e7ff7bdcf35194ca569cad7282a69af9e..3a90308058c7f03c510c85f6553995c17178f8fb 100644
--- a/src/core/lib/surface/server.c
+++ b/src/core/lib/surface/server.c
@@ -842,6 +842,7 @@ static void accept_stream(grpc_exec_ctx *exec_ctx, void *cd,
       grpc_call_stack_element(grpc_call_get_call_stack(call), 0);
   if (error != GRPC_ERROR_NONE) {
     got_initial_metadata(exec_ctx, elem, error);
+    GRPC_ERROR_UNREF(error);
     return;
   }
   call_data *calld = elem->call_data;