diff options
author | 2017-01-06 16:07:45 -0800 | |
---|---|---|
committer | 2017-01-06 16:07:45 -0800 | |
commit | 1c4775c3eec28484ce5e0bf86dcfb562d4276d78 (patch) | |
tree | 08667d296f71e201e3e764f4d08544303cb906f1 /src/core/lib/surface | |
parent | f927ad152b23bc6b469140e92bb2f9cb56d5541f (diff) |
Fix refcounting bug
Diffstat (limited to 'src/core/lib/surface')
-rw-r--r-- | src/core/lib/surface/call.c | 10 |
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; } } |