From 05d73af3d18ec301d2778f343edd1cae7d4acd1a Mon Sep 17 00:00:00 2001 From: "Mark D. Roth" Date: Wed, 27 Jul 2016 15:52:46 +0000 Subject: [PATCH 1/3] Fixed asan failure and some refcounting bugs. --- src/core/ext/client_config/subchannel_call_holder.c | 2 +- src/core/lib/channel/channel_stack.c | 9 +++++++-- src/core/lib/channel/connected_channel.c | 2 +- src/core/lib/surface/call.c | 2 +- test/core/end2end/tests/filter_call_init_fails.c | 6 ++++-- third_party/protobuf | 2 +- 6 files changed, 15 insertions(+), 8 deletions(-) diff --git a/src/core/ext/client_config/subchannel_call_holder.c b/src/core/ext/client_config/subchannel_call_holder.c index ac286825f68..be6d054af4e 100644 --- a/src/core/ext/client_config/subchannel_call_holder.c +++ b/src/core/ext/client_config/subchannel_call_holder.c @@ -170,7 +170,7 @@ retry: &subchannel_call); if (error != GRPC_ERROR_NONE) { subchannel_call = CANCELLED_CALL; - fail_locked(exec_ctx, holder, error); + fail_locked(exec_ctx, holder, GRPC_ERROR_REF(error)); grpc_transport_stream_op_finish_with_failure(exec_ctx, op, error); } gpr_atm_rel_store(&holder->subchannel_call, diff --git a/src/core/lib/channel/channel_stack.c b/src/core/lib/channel/channel_stack.c index 70062e0c3b0..7fcc0ef97f4 100644 --- a/src/core/lib/channel/channel_stack.c +++ b/src/core/lib/channel/channel_stack.c @@ -189,8 +189,13 @@ grpc_error *grpc_call_stack_init(grpc_exec_ctx *exec_ctx, call_elems[i].call_data = user_data; grpc_error *error = call_elems[i].filter->init_call_elem(exec_ctx, &call_elems[i], &args); - if (error != GRPC_ERROR_NONE && first_error == GRPC_ERROR_NONE) - first_error = error; + if (error != GRPC_ERROR_NONE) { + if (first_error == GRPC_ERROR_NONE) { + first_error = error; + } else { + GRPC_ERROR_UNREF(error); + } + } user_data += ROUND_UP_TO_ALIGNMENT_SIZE(call_elems[i].filter->sizeof_call_data); } diff --git a/src/core/lib/channel/connected_channel.c b/src/core/lib/channel/connected_channel.c index ecafcc99c79..bad1c50a71c 100644 --- a/src/core/lib/channel/connected_channel.c +++ b/src/core/lib/channel/connected_channel.c @@ -90,7 +90,7 @@ static grpc_error *init_call_elem(grpc_exec_ctx *exec_ctx, exec_ctx, chand->transport, TRANSPORT_STREAM_FROM_CALL_DATA(calld), &args->call_stack->refcount, args->server_transport_data); return r == 0 ? GRPC_ERROR_NONE - : GRPC_ERROR_CREATE("transport initialization failed"); + : GRPC_ERROR_CREATE("transport stream initialization failed"); } static void set_pollset_or_pollset_set(grpc_exec_ctx *exec_ctx, diff --git a/src/core/lib/surface/call.c b/src/core/lib/surface/call.c index 345698092a0..b3bf1427a3e 100644 --- a/src/core/lib/surface/call.c +++ b/src/core/lib/surface/call.c @@ -274,7 +274,7 @@ grpc_call *grpc_call_create( grpc_error_get_str(error, GRPC_ERROR_STR_DESCRIPTION); close_with_status(&exec_ctx, call, (grpc_status_code)status, error_str == NULL ? "unknown error" : error_str); - grpc_error_unref(error); + GRPC_ERROR_UNREF(error); } if (cq != NULL) { GPR_ASSERT( diff --git a/test/core/end2end/tests/filter_call_init_fails.c b/test/core/end2end/tests/filter_call_init_fails.c index 4980b372784..08c377a281c 100644 --- a/test/core/end2end/tests/filter_call_init_fails.c +++ b/test/core/end2end/tests/filter_call_init_fails.c @@ -246,8 +246,10 @@ static bool maybe_add_filter(grpc_channel_stack_builder *builder, void *arg) { grpc_channel_stack_builder_iterator *it = grpc_channel_stack_builder_create_iterator_at_last(builder); GPR_ASSERT(grpc_channel_stack_builder_move_prev(it)); - return grpc_channel_stack_builder_add_filter_before(it, &test_filter, NULL, - NULL); + const bool retval = grpc_channel_stack_builder_add_filter_before( + it, &test_filter, NULL, NULL); + grpc_channel_stack_builder_iterator_destroy(it); + return retval; } else { return true; } diff --git a/third_party/protobuf b/third_party/protobuf index bdeb215cab2..a1938b2aa9c 160000 --- a/third_party/protobuf +++ b/third_party/protobuf @@ -1 +1 @@ -Subproject commit bdeb215cab2985195325fcd5e70c3fa751f46e0f +Subproject commit a1938b2aa9ca86ce7ce50c27ff9737c1008d2a03 From f9eef0bfd32e4a9b18c6fcdb5f73b40baec792e9 Mon Sep 17 00:00:00 2001 From: "Mark D. Roth" Date: Wed, 27 Jul 2016 17:05:37 +0000 Subject: [PATCH 2/3] Undo accidental revert to old version of protobuf code. --- third_party/protobuf | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/third_party/protobuf b/third_party/protobuf index a1938b2aa9c..ba52f2b6780 160000 --- a/third_party/protobuf +++ b/third_party/protobuf @@ -1 +1 @@ -Subproject commit a1938b2aa9ca86ce7ce50c27ff9737c1008d2a03 +Subproject commit ba52f2b6780fa5e6bee86cf7e8ee6f6ba617862c From 9fd00425c50800906f4deb2c5aafa9b64217b54c Mon Sep 17 00:00:00 2001 From: "Mark D. Roth" Date: Wed, 27 Jul 2016 18:36:26 +0000 Subject: [PATCH 3/3] Yet another attempt to undo my protobuf version screw-up. --- third_party/protobuf | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/third_party/protobuf b/third_party/protobuf index ba52f2b6780..bdeb215cab2 160000 --- a/third_party/protobuf +++ b/third_party/protobuf @@ -1 +1 @@ -Subproject commit ba52f2b6780fa5e6bee86cf7e8ee6f6ba617862c +Subproject commit bdeb215cab2985195325fcd5e70c3fa751f46e0f