fix memory leak in left_overs slice

pull/10925/head
jiangtaoli2016 8 years ago
parent cf760a81a0
commit 0882387486
  1. 7
      src/core/lib/security/transport/security_handshaker.c

@ -169,19 +169,16 @@ static void on_peer_checked(grpc_exec_ctx *exec_ctx, void *arg,
result = tsi_handshaker_result_get_unused_bytes( result = tsi_handshaker_result_get_unused_bytes(
h->handshaker_result, &unused_bytes, &unused_bytes_size); h->handshaker_result, &unused_bytes, &unused_bytes_size);
if (unused_bytes_size > 0) { if (unused_bytes_size > 0) {
gpr_slice slice = grpc_slice slice =
grpc_slice_from_copied_buffer((char *)unused_bytes, unused_bytes_size); grpc_slice_from_copied_buffer((char *)unused_bytes, unused_bytes_size);
grpc_slice_buffer_add(&h->left_overs, slice); grpc_slice_buffer_add(&h->left_overs, slice);
} }
// Create secure endpoint. // Create secure endpoint.
h->args->endpoint = grpc_secure_endpoint_create( h->args->endpoint = grpc_secure_endpoint_create(
protector, h->args->endpoint, h->left_overs.slices, h->left_overs.count); protector, h->args->endpoint, h->left_overs.slices, h->left_overs.count);
h->left_overs.count = 0;
h->left_overs.length = 0;
tsi_handshaker_result_destroy(h->handshaker_result); tsi_handshaker_result_destroy(h->handshaker_result);
h->handshaker_result = NULL; h->handshaker_result = NULL;
// Clear out the read buffer before it gets passed to the transport, // Clear out the read buffer before it gets passed to the transport.
// since any excess bytes were already copied to h->left_overs.
grpc_slice_buffer_reset_and_unref_internal(exec_ctx, h->args->read_buffer); grpc_slice_buffer_reset_and_unref_internal(exec_ctx, h->args->read_buffer);
// Add auth context to channel args. // Add auth context to channel args.
grpc_arg auth_context_arg = grpc_auth_context_to_arg(h->auth_context); grpc_arg auth_context_arg = grpc_auth_context_to_arg(h->auth_context);

Loading…
Cancel
Save