aboutsummaryrefslogtreecommitdiffhomepage
path: root/src/core/lib/surface
diff options
context:
space:
mode:
authorGravatar Craig Tiller <ctiller@google.com>2017-01-06 16:07:45 -0800
committerGravatar Craig Tiller <ctiller@google.com>2017-01-06 16:07:45 -0800
commit1c4775c3eec28484ce5e0bf86dcfb562d4276d78 (patch)
tree08667d296f71e201e3e764f4d08544303cb906f1 /src/core/lib/surface
parentf927ad152b23bc6b469140e92bb2f9cb56d5541f (diff)
Fix refcounting bug
Diffstat (limited to 'src/core/lib/surface')
-rw-r--r--src/core/lib/surface/call.c10
1 files changed, 7 insertions, 3 deletions
diff --git a/src/core/lib/surface/call.c b/src/core/lib/surface/call.c
index f53e940fde..fde3430388 100644
--- a/src/core/lib/surface/call.c
+++ b/src/core/lib/surface/call.c
@@ -536,7 +536,6 @@ static void done_termination(grpc_exec_ctx *exec_ctx, void *tcp,
grpc_error *error) {
termination_closure *tc = tcp;
GRPC_CALL_INTERNAL_UNREF(exec_ctx, tc->call, "termination");
- GRPC_ERROR_UNREF(tc->error);
gpr_free(tc);
}
@@ -966,9 +965,14 @@ static grpc_error *consolidate_batch_errors(batch_control *bctl) {
if (n == 0) {
return GRPC_ERROR_NONE;
} else if (n == 1) {
- return GRPC_ERROR_REF(bctl->errors[0]);
+ return bctl->errors[0];
} else {
- return GRPC_ERROR_CREATE_REFERENCING("Call batch failed", bctl->errors, n);
+ grpc_error *error =
+ GRPC_ERROR_CREATE_REFERENCING("Call batch failed", bctl->errors, n);
+ for (size_t i = 0; i < n; i++) {
+ GRPC_ERROR_UNREF(bctl->errors[i]);
+ }
+ return error;
}
}