diff options
author | 2017-12-08 14:02:18 -0800 | |
---|---|---|
committer | 2017-12-08 14:02:18 -0800 | |
commit | 99024d64367b62c98f03dda5c800c7418bcbf123 (patch) | |
tree | c1fdbd9705d483107279770f2860342405ae2bbd /src/core/lib/compression | |
parent | 5c5bafff5a7974b54cb16cbf2222580bc0349e77 (diff) | |
parent | 94e676e10f8c739289924b8458a246699e3623ce (diff) |
Merge remote-tracking branch 'upstream/master' into fix-stream-compression-config-interface
Diffstat (limited to 'src/core/lib/compression')
-rw-r--r-- | src/core/lib/compression/compression.cc | 10 | ||||
-rw-r--r-- | src/core/lib/compression/message_compress.cc | 42 | ||||
-rw-r--r-- | src/core/lib/compression/message_compress.h | 6 | ||||
-rw-r--r-- | src/core/lib/compression/stream_compression_gzip.cc | 20 |
4 files changed, 36 insertions, 42 deletions
diff --git a/src/core/lib/compression/compression.cc b/src/core/lib/compression/compression.cc index a5b123b4e2..99e6014b23 100644 --- a/src/core/lib/compression/compression.cc +++ b/src/core/lib/compression/compression.cc @@ -91,11 +91,11 @@ grpc_compression_algorithm grpc_compression_algorithm_for_level( // TODO(mxyan): Design algorithm to select from all algorithms, including // stream compression algorithm if (!grpc_compression_algorithm_from_message_stream_compression_algorithm( - &algo, - grpc_message_compression_algorithm_for_level( - level, - grpc_compression_bitset_to_message_bitset(accepted_encodings)), - static_cast<grpc_stream_compression_algorithm>(0))){ + &algo, + grpc_message_compression_algorithm_for_level( + level, + grpc_compression_bitset_to_message_bitset(accepted_encodings)), + static_cast<grpc_stream_compression_algorithm>(0))) { gpr_log(GPR_ERROR, "Parse compression level error"); return GRPC_COMPRESS_NONE; } diff --git a/src/core/lib/compression/message_compress.cc b/src/core/lib/compression/message_compress.cc index d174992355..1e9b0f10ee 100644 --- a/src/core/lib/compression/message_compress.cc +++ b/src/core/lib/compression/message_compress.cc @@ -29,8 +29,8 @@ #define OUTPUT_BLOCK_SIZE 1024 -static int zlib_body(grpc_exec_ctx* exec_ctx, z_stream* zs, - grpc_slice_buffer* input, grpc_slice_buffer* output, +static int zlib_body(z_stream* zs, grpc_slice_buffer* input, + grpc_slice_buffer* output, int (*flate)(z_stream* zs, int flush)) { int r; int flush; @@ -74,7 +74,7 @@ static int zlib_body(grpc_exec_ctx* exec_ctx, z_stream* zs, return 1; error: - grpc_slice_unref_internal(exec_ctx, outbuf); + grpc_slice_unref_internal(outbuf); return 0; } @@ -84,8 +84,8 @@ static void* zalloc_gpr(void* opaque, unsigned int items, unsigned int size) { static void zfree_gpr(void* opaque, void* address) { gpr_free(address); } -static int zlib_compress(grpc_exec_ctx* exec_ctx, grpc_slice_buffer* input, - grpc_slice_buffer* output, int gzip) { +static int zlib_compress(grpc_slice_buffer* input, grpc_slice_buffer* output, + int gzip) { z_stream zs; int r; size_t i; @@ -97,11 +97,10 @@ static int zlib_compress(grpc_exec_ctx* exec_ctx, grpc_slice_buffer* input, r = deflateInit2(&zs, Z_DEFAULT_COMPRESSION, Z_DEFLATED, 15 | (gzip ? 16 : 0), 8, Z_DEFAULT_STRATEGY); GPR_ASSERT(r == Z_OK); - r = zlib_body(exec_ctx, &zs, input, output, deflate) && - output->length < input->length; + r = zlib_body(&zs, input, output, deflate) && output->length < input->length; if (!r) { for (i = count_before; i < output->count; i++) { - grpc_slice_unref_internal(exec_ctx, output->slices[i]); + grpc_slice_unref_internal(output->slices[i]); } output->count = count_before; output->length = length_before; @@ -110,8 +109,8 @@ static int zlib_compress(grpc_exec_ctx* exec_ctx, grpc_slice_buffer* input, return r; } -static int zlib_decompress(grpc_exec_ctx* exec_ctx, grpc_slice_buffer* input, - grpc_slice_buffer* output, int gzip) { +static int zlib_decompress(grpc_slice_buffer* input, grpc_slice_buffer* output, + int gzip) { z_stream zs; int r; size_t i; @@ -122,10 +121,10 @@ static int zlib_decompress(grpc_exec_ctx* exec_ctx, grpc_slice_buffer* input, zs.zfree = zfree_gpr; r = inflateInit2(&zs, 15 | (gzip ? 16 : 0)); GPR_ASSERT(r == Z_OK); - r = zlib_body(exec_ctx, &zs, input, output, inflate); + r = zlib_body(&zs, input, output, inflate); if (!r) { for (i = count_before; i < output->count; i++) { - grpc_slice_unref_internal(exec_ctx, output->slices[i]); + grpc_slice_unref_internal(output->slices[i]); } output->count = count_before; output->length = length_before; @@ -142,8 +141,7 @@ static int copy(grpc_slice_buffer* input, grpc_slice_buffer* output) { return 1; } -static int compress_inner(grpc_exec_ctx* exec_ctx, - grpc_message_compression_algorithm algorithm, +static int compress_inner(grpc_message_compression_algorithm algorithm, grpc_slice_buffer* input, grpc_slice_buffer* output) { switch (algorithm) { case GRPC_MESSAGE_COMPRESS_NONE: @@ -151,9 +149,9 @@ static int compress_inner(grpc_exec_ctx* exec_ctx, rely on that here */ return 0; case GRPC_MESSAGE_COMPRESS_DEFLATE: - return zlib_compress(exec_ctx, input, output, 0); + return zlib_compress(input, output, 0); case GRPC_MESSAGE_COMPRESS_GZIP: - return zlib_compress(exec_ctx, input, output, 1); + return zlib_compress(input, output, 1); case GRPC_MESSAGE_COMPRESS_ALGORITHMS_COUNT: break; } @@ -161,26 +159,24 @@ static int compress_inner(grpc_exec_ctx* exec_ctx, return 0; } -int grpc_msg_compress(grpc_exec_ctx* exec_ctx, - grpc_message_compression_algorithm algorithm, +int grpc_msg_compress(grpc_message_compression_algorithm algorithm, grpc_slice_buffer* input, grpc_slice_buffer* output) { - if (!compress_inner(exec_ctx, algorithm, input, output)) { + if (!compress_inner(algorithm, input, output)) { copy(input, output); return 0; } return 1; } -int grpc_msg_decompress(grpc_exec_ctx* exec_ctx, - grpc_message_compression_algorithm algorithm, +int grpc_msg_decompress(grpc_message_compression_algorithm algorithm, grpc_slice_buffer* input, grpc_slice_buffer* output) { switch (algorithm) { case GRPC_MESSAGE_COMPRESS_NONE: return copy(input, output); case GRPC_MESSAGE_COMPRESS_DEFLATE: - return zlib_decompress(exec_ctx, input, output, 0); + return zlib_decompress(input, output, 0); case GRPC_MESSAGE_COMPRESS_GZIP: - return zlib_decompress(exec_ctx, input, output, 1); + return zlib_decompress(input, output, 1); case GRPC_MESSAGE_COMPRESS_ALGORITHMS_COUNT: break; } diff --git a/src/core/lib/compression/message_compress.h b/src/core/lib/compression/message_compress.h index 2882bf7075..ed9e5bfa39 100644 --- a/src/core/lib/compression/message_compress.h +++ b/src/core/lib/compression/message_compress.h @@ -26,15 +26,13 @@ /* compress 'input' to 'output' using 'algorithm'. On success, appends compressed slices to output and returns 1. On failure, appends uncompressed slices to output and returns 0. */ -int grpc_msg_compress(grpc_exec_ctx* exec_ctx, - grpc_message_compression_algorithm algorithm, +int grpc_msg_compress(grpc_message_compression_algorithm algorithm, grpc_slice_buffer* input, grpc_slice_buffer* output); /* decompress 'input' to 'output' using 'algorithm'. On success, appends slices to output and returns 1. On failure, output is unchanged, and returns 0. */ -int grpc_msg_decompress(grpc_exec_ctx* exec_ctx, - grpc_message_compression_algorithm algorithm, +int grpc_msg_decompress(grpc_message_compression_algorithm algorithm, grpc_slice_buffer* input, grpc_slice_buffer* output); #endif /* GRPC_CORE_LIB_COMPRESSION_MESSAGE_COMPRESS_H */ diff --git a/src/core/lib/compression/stream_compression_gzip.cc b/src/core/lib/compression/stream_compression_gzip.cc index 0c3fdd1269..9d829b31db 100644 --- a/src/core/lib/compression/stream_compression_gzip.cc +++ b/src/core/lib/compression/stream_compression_gzip.cc @@ -40,7 +40,7 @@ static bool gzip_flate(grpc_stream_compression_context_gzip* ctx, /* Full flush is not allowed when inflating. */ GPR_ASSERT(!(ctx->flate == inflate && (flush == Z_FINISH))); - grpc_exec_ctx exec_ctx = GRPC_EXEC_CTX_INIT; + grpc_core::ExecCtx exec_ctx; int r; bool eoc = false; size_t original_max_output_size = max_output_size; @@ -57,8 +57,8 @@ static bool gzip_flate(grpc_stream_compression_context_gzip* ctx, r = ctx->flate(&ctx->zs, Z_NO_FLUSH); if (r < 0 && r != Z_BUF_ERROR) { gpr_log(GPR_ERROR, "zlib error (%d)", r); - grpc_slice_unref_internal(&exec_ctx, slice_out); - grpc_exec_ctx_finish(&exec_ctx); + grpc_slice_unref_internal(slice_out); + return false; } else if (r == Z_STREAM_END && ctx->flate == inflate) { eoc = true; @@ -69,7 +69,7 @@ static bool gzip_flate(grpc_stream_compression_context_gzip* ctx, grpc_slice_sub(slice, GRPC_SLICE_LENGTH(slice) - ctx->zs.avail_in, GRPC_SLICE_LENGTH(slice))); } - grpc_slice_unref_internal(&exec_ctx, slice); + grpc_slice_unref_internal(slice); } if (flush != 0 && ctx->zs.avail_out > 0 && !eoc) { GPR_ASSERT(in->length == 0); @@ -88,8 +88,8 @@ static bool gzip_flate(grpc_stream_compression_context_gzip* ctx, break; default: gpr_log(GPR_ERROR, "zlib error (%d)", r); - grpc_slice_unref_internal(&exec_ctx, slice_out); - grpc_exec_ctx_finish(&exec_ctx); + grpc_slice_unref_internal(slice_out); + return false; } } else if (flush == Z_FINISH) { @@ -104,8 +104,8 @@ static bool gzip_flate(grpc_stream_compression_context_gzip* ctx, break; default: gpr_log(GPR_ERROR, "zlib error (%d)", r); - grpc_slice_unref_internal(&exec_ctx, slice_out); - grpc_exec_ctx_finish(&exec_ctx); + grpc_slice_unref_internal(slice_out); + return false; } } @@ -117,11 +117,11 @@ static bool gzip_flate(grpc_stream_compression_context_gzip* ctx, slice_out.data.refcounted.length -= ctx->zs.avail_out; grpc_slice_buffer_add(out, slice_out); } else { - grpc_slice_unref_internal(&exec_ctx, slice_out); + grpc_slice_unref_internal(slice_out); } max_output_size -= (slice_size - ctx->zs.avail_out); } - grpc_exec_ctx_finish(&exec_ctx); + if (end_of_context) { *end_of_context = eoc; } |