grpc 0.12.0 → 0.13.0.pre1.1
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Potentially problematic release.
This version of grpc might be problematic. Click here for more details.
- checksums.yaml +4 -4
 - data/Makefile +5707 -22222
 - data/include/grpc/byte_buffer.h +2 -83
 - data/include/grpc/census.h +191 -121
 - data/include/grpc/compression.h +14 -38
 - data/include/grpc/grpc.h +88 -434
 - data/include/grpc/grpc_security.h +76 -46
 - data/include/grpc/grpc_zookeeper.h +1 -1
 - data/include/grpc/impl/codegen/alloc.h +74 -0
 - data/include/grpc/impl/codegen/atm.h +92 -0
 - data/include/grpc/impl/codegen/atm_gcc_atomic.h +72 -0
 - data/include/grpc/impl/codegen/atm_gcc_sync.h +87 -0
 - data/include/grpc/impl/codegen/atm_win32.h +125 -0
 - data/include/grpc/impl/codegen/byte_buffer.h +121 -0
 - data/include/grpc/impl/codegen/compression_types.h +73 -0
 - data/include/grpc/impl/codegen/connectivity_state.h +59 -0
 - data/include/grpc/impl/codegen/grpc_types.h +373 -0
 - data/include/grpc/impl/codegen/log.h +110 -0
 - data/include/grpc/impl/codegen/port_platform.h +362 -0
 - data/include/grpc/impl/codegen/propagation_bits.h +67 -0
 - data/include/grpc/impl/codegen/slice.h +182 -0
 - data/include/grpc/impl/codegen/slice_buffer.h +105 -0
 - data/include/grpc/impl/codegen/status.h +163 -0
 - data/include/grpc/impl/codegen/sync.h +316 -0
 - data/include/grpc/impl/codegen/sync_generic.h +55 -0
 - data/{src/core/census/context.h → include/grpc/impl/codegen/sync_posix.h} +11 -11
 - data/include/grpc/impl/codegen/sync_win32.h +49 -0
 - data/include/grpc/impl/codegen/time.h +132 -0
 - data/include/grpc/status.h +2 -126
 - data/include/grpc/support/alloc.h +2 -35
 - data/include/grpc/support/atm.h +2 -55
 - data/include/grpc/support/atm_gcc_atomic.h +5 -38
 - data/include/grpc/support/atm_gcc_sync.h +2 -50
 - data/include/grpc/support/atm_win32.h +2 -88
 - data/include/grpc/support/avl.h +7 -7
 - data/include/grpc/support/cmdline.h +15 -13
 - data/include/grpc/support/cpu.h +5 -3
 - data/include/grpc/support/histogram.h +23 -20
 - data/include/grpc/support/host_port.h +5 -3
 - data/include/grpc/support/log.h +2 -71
 - data/include/grpc/support/log_win32.h +2 -2
 - data/include/grpc/support/port_platform.h +2 -319
 - data/include/grpc/support/slice.h +2 -145
 - data/include/grpc/support/slice_buffer.h +2 -65
 - data/include/grpc/support/string_util.h +3 -3
 - data/include/grpc/support/subprocess.h +8 -6
 - data/include/grpc/support/sync.h +2 -278
 - data/include/grpc/support/sync_generic.h +2 -18
 - data/include/grpc/support/sync_posix.h +2 -10
 - data/include/grpc/support/sync_win32.h +2 -12
 - data/include/grpc/support/thd.h +11 -11
 - data/include/grpc/support/time.h +2 -91
 - data/include/grpc/support/tls.h +1 -1
 - data/include/grpc/support/tls_gcc.h +1 -1
 - data/include/grpc/support/tls_msvc.h +1 -1
 - data/include/grpc/support/tls_pthread.h +2 -2
 - data/src/boringssl/err_data.c +1252 -0
 - data/src/core/census/context.c +492 -8
 - data/src/core/census/grpc_filter.c +3 -3
 - data/src/core/census/initialize.c +4 -7
 - data/src/core/census/operation.c +2 -2
 - data/src/core/census/placeholders.c +109 -0
 - data/src/core/census/rpc_metric_id.h +6 -6
 - data/src/core/census/tracing.c +1 -1
 - data/src/core/channel/channel_args.c +4 -3
 - data/src/core/channel/channel_stack.c +1 -1
 - data/src/core/channel/client_channel.c +18 -14
 - data/src/core/channel/client_uchannel.c +3 -3
 - data/src/core/channel/compress_filter.c +8 -8
 - data/src/core/channel/http_client_filter.c +2 -2
 - data/src/core/channel/http_server_filter.c +9 -9
 - data/src/core/channel/subchannel_call_holder.c +12 -10
 - data/src/core/client_config/lb_policies/pick_first.c +49 -31
 - data/src/core/client_config/lb_policies/round_robin.c +7 -7
 - data/src/core/client_config/resolvers/dns_resolver.c +3 -3
 - data/src/core/client_config/resolvers/sockaddr_resolver.c +5 -5
 - data/src/core/client_config/subchannel.c +36 -25
 - data/src/core/compression/algorithm.c +3 -3
 - data/src/core/httpcli/format_request.c +1 -1
 - data/src/core/httpcli/httpcli.c +5 -5
 - data/src/core/httpcli/httpcli_security_connector.c +2 -3
 - data/src/core/httpcli/parser.c +7 -7
 - data/src/core/httpcli/parser.h +1 -1
 - data/src/core/iomgr/closure.c +7 -7
 - data/src/core/iomgr/closure.h +6 -5
 - data/src/core/iomgr/exec_ctx.c +12 -8
 - data/src/core/iomgr/exec_ctx.h +12 -5
 - data/src/core/iomgr/executor.c +4 -4
 - data/src/core/iomgr/executor.h +2 -2
 - data/src/core/iomgr/fd_posix.c +28 -17
 - data/src/core/iomgr/fd_posix.h +7 -4
 - data/src/core/iomgr/iocp_windows.c +6 -8
 - data/src/core/iomgr/pollset_multipoller_with_epoll.c +70 -5
 - data/src/core/iomgr/pollset_multipoller_with_poll_posix.c +4 -2
 - data/src/core/iomgr/pollset_posix.c +15 -15
 - data/src/core/iomgr/pollset_posix.h +4 -2
 - data/src/core/iomgr/pollset_windows.c +3 -12
 - data/src/core/iomgr/resolve_address_posix.c +2 -2
 - data/src/core/iomgr/resolve_address_windows.c +2 -2
 - data/src/core/iomgr/sockaddr_utils.c +6 -6
 - data/src/core/iomgr/sockaddr_win32.h +1 -6
 - data/src/core/iomgr/tcp_client_posix.c +7 -7
 - data/src/core/iomgr/tcp_client_windows.c +4 -4
 - data/src/core/iomgr/tcp_posix.c +14 -8
 - data/src/core/iomgr/tcp_posix.h +7 -1
 - data/src/core/iomgr/tcp_server.h +40 -20
 - data/src/core/iomgr/tcp_server_posix.c +106 -49
 - data/src/core/iomgr/tcp_server_windows.c +98 -49
 - data/src/core/iomgr/tcp_windows.c +11 -15
 - data/src/core/iomgr/timer.c +8 -8
 - data/src/core/iomgr/timer.h +1 -1
 - data/src/core/iomgr/timer_heap.c +10 -10
 - data/src/core/iomgr/timer_heap.h +2 -2
 - data/src/core/iomgr/udp_server.c +2 -12
 - data/src/core/iomgr/udp_server.h +1 -9
 - data/src/core/iomgr/workqueue.h +2 -4
 - data/src/core/iomgr/workqueue_posix.c +3 -3
 - data/src/core/json/json_reader.c +11 -12
 - data/src/core/json/json_reader.h +4 -4
 - data/src/core/json/json_string.c +19 -19
 - data/src/core/json/json_writer.c +7 -9
 - data/src/core/profiling/basic_timers.c +1 -1
 - data/src/core/security/base64.c +9 -9
 - data/src/core/security/client_auth_filter.c +4 -4
 - data/src/core/security/credentials.c +5 -5
 - data/src/core/security/google_default_credentials.c +3 -3
 - data/src/core/security/handshake.c +6 -5
 - data/src/core/security/json_token.c +13 -7
 - data/src/core/security/jwt_verifier.c +3 -2
 - data/src/core/security/secure_endpoint.c +16 -16
 - data/src/core/security/security_connector.c +47 -17
 - data/src/core/security/security_connector.h +5 -5
 - data/src/core/security/server_auth_filter.c +3 -3
 - data/src/core/security/server_secure_chttp2.c +30 -31
 - data/src/core/statistics/census_interface.h +2 -2
 - data/src/core/statistics/census_rpc_stats.h +3 -3
 - data/src/core/support/alloc.c +1 -1
 - data/src/core/support/cpu_posix.c +2 -2
 - data/src/core/support/env_linux.c +12 -2
 - data/src/core/support/env_win32.c +15 -7
 - data/src/core/support/histogram.c +5 -5
 - data/src/core/support/log_posix.c +1 -1
 - data/src/core/support/log_win32.c +4 -3
 - data/src/core/support/murmur_hash.c +11 -11
 - data/src/core/support/murmur_hash.h +1 -1
 - data/src/core/support/slice.c +11 -11
 - data/src/core/support/slice_buffer.c +6 -6
 - data/src/core/support/stack_lockfree.c +20 -10
 - data/src/core/support/string.c +15 -15
 - data/src/core/support/string.h +5 -5
 - data/src/core/support/string_win32.c +5 -5
 - data/src/core/support/subprocess_windows.c +141 -0
 - data/src/core/support/sync.c +4 -4
 - data/src/core/support/sync_posix.c +2 -2
 - data/src/core/support/sync_win32.c +10 -5
 - data/src/core/support/time.c +29 -29
 - data/src/core/support/time_posix.c +15 -6
 - data/src/core/support/time_precise.c +2 -2
 - data/src/core/support/time_win32.c +18 -9
 - data/src/core/support/tls_pthread.c +1 -1
 - data/src/core/support/wrap_memcpy.c +53 -0
 - data/src/core/surface/alarm.c +83 -0
 - data/src/core/surface/byte_buffer_reader.c +1 -1
 - data/src/core/surface/call.c +78 -69
 - data/src/core/surface/call.h +2 -2
 - data/src/core/surface/call_test_only.h +2 -2
 - data/src/core/surface/channel.c +9 -9
 - data/src/core/surface/channel.h +1 -1
 - data/src/core/surface/channel_connectivity.c +3 -3
 - data/src/core/surface/channel_create.c +3 -3
 - data/src/core/surface/channel_ping.c +2 -2
 - data/src/core/surface/completion_queue.c +11 -12
 - data/src/core/surface/completion_queue.h +1 -1
 - data/src/core/surface/init.c +7 -5
 - data/src/core/surface/lame_client.c +3 -3
 - data/src/core/surface/secure_channel_create.c +3 -3
 - data/src/core/surface/server.c +28 -28
 - data/src/core/surface/server_chttp2.c +8 -8
 - data/src/core/surface/server_create.c +1 -4
 - data/src/core/surface/validate_metadata.c +3 -3
 - data/src/core/surface/version.c +2 -2
 - data/src/core/transport/byte_stream.c +8 -6
 - data/src/core/transport/byte_stream.h +6 -5
 - data/src/core/transport/chttp2/bin_encoder.c +29 -29
 - data/src/core/transport/chttp2/frame_data.c +29 -26
 - data/src/core/transport/chttp2/frame_data.h +6 -6
 - data/src/core/transport/chttp2/frame_goaway.c +30 -30
 - data/src/core/transport/chttp2/frame_goaway.h +6 -6
 - data/src/core/transport/chttp2/frame_ping.c +6 -6
 - data/src/core/transport/chttp2/frame_ping.h +5 -5
 - data/src/core/transport/chttp2/frame_rst_stream.c +18 -19
 - data/src/core/transport/chttp2/frame_rst_stream.h +4 -4
 - data/src/core/transport/chttp2/frame_settings.c +30 -30
 - data/src/core/transport/chttp2/frame_settings.h +13 -13
 - data/src/core/transport/chttp2/frame_window_update.c +17 -18
 - data/src/core/transport/chttp2/frame_window_update.h +5 -7
 - data/src/core/transport/chttp2/hpack_encoder.c +69 -73
 - data/src/core/transport/chttp2/hpack_encoder.h +16 -16
 - data/src/core/transport/chttp2/hpack_parser.c +167 -167
 - data/src/core/transport/chttp2/hpack_parser.h +16 -16
 - data/src/core/transport/chttp2/hpack_table.c +13 -13
 - data/src/core/transport/chttp2/hpack_table.h +11 -11
 - data/src/core/transport/chttp2/internal.h +97 -86
 - data/src/core/transport/chttp2/parsing.c +25 -25
 - data/src/core/transport/chttp2/stream_lists.c +26 -3
 - data/src/core/transport/chttp2/stream_map.c +13 -14
 - data/src/core/transport/chttp2/stream_map.h +6 -7
 - data/src/core/transport/chttp2/timeout_encoding.c +19 -16
 - data/src/core/transport/chttp2/varint.c +8 -9
 - data/src/core/transport/chttp2/varint.h +7 -8
 - data/src/core/transport/chttp2/writing.c +26 -23
 - data/src/core/transport/chttp2_transport.c +133 -92
 - data/src/core/transport/connectivity_state.c +6 -6
 - data/src/core/transport/metadata.c +18 -18
 - data/src/core/transport/metadata.h +5 -5
 - data/src/core/transport/static_metadata.c +15 -16
 - data/src/core/transport/static_metadata.h +5 -5
 - data/src/core/transport/transport.c +5 -5
 - data/src/core/transport/transport.h +14 -1
 - data/src/core/tsi/fake_transport_security.c +7 -7
 - data/src/core/tsi/ssl_transport_security.c +6 -4
 - data/src/core/tsi/ssl_types.h +55 -0
 - data/src/ruby/ext/grpc/extconf.rb +51 -14
 - data/src/ruby/ext/grpc/rb_byte_buffer.c +3 -1
 - data/src/ruby/ext/grpc/rb_call.c +6 -3
 - data/src/ruby/ext/grpc/rb_call_credentials.c +4 -0
 - data/src/ruby/ext/grpc/rb_channel.c +4 -2
 - data/src/ruby/ext/grpc/rb_channel_args.c +3 -1
 - data/src/ruby/ext/grpc/rb_channel_credentials.c +3 -1
 - data/src/ruby/ext/grpc/rb_completion_queue.c +3 -1
 - data/src/ruby/ext/grpc/rb_event_thread.c +5 -0
 - data/src/ruby/ext/grpc/rb_grpc.c +11 -3
 - data/src/ruby/ext/grpc/rb_grpc_imports.generated.c +560 -0
 - data/src/ruby/ext/grpc/rb_grpc_imports.generated.h +843 -0
 - data/src/ruby/ext/grpc/rb_loader.c +72 -0
 - data/src/ruby/ext/grpc/rb_loader.h +40 -0
 - data/src/ruby/ext/grpc/rb_server.c +3 -1
 - data/src/ruby/ext/grpc/rb_server_credentials.c +4 -2
 - data/src/ruby/lib/grpc/generic/bidi_call.rb +1 -1
 - data/src/ruby/lib/grpc/generic/rpc_desc.rb +1 -1
 - data/src/ruby/lib/grpc/generic/rpc_server.rb +1 -1
 - data/src/ruby/lib/grpc/grpc.rb +34 -0
 - data/src/ruby/lib/grpc/version.rb +1 -1
 - data/src/ruby/spec/pb/health/checker_spec.rb +1 -1
 - data/third_party/boringssl/crypto/aes/aes.c +1142 -0
 - data/third_party/boringssl/crypto/aes/internal.h +87 -0
 - data/third_party/boringssl/crypto/aes/mode_wrappers.c +108 -0
 - data/third_party/boringssl/crypto/asn1/a_bitstr.c +255 -0
 - data/third_party/boringssl/crypto/asn1/a_bool.c +112 -0
 - data/third_party/boringssl/crypto/asn1/a_bytes.c +317 -0
 - data/third_party/boringssl/crypto/asn1/a_d2i_fp.c +286 -0
 - data/third_party/boringssl/crypto/asn1/a_dup.c +103 -0
 - data/third_party/boringssl/crypto/asn1/a_enum.c +183 -0
 - data/third_party/boringssl/crypto/asn1/a_gentm.c +255 -0
 - data/third_party/boringssl/crypto/asn1/a_i2d_fp.c +154 -0
 - data/third_party/boringssl/crypto/asn1/a_int.c +456 -0
 - data/third_party/boringssl/crypto/asn1/a_mbstr.c +390 -0
 - data/third_party/boringssl/crypto/asn1/a_object.c +412 -0
 - data/third_party/boringssl/crypto/asn1/a_octet.c +70 -0
 - data/third_party/boringssl/crypto/asn1/a_print.c +119 -0
 - data/third_party/boringssl/crypto/asn1/a_strnid.c +286 -0
 - data/third_party/boringssl/crypto/asn1/a_time.c +221 -0
 - data/third_party/boringssl/crypto/asn1/a_type.c +160 -0
 - data/third_party/boringssl/crypto/asn1/a_utctm.c +342 -0
 - data/third_party/boringssl/crypto/asn1/a_utf8.c +210 -0
 - data/third_party/boringssl/crypto/asn1/asn1_lib.c +510 -0
 - data/third_party/boringssl/crypto/asn1/asn1_locl.h +73 -0
 - data/third_party/boringssl/crypto/asn1/asn1_par.c +444 -0
 - data/third_party/boringssl/crypto/asn1/asn_pack.c +104 -0
 - data/third_party/boringssl/crypto/asn1/bio_asn1.c +496 -0
 - data/third_party/boringssl/crypto/asn1/bio_ndef.c +254 -0
 - data/third_party/boringssl/crypto/asn1/f_enum.c +206 -0
 - data/third_party/boringssl/crypto/asn1/f_int.c +210 -0
 - data/third_party/boringssl/crypto/asn1/f_string.c +204 -0
 - data/third_party/boringssl/crypto/asn1/t_bitst.c +102 -0
 - data/third_party/boringssl/crypto/asn1/t_pkey.c +112 -0
 - data/third_party/boringssl/crypto/asn1/tasn_dec.c +1342 -0
 - data/third_party/boringssl/crypto/asn1/tasn_enc.c +695 -0
 - data/third_party/boringssl/crypto/asn1/tasn_fre.c +264 -0
 - data/third_party/boringssl/crypto/asn1/tasn_new.c +398 -0
 - data/third_party/boringssl/crypto/asn1/tasn_prn.c +642 -0
 - data/third_party/boringssl/crypto/asn1/tasn_typ.c +137 -0
 - data/third_party/boringssl/crypto/asn1/tasn_utl.c +266 -0
 - data/third_party/boringssl/crypto/asn1/x_bignum.c +143 -0
 - data/third_party/boringssl/crypto/asn1/x_long.c +182 -0
 - data/third_party/boringssl/crypto/base64/base64.c +478 -0
 - data/third_party/boringssl/crypto/bio/bio.c +608 -0
 - data/third_party/boringssl/crypto/bio/bio_mem.c +327 -0
 - data/third_party/boringssl/crypto/bio/buffer.c +496 -0
 - data/third_party/boringssl/crypto/bio/connect.c +544 -0
 - data/third_party/boringssl/crypto/bio/fd.c +270 -0
 - data/third_party/boringssl/crypto/bio/file.c +349 -0
 - data/third_party/boringssl/crypto/bio/hexdump.c +192 -0
 - data/third_party/boringssl/crypto/bio/internal.h +108 -0
 - data/third_party/boringssl/crypto/bio/pair.c +803 -0
 - data/third_party/boringssl/crypto/bio/printf.c +119 -0
 - data/third_party/boringssl/crypto/bio/socket.c +195 -0
 - data/third_party/boringssl/crypto/bio/socket_helper.c +113 -0
 - data/third_party/boringssl/crypto/bn/add.c +377 -0
 - data/third_party/boringssl/crypto/bn/asm/x86_64-gcc.c +599 -0
 - data/third_party/boringssl/crypto/bn/bn.c +341 -0
 - data/third_party/boringssl/crypto/bn/bn_asn1.c +93 -0
 - data/third_party/boringssl/crypto/bn/cmp.c +200 -0
 - data/third_party/boringssl/crypto/bn/convert.c +597 -0
 - data/third_party/boringssl/crypto/bn/ctx.c +311 -0
 - data/third_party/boringssl/crypto/bn/div.c +625 -0
 - data/third_party/boringssl/crypto/bn/exponentiation.c +1544 -0
 - data/third_party/boringssl/crypto/bn/gcd.c +711 -0
 - data/third_party/boringssl/crypto/bn/generic.c +1019 -0
 - data/third_party/boringssl/crypto/bn/internal.h +294 -0
 - data/third_party/boringssl/crypto/bn/kronecker.c +175 -0
 - data/third_party/boringssl/crypto/bn/montgomery.c +561 -0
 - data/third_party/boringssl/crypto/bn/mul.c +888 -0
 - data/third_party/boringssl/crypto/bn/prime.c +845 -0
 - data/third_party/boringssl/crypto/bn/random.c +326 -0
 - data/third_party/boringssl/crypto/bn/rsaz_exp.c +326 -0
 - data/third_party/boringssl/crypto/bn/rsaz_exp.h +56 -0
 - data/third_party/boringssl/crypto/bn/shift.c +299 -0
 - data/third_party/boringssl/crypto/bn/sqrt.c +505 -0
 - data/third_party/boringssl/crypto/buf/buf.c +235 -0
 - data/third_party/boringssl/crypto/bytestring/ber.c +221 -0
 - data/third_party/boringssl/crypto/bytestring/cbb.c +411 -0
 - data/third_party/boringssl/crypto/bytestring/cbs.c +415 -0
 - data/third_party/boringssl/crypto/bytestring/internal.h +46 -0
 - data/third_party/boringssl/crypto/chacha/chacha_generic.c +140 -0
 - data/third_party/boringssl/crypto/chacha/chacha_vec.c +323 -0
 - data/third_party/boringssl/crypto/cipher/aead.c +167 -0
 - data/third_party/boringssl/crypto/cipher/cipher.c +652 -0
 - data/third_party/boringssl/crypto/cipher/derive_key.c +154 -0
 - data/third_party/boringssl/crypto/cipher/e_aes.c +1767 -0
 - data/third_party/boringssl/crypto/cipher/e_chacha20poly1305.c +311 -0
 - data/third_party/boringssl/crypto/cipher/e_des.c +207 -0
 - data/third_party/boringssl/crypto/cipher/e_null.c +85 -0
 - data/third_party/boringssl/crypto/cipher/e_rc2.c +443 -0
 - data/third_party/boringssl/crypto/cipher/e_rc4.c +87 -0
 - data/third_party/boringssl/crypto/cipher/e_ssl3.c +463 -0
 - data/third_party/boringssl/crypto/cipher/e_tls.c +673 -0
 - data/third_party/boringssl/crypto/cipher/internal.h +164 -0
 - data/third_party/boringssl/crypto/cipher/tls_cbc.c +495 -0
 - data/third_party/boringssl/crypto/cmac/cmac.c +239 -0
 - data/third_party/boringssl/crypto/conf/conf.c +778 -0
 - data/third_party/boringssl/crypto/conf/conf_def.h +127 -0
 - data/third_party/boringssl/crypto/conf/internal.h +31 -0
 - data/third_party/boringssl/crypto/cpu-arm.c +199 -0
 - data/third_party/boringssl/crypto/cpu-intel.c +261 -0
 - data/third_party/boringssl/crypto/crypto.c +140 -0
 - data/third_party/boringssl/crypto/curve25519/curve25519.c +4897 -0
 - data/third_party/boringssl/crypto/des/des.c +771 -0
 - data/third_party/boringssl/crypto/des/internal.h +212 -0
 - data/third_party/boringssl/crypto/dh/check.c +180 -0
 - data/third_party/boringssl/crypto/dh/dh.c +463 -0
 - data/third_party/boringssl/crypto/dh/dh_asn1.c +84 -0
 - data/third_party/boringssl/crypto/dh/internal.h +80 -0
 - data/third_party/boringssl/crypto/dh/params.c +301 -0
 - data/third_party/boringssl/crypto/digest/digest.c +248 -0
 - data/third_party/boringssl/crypto/digest/digests.c +321 -0
 - data/third_party/boringssl/crypto/digest/internal.h +112 -0
 - data/third_party/boringssl/crypto/digest/md32_common.h +322 -0
 - data/third_party/boringssl/crypto/directory.h +66 -0
 - data/third_party/boringssl/crypto/directory_posix.c +108 -0
 - data/third_party/boringssl/crypto/directory_win.c +144 -0
 - data/third_party/boringssl/crypto/dsa/dsa.c +908 -0
 - data/third_party/boringssl/crypto/dsa/dsa_asn1.c +150 -0
 - data/third_party/boringssl/crypto/dsa/internal.h +78 -0
 - data/third_party/boringssl/crypto/ec/ec.c +889 -0
 - data/third_party/boringssl/crypto/ec/ec_asn1.c +586 -0
 - data/third_party/boringssl/crypto/ec/ec_key.c +482 -0
 - data/third_party/boringssl/crypto/ec/ec_montgomery.c +280 -0
 - data/third_party/boringssl/crypto/ec/internal.h +318 -0
 - data/third_party/boringssl/crypto/ec/oct.c +416 -0
 - data/third_party/boringssl/crypto/ec/p224-64.c +1305 -0
 - data/third_party/boringssl/crypto/ec/p256-64.c +1878 -0
 - data/third_party/boringssl/crypto/ec/p256-x86_64-table.h +9548 -0
 - data/third_party/boringssl/crypto/ec/p256-x86_64.c +596 -0
 - data/third_party/boringssl/crypto/ec/simple.c +1313 -0
 - data/third_party/boringssl/crypto/ec/util-64.c +183 -0
 - data/third_party/boringssl/crypto/ec/wnaf.c +449 -0
 - data/third_party/boringssl/crypto/ecdh/ecdh.c +153 -0
 - data/third_party/boringssl/crypto/ecdsa/ecdsa.c +496 -0
 - data/third_party/boringssl/crypto/ecdsa/ecdsa_asn1.c +240 -0
 - data/third_party/boringssl/crypto/engine/engine.c +96 -0
 - data/third_party/boringssl/crypto/err/err.c +756 -0
 - data/third_party/boringssl/crypto/evp/algorithm.c +153 -0
 - data/third_party/boringssl/crypto/evp/digestsign.c +159 -0
 - data/third_party/boringssl/crypto/evp/evp.c +411 -0
 - data/third_party/boringssl/crypto/evp/evp_asn1.c +179 -0
 - data/third_party/boringssl/crypto/evp/evp_ctx.c +477 -0
 - data/third_party/boringssl/crypto/evp/internal.h +278 -0
 - data/third_party/boringssl/crypto/evp/p_dsa_asn1.c +588 -0
 - data/third_party/boringssl/crypto/evp/p_ec.c +283 -0
 - data/third_party/boringssl/crypto/evp/p_ec_asn1.c +562 -0
 - data/third_party/boringssl/crypto/evp/p_rsa.c +596 -0
 - data/third_party/boringssl/crypto/evp/p_rsa_asn1.c +737 -0
 - data/third_party/boringssl/crypto/evp/pbkdf.c +151 -0
 - data/third_party/boringssl/crypto/evp/sign.c +151 -0
 - data/third_party/boringssl/crypto/ex_data.c +294 -0
 - data/third_party/boringssl/crypto/hkdf/hkdf.c +89 -0
 - data/third_party/boringssl/crypto/hmac/hmac.c +213 -0
 - data/third_party/boringssl/crypto/internal.h +532 -0
 - data/third_party/boringssl/crypto/lhash/lhash.c +346 -0
 - data/third_party/boringssl/crypto/md4/md4.c +225 -0
 - data/third_party/boringssl/crypto/md5/md5.c +275 -0
 - data/third_party/boringssl/crypto/mem.c +200 -0
 - data/third_party/boringssl/crypto/modes/cbc.c +216 -0
 - data/third_party/boringssl/crypto/modes/cfb.c +231 -0
 - data/third_party/boringssl/crypto/modes/ctr.c +226 -0
 - data/third_party/boringssl/crypto/modes/gcm.c +1252 -0
 - data/third_party/boringssl/crypto/modes/internal.h +370 -0
 - data/third_party/boringssl/crypto/modes/ofb.c +108 -0
 - data/third_party/boringssl/crypto/obj/obj.c +664 -0
 - data/third_party/boringssl/crypto/obj/obj_dat.h +5257 -0
 - data/third_party/boringssl/crypto/obj/obj_xref.c +124 -0
 - data/third_party/boringssl/crypto/obj/obj_xref.h +96 -0
 - data/third_party/boringssl/crypto/pem/pem_all.c +281 -0
 - data/third_party/boringssl/crypto/pem/pem_info.c +404 -0
 - data/third_party/boringssl/crypto/pem/pem_lib.c +835 -0
 - data/third_party/boringssl/crypto/pem/pem_oth.c +89 -0
 - data/third_party/boringssl/crypto/pem/pem_pk8.c +244 -0
 - data/third_party/boringssl/crypto/pem/pem_pkey.c +312 -0
 - data/third_party/boringssl/crypto/pem/pem_x509.c +65 -0
 - data/third_party/boringssl/crypto/pem/pem_xaux.c +66 -0
 - data/third_party/boringssl/crypto/pkcs8/internal.h +83 -0
 - data/third_party/boringssl/crypto/pkcs8/p5_pbe.c +150 -0
 - data/third_party/boringssl/crypto/pkcs8/p5_pbev2.c +440 -0
 - data/third_party/boringssl/crypto/pkcs8/p8_pkey.c +85 -0
 - data/third_party/boringssl/crypto/pkcs8/pkcs8.c +1217 -0
 - data/third_party/boringssl/crypto/poly1305/poly1305.c +331 -0
 - data/third_party/boringssl/crypto/poly1305/poly1305_arm.c +301 -0
 - data/third_party/boringssl/crypto/poly1305/poly1305_vec.c +892 -0
 - data/third_party/boringssl/crypto/rand/internal.h +32 -0
 - data/third_party/boringssl/crypto/rand/rand.c +239 -0
 - data/third_party/boringssl/crypto/rand/urandom.c +223 -0
 - data/third_party/boringssl/crypto/rand/windows.c +56 -0
 - data/third_party/boringssl/crypto/rc4/rc4.c +283 -0
 - data/third_party/boringssl/crypto/refcount_c11.c +67 -0
 - data/third_party/boringssl/crypto/refcount_lock.c +53 -0
 - data/third_party/boringssl/crypto/rsa/blinding.c +462 -0
 - data/third_party/boringssl/crypto/rsa/internal.h +164 -0
 - data/third_party/boringssl/crypto/rsa/padding.c +711 -0
 - data/third_party/boringssl/crypto/rsa/rsa.c +808 -0
 - data/third_party/boringssl/crypto/rsa/rsa_asn1.c +473 -0
 - data/third_party/boringssl/crypto/rsa/rsa_impl.c +1138 -0
 - data/third_party/boringssl/crypto/sha/sha1.c +337 -0
 - data/third_party/boringssl/crypto/sha/sha256.c +327 -0
 - data/third_party/boringssl/crypto/sha/sha512.c +607 -0
 - data/third_party/boringssl/crypto/stack/stack.c +386 -0
 - data/third_party/boringssl/crypto/test/scoped_types.h +137 -0
 - data/third_party/boringssl/crypto/test/test_util.h +35 -0
 - data/third_party/boringssl/crypto/thread.c +101 -0
 - data/third_party/boringssl/crypto/thread_none.c +55 -0
 - data/third_party/boringssl/crypto/thread_pthread.c +167 -0
 - data/third_party/boringssl/crypto/thread_win.c +282 -0
 - data/third_party/boringssl/crypto/time_support.c +212 -0
 - data/third_party/boringssl/crypto/x509/a_digest.c +97 -0
 - data/third_party/boringssl/crypto/x509/a_sign.c +136 -0
 - data/third_party/boringssl/crypto/x509/a_strex.c +564 -0
 - data/third_party/boringssl/crypto/x509/a_verify.c +133 -0
 - data/third_party/boringssl/crypto/x509/asn1_gen.c +873 -0
 - data/third_party/boringssl/crypto/x509/by_dir.c +491 -0
 - data/third_party/boringssl/crypto/x509/by_file.c +295 -0
 - data/third_party/boringssl/crypto/x509/charmap.h +15 -0
 - data/third_party/boringssl/crypto/x509/i2d_pr.c +84 -0
 - data/third_party/boringssl/crypto/x509/pkcs7.c +353 -0
 - data/third_party/boringssl/crypto/x509/t_crl.c +129 -0
 - data/third_party/boringssl/crypto/x509/t_req.c +246 -0
 - data/third_party/boringssl/crypto/x509/t_x509.c +500 -0
 - data/third_party/boringssl/crypto/x509/t_x509a.c +109 -0
 - data/third_party/boringssl/crypto/x509/vpm_int.h +70 -0
 - data/third_party/boringssl/crypto/x509/x509.c +152 -0
 - data/third_party/boringssl/crypto/x509/x509_att.c +353 -0
 - data/third_party/boringssl/crypto/x509/x509_cmp.c +490 -0
 - data/third_party/boringssl/crypto/x509/x509_d2.c +105 -0
 - data/third_party/boringssl/crypto/x509/x509_def.c +88 -0
 - data/third_party/boringssl/crypto/x509/x509_ext.c +206 -0
 - data/third_party/boringssl/crypto/x509/x509_lu.c +738 -0
 - data/third_party/boringssl/crypto/x509/x509_obj.c +191 -0
 - data/third_party/boringssl/crypto/x509/x509_r2x.c +113 -0
 - data/third_party/boringssl/crypto/x509/x509_req.c +315 -0
 - data/third_party/boringssl/crypto/x509/x509_set.c +154 -0
 - data/third_party/boringssl/crypto/x509/x509_trs.c +304 -0
 - data/third_party/boringssl/crypto/x509/x509_txt.c +209 -0
 - data/third_party/boringssl/crypto/x509/x509_v3.c +271 -0
 - data/third_party/boringssl/crypto/x509/x509_vfy.c +2456 -0
 - data/third_party/boringssl/crypto/x509/x509_vpm.c +672 -0
 - data/third_party/boringssl/crypto/x509/x509cset.c +172 -0
 - data/third_party/boringssl/crypto/x509/x509name.c +381 -0
 - data/third_party/boringssl/crypto/x509/x509rset.c +80 -0
 - data/third_party/boringssl/crypto/x509/x509spki.c +135 -0
 - data/third_party/boringssl/crypto/x509/x509type.c +128 -0
 - data/third_party/boringssl/crypto/x509/x_algor.c +154 -0
 - data/third_party/boringssl/crypto/x509/x_all.c +547 -0
 - data/third_party/boringssl/crypto/x509/x_attrib.c +117 -0
 - data/third_party/boringssl/crypto/x509/x_crl.c +560 -0
 - data/third_party/boringssl/crypto/x509/x_exten.c +75 -0
 - data/third_party/boringssl/crypto/x509/x_info.c +95 -0
 - data/third_party/boringssl/crypto/x509/x_name.c +538 -0
 - data/third_party/boringssl/crypto/x509/x_pkey.c +100 -0
 - data/third_party/boringssl/crypto/x509/x_pubkey.c +384 -0
 - data/third_party/boringssl/crypto/x509/x_req.c +112 -0
 - data/third_party/boringssl/crypto/x509/x_sig.c +69 -0
 - data/third_party/boringssl/crypto/x509/x_spki.c +78 -0
 - data/third_party/boringssl/crypto/x509/x_val.c +69 -0
 - data/third_party/boringssl/crypto/x509/x_x509.c +227 -0
 - data/third_party/boringssl/crypto/x509/x_x509a.c +197 -0
 - data/third_party/boringssl/crypto/x509v3/ext_dat.h +129 -0
 - data/third_party/boringssl/crypto/x509v3/pcy_cache.c +299 -0
 - data/third_party/boringssl/crypto/x509v3/pcy_data.c +137 -0
 - data/third_party/boringssl/crypto/x509v3/pcy_int.h +212 -0
 - data/third_party/boringssl/crypto/x509v3/pcy_lib.c +165 -0
 - data/third_party/boringssl/crypto/x509v3/pcy_map.c +133 -0
 - data/third_party/boringssl/crypto/x509v3/pcy_node.c +197 -0
 - data/third_party/boringssl/crypto/x509v3/pcy_tree.c +876 -0
 - data/third_party/boringssl/crypto/x509v3/v3_akey.c +212 -0
 - data/third_party/boringssl/crypto/x509v3/v3_akeya.c +71 -0
 - data/third_party/boringssl/crypto/x509v3/v3_alt.c +622 -0
 - data/third_party/boringssl/crypto/x509v3/v3_bcons.c +126 -0
 - data/third_party/boringssl/crypto/x509v3/v3_bitst.c +141 -0
 - data/third_party/boringssl/crypto/x509v3/v3_conf.c +459 -0
 - data/third_party/boringssl/crypto/x509v3/v3_cpols.c +475 -0
 - data/third_party/boringssl/crypto/x509v3/v3_crld.c +616 -0
 - data/third_party/boringssl/crypto/x509v3/v3_enum.c +98 -0
 - data/third_party/boringssl/crypto/x509v3/v3_extku.c +145 -0
 - data/third_party/boringssl/crypto/x509v3/v3_genn.c +252 -0
 - data/third_party/boringssl/crypto/x509v3/v3_ia5.c +117 -0
 - data/third_party/boringssl/crypto/x509v3/v3_info.c +200 -0
 - data/third_party/boringssl/crypto/x509v3/v3_int.c +87 -0
 - data/third_party/boringssl/crypto/x509v3/v3_lib.c +335 -0
 - data/third_party/boringssl/crypto/x509v3/v3_ncons.c +510 -0
 - data/third_party/boringssl/crypto/x509v3/v3_pci.c +335 -0
 - data/third_party/boringssl/crypto/x509v3/v3_pcia.c +56 -0
 - data/third_party/boringssl/crypto/x509v3/v3_pcons.c +142 -0
 - data/third_party/boringssl/crypto/x509v3/v3_pku.c +109 -0
 - data/third_party/boringssl/crypto/x509v3/v3_pmaps.c +156 -0
 - data/third_party/boringssl/crypto/x509v3/v3_prn.c +207 -0
 - data/third_party/boringssl/crypto/x509v3/v3_purp.c +805 -0
 - data/third_party/boringssl/crypto/x509v3/v3_skey.c +148 -0
 - data/third_party/boringssl/crypto/x509v3/v3_sxnet.c +266 -0
 - data/third_party/boringssl/crypto/x509v3/v3_utl.c +1322 -0
 - data/third_party/boringssl/include/openssl/aead.h +346 -0
 - data/third_party/boringssl/include/openssl/aes.h +158 -0
 - data/third_party/boringssl/include/openssl/arm_arch.h +127 -0
 - data/third_party/boringssl/include/openssl/asn1.h +1168 -0
 - data/third_party/boringssl/include/openssl/asn1_mac.h +75 -0
 - data/third_party/boringssl/include/openssl/asn1t.h +906 -0
 - data/third_party/boringssl/include/openssl/base.h +261 -0
 - data/third_party/boringssl/include/openssl/base64.h +184 -0
 - data/third_party/boringssl/include/openssl/bio.h +902 -0
 - data/third_party/boringssl/include/openssl/blowfish.h +93 -0
 - data/third_party/boringssl/include/openssl/bn.h +885 -0
 - data/third_party/boringssl/include/openssl/buf.h +118 -0
 - data/third_party/boringssl/include/openssl/buffer.h +18 -0
 - data/third_party/boringssl/include/openssl/bytestring.h +360 -0
 - data/third_party/boringssl/include/openssl/cast.h +96 -0
 - data/third_party/boringssl/include/openssl/chacha.h +37 -0
 - data/third_party/boringssl/include/openssl/cipher.h +571 -0
 - data/third_party/boringssl/include/openssl/cmac.h +76 -0
 - data/third_party/boringssl/include/openssl/conf.h +145 -0
 - data/third_party/boringssl/include/openssl/cpu.h +184 -0
 - data/third_party/boringssl/include/openssl/crypto.h +68 -0
 - data/third_party/boringssl/include/openssl/curve25519.h +88 -0
 - data/third_party/boringssl/include/openssl/des.h +177 -0
 - data/third_party/boringssl/include/openssl/dh.h +238 -0
 - data/third_party/boringssl/include/openssl/digest.h +258 -0
 - data/third_party/boringssl/include/openssl/dsa.h +343 -0
 - data/third_party/boringssl/include/openssl/dtls1.h +16 -0
 - data/third_party/boringssl/include/openssl/ec.h +355 -0
 - data/third_party/boringssl/include/openssl/ec_key.h +280 -0
 - data/third_party/boringssl/include/openssl/ecdh.h +102 -0
 - data/third_party/boringssl/include/openssl/ecdsa.h +206 -0
 - data/third_party/boringssl/include/openssl/engine.h +98 -0
 - data/third_party/boringssl/include/openssl/err.h +487 -0
 - data/third_party/boringssl/include/openssl/evp.h +750 -0
 - data/third_party/boringssl/include/openssl/ex_data.h +213 -0
 - data/third_party/boringssl/include/openssl/hkdf.h +44 -0
 - data/third_party/boringssl/include/openssl/hmac.h +160 -0
 - data/third_party/boringssl/include/openssl/lhash.h +192 -0
 - data/third_party/boringssl/include/openssl/lhash_macros.h +132 -0
 - data/third_party/boringssl/include/openssl/md4.h +102 -0
 - data/third_party/boringssl/include/openssl/md5.h +107 -0
 - data/third_party/boringssl/include/openssl/mem.h +140 -0
 - data/third_party/boringssl/include/openssl/obj.h +198 -0
 - data/third_party/boringssl/include/openssl/obj_mac.h +4140 -0
 - data/third_party/boringssl/include/openssl/objects.h +18 -0
 - data/third_party/boringssl/include/openssl/opensslfeatures.h +60 -0
 - data/third_party/boringssl/include/openssl/opensslv.h +18 -0
 - data/third_party/boringssl/include/openssl/ossl_typ.h +18 -0
 - data/third_party/boringssl/include/openssl/pem.h +521 -0
 - data/third_party/boringssl/include/openssl/pkcs12.h +18 -0
 - data/third_party/boringssl/include/openssl/pkcs7.h +16 -0
 - data/third_party/boringssl/include/openssl/pkcs8.h +220 -0
 - data/third_party/boringssl/include/openssl/poly1305.h +51 -0
 - data/third_party/boringssl/include/openssl/pqueue.h +146 -0
 - data/third_party/boringssl/include/openssl/rand.h +113 -0
 - data/third_party/boringssl/include/openssl/rc4.h +90 -0
 - data/third_party/boringssl/include/openssl/rsa.h +637 -0
 - data/third_party/boringssl/include/openssl/safestack.h +16 -0
 - data/third_party/boringssl/include/openssl/sha.h +256 -0
 - data/third_party/boringssl/include/openssl/srtp.h +18 -0
 - data/third_party/boringssl/include/openssl/ssl.h +4466 -0
 - data/third_party/boringssl/include/openssl/ssl3.h +441 -0
 - data/third_party/boringssl/include/openssl/stack.h +298 -0
 - data/third_party/boringssl/include/openssl/stack_macros.h +4190 -0
 - data/third_party/boringssl/include/openssl/thread.h +173 -0
 - data/third_party/boringssl/include/openssl/time_support.h +90 -0
 - data/third_party/boringssl/include/openssl/tls1.h +653 -0
 - data/third_party/boringssl/include/openssl/type_check.h +91 -0
 - data/third_party/boringssl/include/openssl/x509.h +1258 -0
 - data/third_party/boringssl/include/openssl/x509_vfy.h +611 -0
 - data/third_party/boringssl/include/openssl/x509v3.h +798 -0
 - data/third_party/boringssl/ssl/custom_extensions.c +257 -0
 - data/third_party/boringssl/ssl/d1_both.c +880 -0
 - data/third_party/boringssl/ssl/d1_clnt.c +566 -0
 - data/third_party/boringssl/ssl/d1_lib.c +340 -0
 - data/third_party/boringssl/ssl/d1_meth.c +130 -0
 - data/third_party/boringssl/ssl/d1_pkt.c +578 -0
 - data/third_party/boringssl/ssl/d1_srtp.c +234 -0
 - data/third_party/boringssl/ssl/d1_srvr.c +485 -0
 - data/third_party/boringssl/ssl/dtls_record.c +308 -0
 - data/third_party/boringssl/ssl/internal.h +1276 -0
 - data/third_party/boringssl/ssl/pqueue/pqueue.c +197 -0
 - data/third_party/boringssl/ssl/s3_both.c +571 -0
 - data/third_party/boringssl/ssl/s3_clnt.c +2241 -0
 - data/third_party/boringssl/ssl/s3_enc.c +494 -0
 - data/third_party/boringssl/ssl/s3_lib.c +587 -0
 - data/third_party/boringssl/ssl/s3_meth.c +166 -0
 - data/third_party/boringssl/ssl/s3_pkt.c +732 -0
 - data/third_party/boringssl/ssl/s3_srvr.c +2536 -0
 - data/third_party/boringssl/ssl/ssl_aead_ctx.c +300 -0
 - data/third_party/boringssl/ssl/ssl_asn1.c +718 -0
 - data/third_party/boringssl/ssl/ssl_buffer.c +319 -0
 - data/third_party/boringssl/ssl/ssl_cert.c +539 -0
 - data/third_party/boringssl/ssl/ssl_cipher.c +2003 -0
 - data/third_party/boringssl/ssl/ssl_file.c +633 -0
 - data/third_party/boringssl/ssl/ssl_lib.c +2653 -0
 - data/third_party/boringssl/ssl/ssl_rsa.c +423 -0
 - data/third_party/boringssl/ssl/ssl_session.c +764 -0
 - data/third_party/boringssl/ssl/ssl_stat.c +591 -0
 - data/third_party/boringssl/ssl/t1_enc.c +708 -0
 - data/third_party/boringssl/ssl/t1_lib.c +2905 -0
 - data/third_party/boringssl/ssl/test/async_bio.h +45 -0
 - data/third_party/boringssl/ssl/test/packeted_bio.h +44 -0
 - data/third_party/boringssl/ssl/test/scoped_types.h +28 -0
 - data/third_party/boringssl/ssl/test/test_config.h +108 -0
 - data/third_party/boringssl/ssl/tls_record.c +342 -0
 - data/third_party/zlib/adler32.c +179 -0
 - data/third_party/zlib/compress.c +80 -0
 - data/third_party/zlib/crc32.c +425 -0
 - data/third_party/zlib/crc32.h +441 -0
 - data/third_party/zlib/deflate.c +1967 -0
 - data/third_party/zlib/deflate.h +346 -0
 - data/third_party/zlib/gzclose.c +25 -0
 - data/third_party/zlib/gzguts.h +209 -0
 - data/third_party/zlib/gzlib.c +634 -0
 - data/third_party/zlib/gzread.c +594 -0
 - data/third_party/zlib/gzwrite.c +577 -0
 - data/third_party/zlib/infback.c +640 -0
 - data/third_party/zlib/inffast.c +340 -0
 - data/third_party/zlib/inffast.h +11 -0
 - data/third_party/zlib/inffixed.h +94 -0
 - data/third_party/zlib/inflate.c +1512 -0
 - data/third_party/zlib/inflate.h +122 -0
 - data/third_party/zlib/inftrees.c +306 -0
 - data/third_party/zlib/inftrees.h +62 -0
 - data/third_party/zlib/trees.c +1226 -0
 - data/third_party/zlib/trees.h +128 -0
 - data/third_party/zlib/uncompr.c +59 -0
 - data/third_party/zlib/zconf.h +511 -0
 - data/third_party/zlib/zlib.h +1768 -0
 - data/third_party/zlib/zutil.c +324 -0
 - data/third_party/zlib/zutil.h +253 -0
 - metadata +492 -25
 - data/Rakefile +0 -63
 - data/src/ruby/lib/grpc/grpc.so +0 -0
 
| 
         @@ -33,7 +33,7 @@ 
     | 
|
| 
       33 
33 
     | 
    
         | 
| 
       34 
34 
     | 
    
         
             
            #include "src/core/transport/chttp2/varint.h"
         
     | 
| 
       35 
35 
     | 
    
         | 
| 
       36 
     | 
    
         
            -
             
     | 
| 
      
 36 
     | 
    
         
            +
            uint32_t grpc_chttp2_hpack_varint_length(uint32_t tail_value) {
         
     | 
| 
       37 
37 
     | 
    
         
             
              if (tail_value < (1 << 7)) {
         
     | 
| 
       38 
38 
     | 
    
         
             
                return 2;
         
     | 
| 
       39 
39 
     | 
    
         
             
              } else if (tail_value < (1 << 14)) {
         
     | 
| 
         @@ -47,20 +47,19 @@ gpr_uint32 grpc_chttp2_hpack_varint_length(gpr_uint32 tail_value) { 
     | 
|
| 
       47 
47 
     | 
    
         
             
              }
         
     | 
| 
       48 
48 
     | 
    
         
             
            }
         
     | 
| 
       49 
49 
     | 
    
         | 
| 
       50 
     | 
    
         
            -
            void grpc_chttp2_hpack_write_varint_tail( 
     | 
| 
       51 
     | 
    
         
            -
                                                      
     | 
| 
       52 
     | 
    
         
            -
                                                     gpr_uint32 tail_length) {
         
     | 
| 
      
 50 
     | 
    
         
            +
            void grpc_chttp2_hpack_write_varint_tail(uint32_t tail_value, uint8_t* target,
         
     | 
| 
      
 51 
     | 
    
         
            +
                                                     uint32_t tail_length) {
         
     | 
| 
       53 
52 
     | 
    
         
             
              switch (tail_length) {
         
     | 
| 
       54 
53 
     | 
    
         
             
                case 5:
         
     | 
| 
       55 
     | 
    
         
            -
                  target[4] = ( 
     | 
| 
      
 54 
     | 
    
         
            +
                  target[4] = (uint8_t)((tail_value >> 28) | 0x80);
         
     | 
| 
       56 
55 
     | 
    
         
             
                case 4:
         
     | 
| 
       57 
     | 
    
         
            -
                  target[3] = ( 
     | 
| 
      
 56 
     | 
    
         
            +
                  target[3] = (uint8_t)((tail_value >> 21) | 0x80);
         
     | 
| 
       58 
57 
     | 
    
         
             
                case 3:
         
     | 
| 
       59 
     | 
    
         
            -
                  target[2] = ( 
     | 
| 
      
 58 
     | 
    
         
            +
                  target[2] = (uint8_t)((tail_value >> 14) | 0x80);
         
     | 
| 
       60 
59 
     | 
    
         
             
                case 2:
         
     | 
| 
       61 
     | 
    
         
            -
                  target[1] = ( 
     | 
| 
      
 60 
     | 
    
         
            +
                  target[1] = (uint8_t)((tail_value >> 7) | 0x80);
         
     | 
| 
       62 
61 
     | 
    
         
             
                case 1:
         
     | 
| 
       63 
     | 
    
         
            -
                  target[0] = ( 
     | 
| 
      
 62 
     | 
    
         
            +
                  target[0] = (uint8_t)((tail_value) | 0x80);
         
     | 
| 
       64 
63 
     | 
    
         
             
              }
         
     | 
| 
       65 
64 
     | 
    
         
             
              target[tail_length - 1] &= 0x7f;
         
     | 
| 
       66 
65 
     | 
    
         
             
            }
         
     | 
| 
         @@ -41,17 +41,16 @@ 
     | 
|
| 
       41 
41 
     | 
    
         
             
            /* length of a value that needs varint tail encoding (it's bigger than can be
         
     | 
| 
       42 
42 
     | 
    
         
             
               bitpacked into the opcode byte) - returned value includes the length of the
         
     | 
| 
       43 
43 
     | 
    
         
             
               opcode byte */
         
     | 
| 
       44 
     | 
    
         
            -
             
     | 
| 
      
 44 
     | 
    
         
            +
            uint32_t grpc_chttp2_hpack_varint_length(uint32_t tail_value);
         
     | 
| 
       45 
45 
     | 
    
         | 
| 
       46 
     | 
    
         
            -
            void grpc_chttp2_hpack_write_varint_tail( 
     | 
| 
       47 
     | 
    
         
            -
                                                      
     | 
| 
       48 
     | 
    
         
            -
                                                     gpr_uint32 tail_length);
         
     | 
| 
      
 46 
     | 
    
         
            +
            void grpc_chttp2_hpack_write_varint_tail(uint32_t tail_value, uint8_t* target,
         
     | 
| 
      
 47 
     | 
    
         
            +
                                                     uint32_t tail_length);
         
     | 
| 
       49 
48 
     | 
    
         | 
| 
       50 
49 
     | 
    
         
             
            /* maximum value that can be bitpacked with the opcode if the opcode has a
         
     | 
| 
       51 
50 
     | 
    
         
             
               prefix
         
     | 
| 
       52 
51 
     | 
    
         
             
               of length prefix_bits */
         
     | 
| 
       53 
52 
     | 
    
         
             
            #define GRPC_CHTTP2_MAX_IN_PREFIX(prefix_bits) \
         
     | 
| 
       54 
     | 
    
         
            -
              (( 
     | 
| 
      
 53 
     | 
    
         
            +
              ((uint32_t)((1 << (8 - (prefix_bits))) - 1))
         
     | 
| 
       55 
54 
     | 
    
         | 
| 
       56 
55 
     | 
    
         
             
            /* length required to bitpack a value */
         
     | 
| 
       57 
56 
     | 
    
         
             
            #define GRPC_CHTTP2_VARINT_LENGTH(n, prefix_bits) \
         
     | 
| 
         @@ -62,12 +61,12 @@ void grpc_chttp2_hpack_write_varint_tail(gpr_uint32 tail_value, 
     | 
|
| 
       62 
61 
     | 
    
         | 
| 
       63 
62 
     | 
    
         
             
            #define GRPC_CHTTP2_WRITE_VARINT(n, prefix_bits, prefix_or, target, length)   \
         
     | 
| 
       64 
63 
     | 
    
         
             
              do {                                                                        \
         
     | 
| 
       65 
     | 
    
         
            -
                 
     | 
| 
      
 64 
     | 
    
         
            +
                uint8_t* tgt = target;                                                    \
         
     | 
| 
       66 
65 
     | 
    
         
             
                if ((length) == 1u) {                                                     \
         
     | 
| 
       67 
     | 
    
         
            -
                  (tgt)[0] = ( 
     | 
| 
      
 66 
     | 
    
         
            +
                  (tgt)[0] = (uint8_t)((prefix_or) | (n));                                \
         
     | 
| 
       68 
67 
     | 
    
         
             
                } else {                                                                  \
         
     | 
| 
       69 
68 
     | 
    
         
             
                  (tgt)[0] =                                                              \
         
     | 
| 
       70 
     | 
    
         
            -
                      (prefix_or) | ( 
     | 
| 
      
 69 
     | 
    
         
            +
                      (prefix_or) | (uint8_t)GRPC_CHTTP2_MAX_IN_PREFIX(prefix_bits);      \
         
     | 
| 
       71 
70 
     | 
    
         
             
                  grpc_chttp2_hpack_write_varint_tail(                                    \
         
     | 
| 
       72 
71 
     | 
    
         
             
                      (n)-GRPC_CHTTP2_MAX_IN_PREFIX(prefix_bits), (tgt) + 1, (length)-1); \
         
     | 
| 
       73 
72 
     | 
    
         
             
                }                                                                         \
         
     | 
| 
         @@ -1,6 +1,6 @@ 
     | 
|
| 
       1 
1 
     | 
    
         
             
            /*
         
     | 
| 
       2 
2 
     | 
    
         
             
             *
         
     | 
| 
       3 
     | 
    
         
            -
             * Copyright 2015, Google Inc.
         
     | 
| 
      
 3 
     | 
    
         
            +
             * Copyright 2015-2016, Google Inc.
         
     | 
| 
       4 
4 
     | 
    
         
             
             * All rights reserved.
         
     | 
| 
       5 
5 
     | 
    
         
             
             *
         
     | 
| 
       6 
6 
     | 
    
         
             
             * Redistribution and use in source and binary forms, with or without
         
     | 
| 
         @@ -75,12 +75,15 @@ int grpc_chttp2_unlocking_check_writes( 
     | 
|
| 
       75 
75 
     | 
    
         | 
| 
       76 
76 
     | 
    
         
             
              GRPC_CHTTP2_FLOW_MOVE_TRANSPORT("write", transport_writing, outgoing_window,
         
     | 
| 
       77 
77 
     | 
    
         
             
                                              transport_global, outgoing_window);
         
     | 
| 
      
 78 
     | 
    
         
            +
              bool is_window_available = transport_writing->outgoing_window > 0;
         
     | 
| 
      
 79 
     | 
    
         
            +
              grpc_chttp2_list_flush_writing_stalled_by_transport(transport_writing,
         
     | 
| 
      
 80 
     | 
    
         
            +
                                                                  is_window_available);
         
     | 
| 
       78 
81 
     | 
    
         | 
| 
       79 
82 
     | 
    
         
             
              /* for each grpc_chttp2_stream that's become writable, frame it's data
         
     | 
| 
       80 
83 
     | 
    
         
             
                 (according to available window sizes) and add to the output buffer */
         
     | 
| 
       81 
84 
     | 
    
         
             
              while (grpc_chttp2_list_pop_writable_stream(
         
     | 
| 
       82 
85 
     | 
    
         
             
                  transport_global, transport_writing, &stream_global, &stream_writing)) {
         
     | 
| 
       83 
     | 
    
         
            -
                 
     | 
| 
      
 86 
     | 
    
         
            +
                uint8_t sent_initial_metadata;
         
     | 
| 
       84 
87 
     | 
    
         | 
| 
       85 
88 
     | 
    
         
             
                stream_writing->id = stream_global->id;
         
     | 
| 
       86 
89 
     | 
    
         
             
                stream_writing->read_closed = stream_global->read_closed;
         
     | 
| 
         @@ -103,15 +106,15 @@ int grpc_chttp2_unlocking_check_writes( 
     | 
|
| 
       103 
106 
     | 
    
         
             
                if (sent_initial_metadata) {
         
     | 
| 
       104 
107 
     | 
    
         
             
                  if (stream_global->send_message != NULL) {
         
     | 
| 
       105 
108 
     | 
    
         
             
                    gpr_slice hdr = gpr_slice_malloc(5);
         
     | 
| 
       106 
     | 
    
         
            -
                     
     | 
| 
       107 
     | 
    
         
            -
                     
     | 
| 
      
 109 
     | 
    
         
            +
                    uint8_t *p = GPR_SLICE_START_PTR(hdr);
         
     | 
| 
      
 110 
     | 
    
         
            +
                    uint32_t len = stream_global->send_message->length;
         
     | 
| 
       108 
111 
     | 
    
         
             
                    GPR_ASSERT(stream_writing->send_message == NULL);
         
     | 
| 
       109 
112 
     | 
    
         
             
                    p[0] = (stream_global->send_message->flags &
         
     | 
| 
       110 
113 
     | 
    
         
             
                            GRPC_WRITE_INTERNAL_COMPRESS) != 0;
         
     | 
| 
       111 
     | 
    
         
            -
                    p[1] = ( 
     | 
| 
       112 
     | 
    
         
            -
                    p[2] = ( 
     | 
| 
       113 
     | 
    
         
            -
                    p[3] = ( 
     | 
| 
       114 
     | 
    
         
            -
                    p[4] = ( 
     | 
| 
      
 114 
     | 
    
         
            +
                    p[1] = (uint8_t)(len >> 24);
         
     | 
| 
      
 115 
     | 
    
         
            +
                    p[2] = (uint8_t)(len >> 16);
         
     | 
| 
      
 116 
     | 
    
         
            +
                    p[3] = (uint8_t)(len >> 8);
         
     | 
| 
      
 117 
     | 
    
         
            +
                    p[4] = (uint8_t)(len);
         
     | 
| 
       115 
118 
     | 
    
         
             
                    gpr_slice_buffer_add(&stream_writing->flow_controlled_buffer, hdr);
         
     | 
| 
       116 
119 
     | 
    
         
             
                    if (stream_global->send_message->length > 0) {
         
     | 
| 
       117 
120 
     | 
    
         
             
                      stream_writing->send_message = stream_global->send_message;
         
     | 
| 
         @@ -130,8 +133,8 @@ int grpc_chttp2_unlocking_check_writes( 
     | 
|
| 
       130 
133 
     | 
    
         
             
                        GRPC_CHTTP2_STREAM_REF(stream_global, "chttp2_writing");
         
     | 
| 
       131 
134 
     | 
    
         
             
                      }
         
     | 
| 
       132 
135 
     | 
    
         
             
                    } else {
         
     | 
| 
       133 
     | 
    
         
            -
                       
     | 
| 
       134 
     | 
    
         
            -
             
     | 
| 
      
 136 
     | 
    
         
            +
                      grpc_chttp2_list_add_writing_stalled_by_transport(transport_writing,
         
     | 
| 
      
 137 
     | 
    
         
            +
                                                                        stream_writing);
         
     | 
| 
       135 
138 
     | 
    
         
             
                    }
         
     | 
| 
       136 
139 
     | 
    
         
             
                  }
         
     | 
| 
       137 
140 
     | 
    
         
             
                  if (stream_global->send_trailing_metadata) {
         
     | 
| 
         @@ -160,8 +163,8 @@ int grpc_chttp2_unlocking_check_writes( 
     | 
|
| 
       160 
163 
     | 
    
         
             
              /* if the grpc_chttp2_transport is ready to send a window update, do so here
         
     | 
| 
       161 
164 
     | 
    
         
             
                 also; 3/4 is a magic number that will likely get tuned soon */
         
     | 
| 
       162 
165 
     | 
    
         
             
              if (transport_global->announce_incoming_window > 0) {
         
     | 
| 
       163 
     | 
    
         
            -
                 
     | 
| 
       164 
     | 
    
         
            -
                    transport_global->announce_incoming_window,  
     | 
| 
      
 166 
     | 
    
         
            +
                uint32_t announced = (uint32_t)GPR_MIN(
         
     | 
| 
      
 167 
     | 
    
         
            +
                    transport_global->announce_incoming_window, UINT32_MAX);
         
     | 
| 
       165 
168 
     | 
    
         
             
                GRPC_CHTTP2_FLOW_DEBIT_TRANSPORT("write", transport_global,
         
     | 
| 
       166 
169 
     | 
    
         
             
                                                 announce_incoming_window, announced);
         
     | 
| 
       167 
170 
     | 
    
         
             
                gpr_slice_buffer_add(&transport_writing->outbuf,
         
     | 
| 
         @@ -188,7 +191,7 @@ void grpc_chttp2_perform_writes( 
     | 
|
| 
       188 
191 
     | 
    
         
             
                grpc_endpoint_write(exec_ctx, endpoint, &transport_writing->outbuf,
         
     | 
| 
       189 
192 
     | 
    
         
             
                                    &transport_writing->done_cb);
         
     | 
| 
       190 
193 
     | 
    
         
             
              } else {
         
     | 
| 
       191 
     | 
    
         
            -
                grpc_exec_ctx_enqueue(exec_ctx, &transport_writing->done_cb,  
     | 
| 
      
 194 
     | 
    
         
            +
                grpc_exec_ctx_enqueue(exec_ctx, &transport_writing->done_cb, true, NULL);
         
     | 
| 
       192 
195 
     | 
    
         
             
              }
         
     | 
| 
       193 
196 
     | 
    
         
             
            }
         
     | 
| 
       194 
197 
     | 
    
         | 
| 
         @@ -200,10 +203,10 @@ static void finalize_outbuf(grpc_exec_ctx *exec_ctx, 
     | 
|
| 
       200 
203 
     | 
    
         | 
| 
       201 
204 
     | 
    
         
             
              while (
         
     | 
| 
       202 
205 
     | 
    
         
             
                  grpc_chttp2_list_pop_writing_stream(transport_writing, &stream_writing)) {
         
     | 
| 
       203 
     | 
    
         
            -
                 
     | 
| 
       204 
     | 
    
         
            -
                    ( 
     | 
| 
       205 
     | 
    
         
            -
             
     | 
| 
       206 
     | 
    
         
            -
             
     | 
| 
      
 206 
     | 
    
         
            +
                uint32_t max_outgoing =
         
     | 
| 
      
 207 
     | 
    
         
            +
                    (uint32_t)GPR_MIN(GRPC_CHTTP2_MAX_PAYLOAD_LENGTH,
         
     | 
| 
      
 208 
     | 
    
         
            +
                                      GPR_MIN(stream_writing->outgoing_window,
         
     | 
| 
      
 209 
     | 
    
         
            +
                                              transport_writing->outgoing_window));
         
     | 
| 
       207 
210 
     | 
    
         
             
                /* send initial metadata if it's available */
         
     | 
| 
       208 
211 
     | 
    
         
             
                if (stream_writing->send_initial_metadata != NULL) {
         
     | 
| 
       209 
212 
     | 
    
         
             
                  grpc_chttp2_encode_header(
         
     | 
| 
         @@ -215,7 +218,7 @@ static void finalize_outbuf(grpc_exec_ctx *exec_ctx, 
     | 
|
| 
       215 
218 
     | 
    
         
             
                /* send any window updates */
         
     | 
| 
       216 
219 
     | 
    
         
             
                if (stream_writing->announce_window > 0 &&
         
     | 
| 
       217 
220 
     | 
    
         
             
                    stream_writing->send_initial_metadata == NULL) {
         
     | 
| 
       218 
     | 
    
         
            -
                   
     | 
| 
      
 221 
     | 
    
         
            +
                  uint32_t announce = stream_writing->announce_window;
         
     | 
| 
       219 
222 
     | 
    
         
             
                  gpr_slice_buffer_add(
         
     | 
| 
       220 
223 
     | 
    
         
             
                      &transport_writing->outbuf,
         
     | 
| 
       221 
224 
     | 
    
         
             
                      grpc_chttp2_window_update_create(stream_writing->id,
         
     | 
| 
         @@ -247,7 +250,7 @@ static void finalize_outbuf(grpc_exec_ctx *exec_ctx, 
     | 
|
| 
       247 
250 
     | 
    
         
             
                /* send any body bytes */
         
     | 
| 
       248 
251 
     | 
    
         
             
                if (stream_writing->flow_controlled_buffer.length > 0) {
         
     | 
| 
       249 
252 
     | 
    
         
             
                  if (max_outgoing > 0) {
         
     | 
| 
       250 
     | 
    
         
            -
                     
     | 
| 
      
 253 
     | 
    
         
            +
                    uint32_t send_bytes = (uint32_t)GPR_MIN(
         
     | 
| 
       251 
254 
     | 
    
         
             
                        max_outgoing, stream_writing->flow_controlled_buffer.length);
         
     | 
| 
       252 
255 
     | 
    
         
             
                    int is_last_data_frame =
         
     | 
| 
       253 
256 
     | 
    
         
             
                        stream_writing->send_message == NULL &&
         
     | 
| 
         @@ -273,8 +276,8 @@ static void finalize_outbuf(grpc_exec_ctx *exec_ctx, 
     | 
|
| 
       273 
276 
     | 
    
         
             
                      stream_writing->sent_message = 1;
         
     | 
| 
       274 
277 
     | 
    
         
             
                    }
         
     | 
| 
       275 
278 
     | 
    
         
             
                  } else if (transport_writing->outgoing_window == 0) {
         
     | 
| 
       276 
     | 
    
         
            -
                     
     | 
| 
       277 
     | 
    
         
            -
             
     | 
| 
      
 279 
     | 
    
         
            +
                    grpc_chttp2_list_add_writing_stalled_by_transport(transport_writing,
         
     | 
| 
      
 280 
     | 
    
         
            +
                                                                      stream_writing);
         
     | 
| 
       278 
281 
     | 
    
         
             
                    grpc_chttp2_list_add_written_stream(transport_writing, stream_writing);
         
     | 
| 
       279 
282 
     | 
    
         
             
                  }
         
     | 
| 
       280 
283 
     | 
    
         
             
                }
         
     | 
| 
         @@ -312,8 +315,8 @@ static void finalize_outbuf(grpc_exec_ctx *exec_ctx, 
     | 
|
| 
       312 
315 
     | 
    
         
             
                      /* do nothing - already reffed */
         
     | 
| 
       313 
316 
     | 
    
         
             
                    }
         
     | 
| 
       314 
317 
     | 
    
         
             
                  } else {
         
     | 
| 
       315 
     | 
    
         
            -
                     
     | 
| 
       316 
     | 
    
         
            -
             
     | 
| 
      
 318 
     | 
    
         
            +
                    grpc_chttp2_list_add_writing_stalled_by_transport(transport_writing,
         
     | 
| 
      
 319 
     | 
    
         
            +
                                                                      stream_writing);
         
     | 
| 
       317 
320 
     | 
    
         
             
                    grpc_chttp2_list_add_written_stream(transport_writing, stream_writing);
         
     | 
| 
       318 
321 
     | 
    
         
             
                  }
         
     | 
| 
       319 
322 
     | 
    
         
             
                } else {
         
     | 
| 
         @@ -1,6 +1,6 @@ 
     | 
|
| 
       1 
1 
     | 
    
         
             
            /*
         
     | 
| 
       2 
2 
     | 
    
         
             
             *
         
     | 
| 
       3 
     | 
    
         
            -
             * Copyright 2015, Google Inc.
         
     | 
| 
      
 3 
     | 
    
         
            +
             * Copyright 2015-2016, Google Inc.
         
     | 
| 
       4 
4 
     | 
    
         
             
             * All rights reserved.
         
     | 
| 
       5 
5 
     | 
    
         
             
             *
         
     | 
| 
       6 
6 
     | 
    
         
             
             * Redistribution and use in source and binary forms, with or without
         
     | 
| 
         @@ -86,14 +86,14 @@ static void unlock(grpc_exec_ctx *exec_ctx, grpc_chttp2_transport *t); 
     | 
|
| 
       86 
86 
     | 
    
         | 
| 
       87 
87 
     | 
    
         
             
            /* forward declarations of various callbacks that we'll build closures around */
         
     | 
| 
       88 
88 
     | 
    
         
             
            static void writing_action(grpc_exec_ctx *exec_ctx, void *t,
         
     | 
| 
       89 
     | 
    
         
            -
                                        
     | 
| 
      
 89 
     | 
    
         
            +
                                       bool iomgr_success_ignored);
         
     | 
| 
       90 
90 
     | 
    
         | 
| 
       91 
91 
     | 
    
         
             
            /** Set a transport level setting, and push it to our peer */
         
     | 
| 
       92 
92 
     | 
    
         
             
            static void push_setting(grpc_chttp2_transport *t, grpc_chttp2_setting_id id,
         
     | 
| 
       93 
     | 
    
         
            -
                                      
     | 
| 
      
 93 
     | 
    
         
            +
                                     uint32_t value);
         
     | 
| 
       94 
94 
     | 
    
         | 
| 
       95 
95 
     | 
    
         
             
            /** Endpoint callback to process incoming data */
         
     | 
| 
       96 
     | 
    
         
            -
            static void recv_data(grpc_exec_ctx *exec_ctx, void *tp,  
     | 
| 
      
 96 
     | 
    
         
            +
            static void recv_data(grpc_exec_ctx *exec_ctx, void *tp, bool success);
         
     | 
| 
       97 
97 
     | 
    
         | 
| 
       98 
98 
     | 
    
         
             
            /** Start disconnection chain */
         
     | 
| 
       99 
99 
     | 
    
         
             
            static void drop_connection(grpc_exec_ctx *exec_ctx, grpc_chttp2_transport *t);
         
     | 
| 
         @@ -134,7 +134,12 @@ static void connectivity_state_set( 
     | 
|
| 
       134 
134 
     | 
    
         
             
            static void check_read_ops(grpc_exec_ctx *exec_ctx,
         
     | 
| 
       135 
135 
     | 
    
         
             
                                       grpc_chttp2_transport_global *transport_global);
         
     | 
| 
       136 
136 
     | 
    
         | 
| 
       137 
     | 
    
         
            -
            static void  
     | 
| 
      
 137 
     | 
    
         
            +
            static void incoming_byte_stream_update_flow_control(
         
     | 
| 
      
 138 
     | 
    
         
            +
                grpc_chttp2_transport_global *transport_global,
         
     | 
| 
      
 139 
     | 
    
         
            +
                grpc_chttp2_stream_global *stream_global, size_t max_size_hint,
         
     | 
| 
      
 140 
     | 
    
         
            +
                size_t have_already);
         
     | 
| 
      
 141 
     | 
    
         
            +
             
     | 
| 
      
 142 
     | 
    
         
            +
            static void fail_pending_writes(grpc_exec_ctx *exec_ctx,
         
     | 
| 
       138 
143 
     | 
    
         
             
                                            grpc_chttp2_stream_global *stream_global);
         
     | 
| 
       139 
144 
     | 
    
         | 
| 
       140 
145 
     | 
    
         
             
            /*
         
     | 
| 
         @@ -178,7 +183,7 @@ static void destruct_transport(grpc_exec_ctx *exec_ctx, 
     | 
|
| 
       178 
183 
     | 
    
         
             
                 and maybe they hold resources that need to be freed */
         
     | 
| 
       179 
184 
     | 
    
         
             
              while (t->global.pings.next != &t->global.pings) {
         
     | 
| 
       180 
185 
     | 
    
         
             
                grpc_chttp2_outstanding_ping *ping = t->global.pings.next;
         
     | 
| 
       181 
     | 
    
         
            -
                grpc_exec_ctx_enqueue(exec_ctx, ping->on_recv,  
     | 
| 
      
 186 
     | 
    
         
            +
                grpc_exec_ctx_enqueue(exec_ctx, ping->on_recv, false, NULL);
         
     | 
| 
       182 
187 
     | 
    
         
             
                ping->next->prev = ping->prev;
         
     | 
| 
       183 
188 
     | 
    
         
             
                ping->prev->next = ping->next;
         
     | 
| 
       184 
189 
     | 
    
         
             
                gpr_free(ping);
         
     | 
| 
         @@ -218,7 +223,7 @@ static void ref_transport(grpc_chttp2_transport *t) { gpr_ref(&t->refs); } 
     | 
|
| 
       218 
223 
     | 
    
         | 
| 
       219 
224 
     | 
    
         
             
            static void init_transport(grpc_exec_ctx *exec_ctx, grpc_chttp2_transport *t,
         
     | 
| 
       220 
225 
     | 
    
         
             
                                       const grpc_channel_args *channel_args,
         
     | 
| 
       221 
     | 
    
         
            -
                                       grpc_endpoint *ep,  
     | 
| 
      
 226 
     | 
    
         
            +
                                       grpc_endpoint *ep, uint8_t is_client) {
         
     | 
| 
       222 
227 
     | 
    
         
             
              size_t i;
         
     | 
| 
       223 
228 
     | 
    
         
             
              int j;
         
     | 
| 
       224 
229 
     | 
    
         | 
| 
         @@ -313,7 +318,7 @@ static void init_transport(grpc_exec_ctx *exec_ctx, grpc_chttp2_transport *t, 
     | 
|
| 
       313 
318 
     | 
    
         
             
                              GRPC_ARG_MAX_CONCURRENT_STREAMS);
         
     | 
| 
       314 
319 
     | 
    
         
             
                    } else {
         
     | 
| 
       315 
320 
     | 
    
         
             
                      push_setting(t, GRPC_CHTTP2_SETTINGS_MAX_CONCURRENT_STREAMS,
         
     | 
| 
       316 
     | 
    
         
            -
                                   ( 
     | 
| 
      
 321 
     | 
    
         
            +
                                   (uint32_t)channel_args->args[i].value.integer);
         
     | 
| 
       317 
322 
     | 
    
         
             
                    }
         
     | 
| 
       318 
323 
     | 
    
         
             
                  } else if (0 == strcmp(channel_args->args[i].key,
         
     | 
| 
       319 
324 
     | 
    
         
             
                                         GRPC_ARG_HTTP2_INITIAL_SEQUENCE_NUMBER)) {
         
     | 
| 
         @@ -328,7 +333,7 @@ static void init_transport(grpc_exec_ctx *exec_ctx, grpc_chttp2_transport *t, 
     | 
|
| 
       328 
333 
     | 
    
         
             
                              is_client ? "client" : "server");
         
     | 
| 
       329 
334 
     | 
    
         
             
                    } else {
         
     | 
| 
       330 
335 
     | 
    
         
             
                      t->global.next_stream_id =
         
     | 
| 
       331 
     | 
    
         
            -
                          ( 
     | 
| 
      
 336 
     | 
    
         
            +
                          (uint32_t)channel_args->args[i].value.integer;
         
     | 
| 
       332 
337 
     | 
    
         
             
                    }
         
     | 
| 
       333 
338 
     | 
    
         
             
                  } else if (0 == strcmp(channel_args->args[i].key,
         
     | 
| 
       334 
339 
     | 
    
         
             
                                         GRPC_ARG_HTTP2_STREAM_LOOKAHEAD_BYTES)) {
         
     | 
| 
         @@ -340,7 +345,7 @@ static void init_transport(grpc_exec_ctx *exec_ctx, grpc_chttp2_transport *t, 
     | 
|
| 
       340 
345 
     | 
    
         
             
                              GRPC_ARG_HTTP2_STREAM_LOOKAHEAD_BYTES);
         
     | 
| 
       341 
346 
     | 
    
         
             
                    } else {
         
     | 
| 
       342 
347 
     | 
    
         
             
                      t->global.stream_lookahead =
         
     | 
| 
       343 
     | 
    
         
            -
                          ( 
     | 
| 
      
 348 
     | 
    
         
            +
                          (uint32_t)channel_args->args[i].value.integer;
         
     | 
| 
       344 
349 
     | 
    
         
             
                    }
         
     | 
| 
       345 
350 
     | 
    
         
             
                  } else if (0 == strcmp(channel_args->args[i].key,
         
     | 
| 
       346 
351 
     | 
    
         
             
                                         GRPC_ARG_HTTP2_HPACK_TABLE_SIZE_DECODER)) {
         
     | 
| 
         @@ -348,11 +353,11 @@ static void init_transport(grpc_exec_ctx *exec_ctx, grpc_chttp2_transport *t, 
     | 
|
| 
       348 
353 
     | 
    
         
             
                      gpr_log(GPR_ERROR, "%s: must be an integer",
         
     | 
| 
       349 
354 
     | 
    
         
             
                              GRPC_ARG_HTTP2_HPACK_TABLE_SIZE_DECODER);
         
     | 
| 
       350 
355 
     | 
    
         
             
                    } else if (channel_args->args[i].value.integer < 0) {
         
     | 
| 
       351 
     | 
    
         
            -
                      gpr_log( 
     | 
| 
      
 356 
     | 
    
         
            +
                      gpr_log(GPR_ERROR, "%s: must be non-negative",
         
     | 
| 
       352 
357 
     | 
    
         
             
                              GRPC_ARG_HTTP2_HPACK_TABLE_SIZE_DECODER);
         
     | 
| 
       353 
358 
     | 
    
         
             
                    } else {
         
     | 
| 
       354 
359 
     | 
    
         
             
                      push_setting(t, GRPC_CHTTP2_SETTINGS_HEADER_TABLE_SIZE,
         
     | 
| 
       355 
     | 
    
         
            -
                                   ( 
     | 
| 
      
 360 
     | 
    
         
            +
                                   (uint32_t)channel_args->args[i].value.integer);
         
     | 
| 
       356 
361 
     | 
    
         
             
                    }
         
     | 
| 
       357 
362 
     | 
    
         
             
                  } else if (0 == strcmp(channel_args->args[i].key,
         
     | 
| 
       358 
363 
     | 
    
         
             
                                         GRPC_ARG_HTTP2_HPACK_TABLE_SIZE_ENCODER)) {
         
     | 
| 
         @@ -360,12 +365,12 @@ static void init_transport(grpc_exec_ctx *exec_ctx, grpc_chttp2_transport *t, 
     | 
|
| 
       360 
365 
     | 
    
         
             
                      gpr_log(GPR_ERROR, "%s: must be an integer",
         
     | 
| 
       361 
366 
     | 
    
         
             
                              GRPC_ARG_HTTP2_HPACK_TABLE_SIZE_ENCODER);
         
     | 
| 
       362 
367 
     | 
    
         
             
                    } else if (channel_args->args[i].value.integer < 0) {
         
     | 
| 
       363 
     | 
    
         
            -
                      gpr_log( 
     | 
| 
      
 368 
     | 
    
         
            +
                      gpr_log(GPR_ERROR, "%s: must be non-negative",
         
     | 
| 
       364 
369 
     | 
    
         
             
                              GRPC_ARG_HTTP2_HPACK_TABLE_SIZE_ENCODER);
         
     | 
| 
       365 
370 
     | 
    
         
             
                    } else {
         
     | 
| 
       366 
371 
     | 
    
         
             
                      grpc_chttp2_hpack_compressor_set_max_usable_size(
         
     | 
| 
       367 
372 
     | 
    
         
             
                          &t->writing.hpack_compressor,
         
     | 
| 
       368 
     | 
    
         
            -
                          ( 
     | 
| 
      
 373 
     | 
    
         
            +
                          (uint32_t)channel_args->args[i].value.integer);
         
     | 
| 
       369 
374 
     | 
    
         
             
                    }
         
     | 
| 
       370 
375 
     | 
    
         
             
                  }
         
     | 
| 
       371 
376 
     | 
    
         
             
                }
         
     | 
| 
         @@ -477,7 +482,7 @@ static int init_stream(grpc_exec_ctx *exec_ctx, grpc_transport *gt, 
     | 
|
| 
       477 
482 
     | 
    
         
             
              grpc_chttp2_register_stream(t, s);
         
     | 
| 
       478 
483 
     | 
    
         
             
              if (server_data) {
         
     | 
| 
       479 
484 
     | 
    
         
             
                GPR_ASSERT(t->parsing_active);
         
     | 
| 
       480 
     | 
    
         
            -
                s->global.id = ( 
     | 
| 
      
 485 
     | 
    
         
            +
                s->global.id = (uint32_t)(uintptr_t)server_data;
         
     | 
| 
       481 
486 
     | 
    
         
             
                s->parsing.id = s->global.id;
         
     | 
| 
       482 
487 
     | 
    
         
             
                s->global.outgoing_window =
         
     | 
| 
       483 
488 
     | 
    
         
             
                    t->global.settings[GRPC_PEER_SETTINGS]
         
     | 
| 
         @@ -519,6 +524,7 @@ static void destroy_stream(grpc_exec_ctx *exec_ctx, grpc_transport *gt, 
     | 
|
| 
       519 
524 
     | 
    
         
             
              grpc_chttp2_list_remove_writable_stream(&t->global, &s->global);
         
     | 
| 
       520 
525 
     | 
    
         
             
              grpc_chttp2_list_remove_unannounced_incoming_window_available(&t->global,
         
     | 
| 
       521 
526 
     | 
    
         
             
                                                                            &s->global);
         
     | 
| 
      
 527 
     | 
    
         
            +
              grpc_chttp2_list_remove_stalled_by_transport(&t->global, &s->global);
         
     | 
| 
       522 
528 
     | 
    
         | 
| 
       523 
529 
     | 
    
         
             
              gpr_mu_unlock(&t->mu);
         
     | 
| 
       524 
530 
     | 
    
         | 
| 
         @@ -532,7 +538,7 @@ static void destroy_stream(grpc_exec_ctx *exec_ctx, grpc_transport *gt, 
     | 
|
| 
       532 
538 
     | 
    
         | 
| 
       533 
539 
     | 
    
         
             
              while (
         
     | 
| 
       534 
540 
     | 
    
         
             
                  (bs = grpc_chttp2_incoming_frame_queue_pop(&s->global.incoming_frames))) {
         
     | 
| 
       535 
     | 
    
         
            -
                grpc_byte_stream_destroy(bs);
         
     | 
| 
      
 541 
     | 
    
         
            +
                grpc_byte_stream_destroy(exec_ctx, bs);
         
     | 
| 
       536 
542 
     | 
    
         
             
              }
         
     | 
| 
       537 
543 
     | 
    
         | 
| 
       538 
544 
     | 
    
         
             
              GPR_ASSERT(s->global.send_initial_metadata_finished == NULL);
         
     | 
| 
         @@ -556,7 +562,7 @@ static void destroy_stream(grpc_exec_ctx *exec_ctx, grpc_transport *gt, 
     | 
|
| 
       556 
562 
     | 
    
         
             
            }
         
     | 
| 
       557 
563 
     | 
    
         | 
| 
       558 
564 
     | 
    
         
             
            grpc_chttp2_stream_parsing *grpc_chttp2_parsing_lookup_stream(
         
     | 
| 
       559 
     | 
    
         
            -
                grpc_chttp2_transport_parsing *transport_parsing,  
     | 
| 
      
 565 
     | 
    
         
            +
                grpc_chttp2_transport_parsing *transport_parsing, uint32_t id) {
         
     | 
| 
       560 
566 
     | 
    
         
             
              grpc_chttp2_transport *t = TRANSPORT_FROM_PARSING(transport_parsing);
         
     | 
| 
       561 
567 
     | 
    
         
             
              grpc_chttp2_stream *s =
         
     | 
| 
       562 
568 
     | 
    
         
             
                  grpc_chttp2_stream_map_find(&t->parsing_stream_map, id);
         
     | 
| 
         @@ -565,14 +571,14 @@ grpc_chttp2_stream_parsing *grpc_chttp2_parsing_lookup_stream( 
     | 
|
| 
       565 
571 
     | 
    
         | 
| 
       566 
572 
     | 
    
         
             
            grpc_chttp2_stream_parsing *grpc_chttp2_parsing_accept_stream(
         
     | 
| 
       567 
573 
     | 
    
         
             
                grpc_exec_ctx *exec_ctx, grpc_chttp2_transport_parsing *transport_parsing,
         
     | 
| 
       568 
     | 
    
         
            -
                 
     | 
| 
      
 574 
     | 
    
         
            +
                uint32_t id) {
         
     | 
| 
       569 
575 
     | 
    
         
             
              grpc_chttp2_stream *accepting;
         
     | 
| 
       570 
576 
     | 
    
         
             
              grpc_chttp2_transport *t = TRANSPORT_FROM_PARSING(transport_parsing);
         
     | 
| 
       571 
577 
     | 
    
         
             
              GPR_ASSERT(t->accepting_stream == NULL);
         
     | 
| 
       572 
578 
     | 
    
         
             
              t->accepting_stream = &accepting;
         
     | 
| 
       573 
579 
     | 
    
         
             
              t->channel_callback.accept_stream(exec_ctx,
         
     | 
| 
       574 
580 
     | 
    
         
             
                                                t->channel_callback.accept_stream_user_data,
         
     | 
| 
       575 
     | 
    
         
            -
                                                &t->base, (void *)( 
     | 
| 
      
 581 
     | 
    
         
            +
                                                &t->base, (void *)(uintptr_t)id);
         
     | 
| 
       576 
582 
     | 
    
         
             
              t->accepting_stream = NULL;
         
     | 
| 
       577 
583 
     | 
    
         
             
              return &accepting->parsing;
         
     | 
| 
       578 
584 
     | 
    
         
             
            }
         
     | 
| 
         @@ -596,7 +602,7 @@ static void unlock(grpc_exec_ctx *exec_ctx, grpc_chttp2_transport *t) { 
     | 
|
| 
       596 
602 
     | 
    
         
             
                                                     t->parsing_active)) {
         
     | 
| 
       597 
603 
     | 
    
         
             
                t->writing_active = 1;
         
     | 
| 
       598 
604 
     | 
    
         
             
                REF_TRANSPORT(t, "writing");
         
     | 
| 
       599 
     | 
    
         
            -
                grpc_exec_ctx_enqueue(exec_ctx, &t->writing_action,  
     | 
| 
      
 605 
     | 
    
         
            +
                grpc_exec_ctx_enqueue(exec_ctx, &t->writing_action, true, NULL);
         
     | 
| 
       600 
606 
     | 
    
         
             
                prevent_endpoint_shutdown(t);
         
     | 
| 
       601 
607 
     | 
    
         
             
              }
         
     | 
| 
       602 
608 
     | 
    
         
             
              check_read_ops(exec_ctx, &t->global);
         
     | 
| 
         @@ -610,10 +616,10 @@ static void unlock(grpc_exec_ctx *exec_ctx, grpc_chttp2_transport *t) { 
     | 
|
| 
       610 
616 
     | 
    
         
             
             */
         
     | 
| 
       611 
617 
     | 
    
         | 
| 
       612 
618 
     | 
    
         
             
            static void push_setting(grpc_chttp2_transport *t, grpc_chttp2_setting_id id,
         
     | 
| 
       613 
     | 
    
         
            -
                                      
     | 
| 
      
 619 
     | 
    
         
            +
                                     uint32_t value) {
         
     | 
| 
       614 
620 
     | 
    
         
             
              const grpc_chttp2_setting_parameters *sp =
         
     | 
| 
       615 
621 
     | 
    
         
             
                  &grpc_chttp2_settings_parameters[id];
         
     | 
| 
       616 
     | 
    
         
            -
               
     | 
| 
      
 622 
     | 
    
         
            +
              uint32_t use_value = GPR_CLAMP(value, sp->min_value, sp->max_value);
         
     | 
| 
       617 
623 
     | 
    
         
             
              if (use_value != value) {
         
     | 
| 
       618 
624 
     | 
    
         
             
                gpr_log(GPR_INFO, "Requested parameter %s clamped from %d to %d", sp->name,
         
     | 
| 
       619 
625 
     | 
    
         
             
                        value, use_value);
         
     | 
| 
         @@ -625,7 +631,7 @@ static void push_setting(grpc_chttp2_transport *t, grpc_chttp2_setting_id id, 
     | 
|
| 
       625 
631 
     | 
    
         
             
            }
         
     | 
| 
       626 
632 
     | 
    
         | 
| 
       627 
633 
     | 
    
         
             
            void grpc_chttp2_terminate_writing(grpc_exec_ctx *exec_ctx,
         
     | 
| 
       628 
     | 
    
         
            -
                                               void *transport_writing_ptr,  
     | 
| 
      
 634 
     | 
    
         
            +
                                               void *transport_writing_ptr, bool success) {
         
     | 
| 
       629 
635 
     | 
    
         
             
              grpc_chttp2_transport_writing *transport_writing = transport_writing_ptr;
         
     | 
| 
       630 
636 
     | 
    
         
             
              grpc_chttp2_transport *t = TRANSPORT_FROM_WRITING(transport_writing);
         
     | 
| 
       631 
637 
     | 
    
         
             
              grpc_chttp2_stream_global *stream_global;
         
     | 
| 
         @@ -642,7 +648,8 @@ void grpc_chttp2_terminate_writing(grpc_exec_ctx *exec_ctx, 
     | 
|
| 
       642 
648 
     | 
    
         | 
| 
       643 
649 
     | 
    
         
             
              grpc_chttp2_cleanup_writing(exec_ctx, &t->global, &t->writing);
         
     | 
| 
       644 
650 
     | 
    
         | 
| 
       645 
     | 
    
         
            -
              while (grpc_chttp2_list_pop_closed_waiting_for_writing(&t->global, 
     | 
| 
      
 651 
     | 
    
         
            +
              while (grpc_chttp2_list_pop_closed_waiting_for_writing(&t->global,
         
     | 
| 
      
 652 
     | 
    
         
            +
                                                                     &stream_global)) {
         
     | 
| 
       646 
653 
     | 
    
         
             
                fail_pending_writes(exec_ctx, stream_global);
         
     | 
| 
       647 
654 
     | 
    
         
             
                GRPC_CHTTP2_STREAM_UNREF(exec_ctx, stream_global, "finish_writes");
         
     | 
| 
       648 
655 
     | 
    
         
             
              }
         
     | 
| 
         @@ -662,7 +669,7 @@ void grpc_chttp2_terminate_writing(grpc_exec_ctx *exec_ctx, 
     | 
|
| 
       662 
669 
     | 
    
         
             
            }
         
     | 
| 
       663 
670 
     | 
    
         | 
| 
       664 
671 
     | 
    
         
             
            static void writing_action(grpc_exec_ctx *exec_ctx, void *gt,
         
     | 
| 
       665 
     | 
    
         
            -
                                        
     | 
| 
      
 672 
     | 
    
         
            +
                                       bool iomgr_success_ignored) {
         
     | 
| 
       666 
673 
     | 
    
         
             
              grpc_chttp2_transport *t = gt;
         
     | 
| 
       667 
674 
     | 
    
         
             
              GPR_TIMER_BEGIN("writing_action", 0);
         
     | 
| 
       668 
675 
     | 
    
         
             
              grpc_chttp2_perform_writes(exec_ctx, &t->writing, t->ep);
         
     | 
| 
         @@ -671,7 +678,7 @@ static void writing_action(grpc_exec_ctx *exec_ctx, void *gt, 
     | 
|
| 
       671 
678 
     | 
    
         | 
| 
       672 
679 
     | 
    
         
             
            void grpc_chttp2_add_incoming_goaway(
         
     | 
| 
       673 
680 
     | 
    
         
             
                grpc_exec_ctx *exec_ctx, grpc_chttp2_transport_global *transport_global,
         
     | 
| 
       674 
     | 
    
         
            -
                 
     | 
| 
      
 681 
     | 
    
         
            +
                uint32_t goaway_error, gpr_slice goaway_text) {
         
     | 
| 
       675 
682 
     | 
    
         
             
              char *msg = gpr_dump_slice(goaway_text, GPR_DUMP_HEX | GPR_DUMP_ASCII);
         
     | 
| 
       676 
683 
     | 
    
         
             
              gpr_log(GPR_DEBUG, "got goaway [%d]: %s", goaway_error, msg);
         
     | 
| 
       677 
684 
     | 
    
         
             
              gpr_free(msg);
         
     | 
| 
         @@ -684,7 +691,7 @@ void grpc_chttp2_add_incoming_goaway( 
     | 
|
| 
       684 
691 
     | 
    
         
             
            static void maybe_start_some_streams(
         
     | 
| 
       685 
692 
     | 
    
         
             
                grpc_exec_ctx *exec_ctx, grpc_chttp2_transport_global *transport_global) {
         
     | 
| 
       686 
693 
     | 
    
         
             
              grpc_chttp2_stream_global *stream_global;
         
     | 
| 
       687 
     | 
    
         
            -
               
     | 
| 
      
 694 
     | 
    
         
            +
              uint32_t stream_incoming_window;
         
     | 
| 
       688 
695 
     | 
    
         
             
              /* start streams where we have free grpc_chttp2_stream ids and free
         
     | 
| 
       689 
696 
     | 
    
         
             
               * concurrency */
         
     | 
| 
       690 
697 
     | 
    
         
             
              while (transport_global->next_stream_id <= MAX_CLIENT_STREAM_ID &&
         
     | 
| 
         @@ -752,7 +759,7 @@ void grpc_chttp2_complete_closure_step(grpc_exec_ctx *exec_ctx, 
     | 
|
| 
       752 
759 
     | 
    
         
             
                closure->final_data |= 1;
         
     | 
| 
       753 
760 
     | 
    
         
             
              }
         
     | 
| 
       754 
761 
     | 
    
         
             
              if (closure->final_data < 2) {
         
     | 
| 
       755 
     | 
    
         
            -
                grpc_exec_ctx_enqueue(exec_ctx, closure, closure->final_data == 0);
         
     | 
| 
      
 762 
     | 
    
         
            +
                grpc_exec_ctx_enqueue(exec_ctx, closure, closure->final_data == 0, NULL);
         
     | 
| 
       756 
763 
     | 
    
         
             
              }
         
     | 
| 
       757 
764 
     | 
    
         
             
              *pclosure = NULL;
         
     | 
| 
       758 
765 
     | 
    
         
             
            }
         
     | 
| 
         @@ -770,7 +777,7 @@ static int contains_non_ok_status( 
     | 
|
| 
       770 
777 
     | 
    
         
             
              return 0;
         
     | 
| 
       771 
778 
     | 
    
         
             
            }
         
     | 
| 
       772 
779 
     | 
    
         | 
| 
       773 
     | 
    
         
            -
            static void do_nothing(grpc_exec_ctx *exec_ctx, void *arg,  
     | 
| 
      
 780 
     | 
    
         
            +
            static void do_nothing(grpc_exec_ctx *exec_ctx, void *arg, bool success) {}
         
     | 
| 
       774 
781 
     | 
    
         | 
| 
       775 
782 
     | 
    
         
             
            static void perform_stream_op_locked(
         
     | 
| 
       776 
783 
     | 
    
         
             
                grpc_exec_ctx *exec_ctx, grpc_chttp2_transport_global *transport_global,
         
     | 
| 
         @@ -867,6 +874,13 @@ static void perform_stream_op_locked( 
     | 
|
| 
       867 
874 
     | 
    
         
             
                GPR_ASSERT(stream_global->recv_message_ready == NULL);
         
     | 
| 
       868 
875 
     | 
    
         
             
                stream_global->recv_message_ready = op->recv_message_ready;
         
     | 
| 
       869 
876 
     | 
    
         
             
                stream_global->recv_message = op->recv_message;
         
     | 
| 
      
 877 
     | 
    
         
            +
                if (stream_global->id != 0 &&
         
     | 
| 
      
 878 
     | 
    
         
            +
                    (stream_global->incoming_frames.head == NULL ||
         
     | 
| 
      
 879 
     | 
    
         
            +
                     stream_global->incoming_frames.head->is_tail)) {
         
     | 
| 
      
 880 
     | 
    
         
            +
                  incoming_byte_stream_update_flow_control(
         
     | 
| 
      
 881 
     | 
    
         
            +
                      transport_global, stream_global, transport_global->stream_lookahead,
         
     | 
| 
      
 882 
     | 
    
         
            +
                      0);
         
     | 
| 
      
 883 
     | 
    
         
            +
                }
         
     | 
| 
       870 
884 
     | 
    
         
             
                grpc_chttp2_list_add_check_read_ops(transport_global, stream_global);
         
     | 
| 
       871 
885 
     | 
    
         
             
              }
         
     | 
| 
       872 
886 
     | 
    
         | 
| 
         @@ -898,21 +912,21 @@ static void send_ping_locked(grpc_chttp2_transport *t, grpc_closure *on_recv) { 
     | 
|
| 
       898 
912 
     | 
    
         
             
              p->next = &t->global.pings;
         
     | 
| 
       899 
913 
     | 
    
         
             
              p->prev = p->next->prev;
         
     | 
| 
       900 
914 
     | 
    
         
             
              p->prev->next = p->next->prev = p;
         
     | 
| 
       901 
     | 
    
         
            -
              p->id[0] = ( 
     | 
| 
       902 
     | 
    
         
            -
              p->id[1] = ( 
     | 
| 
       903 
     | 
    
         
            -
              p->id[2] = ( 
     | 
| 
       904 
     | 
    
         
            -
              p->id[3] = ( 
     | 
| 
       905 
     | 
    
         
            -
              p->id[4] = ( 
     | 
| 
       906 
     | 
    
         
            -
              p->id[5] = ( 
     | 
| 
       907 
     | 
    
         
            -
              p->id[6] = ( 
     | 
| 
       908 
     | 
    
         
            -
              p->id[7] = ( 
     | 
| 
      
 915 
     | 
    
         
            +
              p->id[0] = (uint8_t)((t->global.ping_counter >> 56) & 0xff);
         
     | 
| 
      
 916 
     | 
    
         
            +
              p->id[1] = (uint8_t)((t->global.ping_counter >> 48) & 0xff);
         
     | 
| 
      
 917 
     | 
    
         
            +
              p->id[2] = (uint8_t)((t->global.ping_counter >> 40) & 0xff);
         
     | 
| 
      
 918 
     | 
    
         
            +
              p->id[3] = (uint8_t)((t->global.ping_counter >> 32) & 0xff);
         
     | 
| 
      
 919 
     | 
    
         
            +
              p->id[4] = (uint8_t)((t->global.ping_counter >> 24) & 0xff);
         
     | 
| 
      
 920 
     | 
    
         
            +
              p->id[5] = (uint8_t)((t->global.ping_counter >> 16) & 0xff);
         
     | 
| 
      
 921 
     | 
    
         
            +
              p->id[6] = (uint8_t)((t->global.ping_counter >> 8) & 0xff);
         
     | 
| 
      
 922 
     | 
    
         
            +
              p->id[7] = (uint8_t)(t->global.ping_counter & 0xff);
         
     | 
| 
       909 
923 
     | 
    
         
             
              p->on_recv = on_recv;
         
     | 
| 
       910 
924 
     | 
    
         
             
              gpr_slice_buffer_add(&t->global.qbuf, grpc_chttp2_ping_create(0, p->id));
         
     | 
| 
       911 
925 
     | 
    
         
             
            }
         
     | 
| 
       912 
926 
     | 
    
         | 
| 
       913 
927 
     | 
    
         
             
            void grpc_chttp2_ack_ping(grpc_exec_ctx *exec_ctx,
         
     | 
| 
       914 
928 
     | 
    
         
             
                                      grpc_chttp2_transport_parsing *transport_parsing,
         
     | 
| 
       915 
     | 
    
         
            -
                                      const  
     | 
| 
      
 929 
     | 
    
         
            +
                                      const uint8_t *opaque_8bytes) {
         
     | 
| 
       916 
930 
     | 
    
         
             
              grpc_chttp2_outstanding_ping *ping;
         
     | 
| 
       917 
931 
     | 
    
         
             
              grpc_chttp2_transport *t = TRANSPORT_FROM_PARSING(transport_parsing);
         
     | 
| 
       918 
932 
     | 
    
         
             
              grpc_chttp2_transport_global *transport_global = &t->global;
         
     | 
| 
         @@ -920,7 +934,7 @@ void grpc_chttp2_ack_ping(grpc_exec_ctx *exec_ctx, 
     | 
|
| 
       920 
934 
     | 
    
         
             
              for (ping = transport_global->pings.next; ping != &transport_global->pings;
         
     | 
| 
       921 
935 
     | 
    
         
             
                   ping = ping->next) {
         
     | 
| 
       922 
936 
     | 
    
         
             
                if (0 == memcmp(opaque_8bytes, ping->id, 8)) {
         
     | 
| 
       923 
     | 
    
         
            -
                  grpc_exec_ctx_enqueue(exec_ctx, ping->on_recv,  
     | 
| 
      
 937 
     | 
    
         
            +
                  grpc_exec_ctx_enqueue(exec_ctx, ping->on_recv, true, NULL);
         
     | 
| 
       924 
938 
     | 
    
         
             
                  ping->next->prev = ping->prev;
         
     | 
| 
       925 
939 
     | 
    
         
             
                  ping->prev->next = ping->next;
         
     | 
| 
       926 
940 
     | 
    
         
             
                  gpr_free(ping);
         
     | 
| 
         @@ -937,7 +951,7 @@ static void perform_transport_op(grpc_exec_ctx *exec_ctx, grpc_transport *gt, 
     | 
|
| 
       937 
951 
     | 
    
         | 
| 
       938 
952 
     | 
    
         
             
              lock(t);
         
     | 
| 
       939 
953 
     | 
    
         | 
| 
       940 
     | 
    
         
            -
              grpc_exec_ctx_enqueue(exec_ctx, op->on_consumed,  
     | 
| 
      
 954 
     | 
    
         
            +
              grpc_exec_ctx_enqueue(exec_ctx, op->on_consumed, true, NULL);
         
     | 
| 
       941 
955 
     | 
    
         | 
| 
       942 
956 
     | 
    
         
             
              if (op->on_connectivity_state_change != NULL) {
         
     | 
| 
       943 
957 
     | 
    
         
             
                grpc_connectivity_state_notify_on_state_change(
         
     | 
| 
         @@ -949,7 +963,7 @@ static void perform_transport_op(grpc_exec_ctx *exec_ctx, grpc_transport *gt, 
     | 
|
| 
       949 
963 
     | 
    
         
             
                t->global.sent_goaway = 1;
         
     | 
| 
       950 
964 
     | 
    
         
             
                grpc_chttp2_goaway_append(
         
     | 
| 
       951 
965 
     | 
    
         
             
                    t->global.last_incoming_stream_id,
         
     | 
| 
       952 
     | 
    
         
            -
                    ( 
     | 
| 
      
 966 
     | 
    
         
            +
                    (uint32_t)grpc_chttp2_grpc_status_to_http2_error(op->goaway_status),
         
     | 
| 
       953 
967 
     | 
    
         
             
                    gpr_slice_ref(*op->goaway_message), &t->global.qbuf);
         
     | 
| 
       954 
968 
     | 
    
         
             
                close_transport = !grpc_chttp2_has_streams(t);
         
     | 
| 
       955 
969 
     | 
    
         
             
              }
         
     | 
| 
         @@ -1008,11 +1022,13 @@ static void check_read_ops(grpc_exec_ctx *exec_ctx, 
     | 
|
| 
       1008 
1022 
     | 
    
         
             
                    *stream_global->recv_message = grpc_chttp2_incoming_frame_queue_pop(
         
     | 
| 
       1009 
1023 
     | 
    
         
             
                        &stream_global->incoming_frames);
         
     | 
| 
       1010 
1024 
     | 
    
         
             
                    GPR_ASSERT(*stream_global->recv_message != NULL);
         
     | 
| 
       1011 
     | 
    
         
            -
                    grpc_exec_ctx_enqueue(exec_ctx, stream_global->recv_message_ready,  
     | 
| 
      
 1025 
     | 
    
         
            +
                    grpc_exec_ctx_enqueue(exec_ctx, stream_global->recv_message_ready, true,
         
     | 
| 
      
 1026 
     | 
    
         
            +
                                          NULL);
         
     | 
| 
       1012 
1027 
     | 
    
         
             
                    stream_global->recv_message_ready = NULL;
         
     | 
| 
       1013 
1028 
     | 
    
         
             
                  } else if (stream_global->published_trailing_metadata) {
         
     | 
| 
       1014 
1029 
     | 
    
         
             
                    *stream_global->recv_message = NULL;
         
     | 
| 
       1015 
     | 
    
         
            -
                    grpc_exec_ctx_enqueue(exec_ctx, stream_global->recv_message_ready,  
     | 
| 
      
 1030 
     | 
    
         
            +
                    grpc_exec_ctx_enqueue(exec_ctx, stream_global->recv_message_ready, true,
         
     | 
| 
      
 1031 
     | 
    
         
            +
                                          NULL);
         
     | 
| 
       1016 
1032 
     | 
    
         
             
                    stream_global->recv_message_ready = NULL;
         
     | 
| 
       1017 
1033 
     | 
    
         
             
                  }
         
     | 
| 
       1018 
1034 
     | 
    
         
             
                }
         
     | 
| 
         @@ -1021,7 +1037,7 @@ static void check_read_ops(grpc_exec_ctx *exec_ctx, 
     | 
|
| 
       1021 
1037 
     | 
    
         
             
                  while (stream_global->seen_error &&
         
     | 
| 
       1022 
1038 
     | 
    
         
             
                         (bs = grpc_chttp2_incoming_frame_queue_pop(
         
     | 
| 
       1023 
1039 
     | 
    
         
             
                              &stream_global->incoming_frames)) != NULL) {
         
     | 
| 
       1024 
     | 
    
         
            -
                    grpc_byte_stream_destroy(bs);
         
     | 
| 
      
 1040 
     | 
    
         
            +
                    grpc_byte_stream_destroy(exec_ctx, bs);
         
     | 
| 
       1025 
1041 
     | 
    
         
             
                  }
         
     | 
| 
       1026 
1042 
     | 
    
         
             
                  if (stream_global->incoming_frames.head == NULL) {
         
     | 
| 
       1027 
1043 
     | 
    
         
             
                    grpc_chttp2_incoming_metadata_buffer_publish(
         
     | 
| 
         @@ -1035,7 +1051,7 @@ static void check_read_ops(grpc_exec_ctx *exec_ctx, 
     | 
|
| 
       1035 
1051 
     | 
    
         
             
            }
         
     | 
| 
       1036 
1052 
     | 
    
         | 
| 
       1037 
1053 
     | 
    
         
             
            static void remove_stream(grpc_exec_ctx *exec_ctx, grpc_chttp2_transport *t,
         
     | 
| 
       1038 
     | 
    
         
            -
                                       
     | 
| 
      
 1054 
     | 
    
         
            +
                                      uint32_t id) {
         
     | 
| 
       1039 
1055 
     | 
    
         
             
              size_t new_stream_count;
         
     | 
| 
       1040 
1056 
     | 
    
         
             
              grpc_chttp2_stream *s =
         
     | 
| 
       1041 
1057 
     | 
    
         
             
                  grpc_chttp2_stream_map_delete(&t->parsing_stream_map, id);
         
     | 
| 
         @@ -1049,15 +1065,21 @@ static void remove_stream(grpc_exec_ctx *exec_ctx, grpc_chttp2_transport *t, 
     | 
|
| 
       1049 
1065 
     | 
    
         
             
                t->parsing.incoming_stream = NULL;
         
     | 
| 
       1050 
1066 
     | 
    
         
             
                grpc_chttp2_parsing_become_skip_parser(exec_ctx, &t->parsing);
         
     | 
| 
       1051 
1067 
     | 
    
         
             
              }
         
     | 
| 
      
 1068 
     | 
    
         
            +
              if (s->parsing.data_parser.parsing_frame != NULL) {
         
     | 
| 
      
 1069 
     | 
    
         
            +
                grpc_chttp2_incoming_byte_stream_finished(
         
     | 
| 
      
 1070 
     | 
    
         
            +
                    exec_ctx, s->parsing.data_parser.parsing_frame, 0, 0);
         
     | 
| 
      
 1071 
     | 
    
         
            +
                s->parsing.data_parser.parsing_frame = NULL;
         
     | 
| 
      
 1072 
     | 
    
         
            +
              }
         
     | 
| 
      
 1073 
     | 
    
         
            +
             
     | 
| 
       1052 
1074 
     | 
    
         
             
              if (grpc_chttp2_unregister_stream(t, s) && t->global.sent_goaway) {
         
     | 
| 
       1053 
1075 
     | 
    
         
             
                close_transport_locked(exec_ctx, t);
         
     | 
| 
       1054 
1076 
     | 
    
         
             
              }
         
     | 
| 
       1055 
1077 
     | 
    
         | 
| 
       1056 
1078 
     | 
    
         
             
              new_stream_count = grpc_chttp2_stream_map_size(&t->parsing_stream_map) +
         
     | 
| 
       1057 
1079 
     | 
    
         
             
                                 grpc_chttp2_stream_map_size(&t->new_stream_map);
         
     | 
| 
       1058 
     | 
    
         
            -
              GPR_ASSERT(new_stream_count <=  
     | 
| 
      
 1080 
     | 
    
         
            +
              GPR_ASSERT(new_stream_count <= UINT32_MAX);
         
     | 
| 
       1059 
1081 
     | 
    
         
             
              if (new_stream_count != t->global.concurrent_stream_count) {
         
     | 
| 
       1060 
     | 
    
         
            -
                t->global.concurrent_stream_count = ( 
     | 
| 
      
 1082 
     | 
    
         
            +
                t->global.concurrent_stream_count = (uint32_t)new_stream_count;
         
     | 
| 
       1061 
1083 
     | 
    
         
             
                maybe_start_some_streams(exec_ctx, &t->global);
         
     | 
| 
       1062 
1084 
     | 
    
         
             
              }
         
     | 
| 
       1063 
1085 
     | 
    
         
             
            }
         
     | 
| 
         @@ -1071,7 +1093,7 @@ static void cancel_from_api(grpc_exec_ctx *exec_ctx, 
     | 
|
| 
       1071 
1093 
     | 
    
         
             
                    &transport_global->qbuf,
         
     | 
| 
       1072 
1094 
     | 
    
         
             
                    grpc_chttp2_rst_stream_create(
         
     | 
| 
       1073 
1095 
     | 
    
         
             
                        stream_global->id,
         
     | 
| 
       1074 
     | 
    
         
            -
                        ( 
     | 
| 
      
 1096 
     | 
    
         
            +
                        (uint32_t)grpc_chttp2_grpc_status_to_http2_error(status)));
         
     | 
| 
       1075 
1097 
     | 
    
         
             
              }
         
     | 
| 
       1076 
1098 
     | 
    
         
             
              grpc_chttp2_fake_status(exec_ctx, transport_global, stream_global, status,
         
     | 
| 
       1077 
1099 
     | 
    
         
             
                                      NULL);
         
     | 
| 
         @@ -1116,7 +1138,7 @@ void grpc_chttp2_fake_status(grpc_exec_ctx *exec_ctx, 
     | 
|
| 
       1116 
1138 
     | 
    
         
             
              }
         
     | 
| 
       1117 
1139 
     | 
    
         
             
            }
         
     | 
| 
       1118 
1140 
     | 
    
         | 
| 
       1119 
     | 
    
         
            -
            static void fail_pending_writes(grpc_exec_ctx *exec_ctx, 
     | 
| 
      
 1141 
     | 
    
         
            +
            static void fail_pending_writes(grpc_exec_ctx *exec_ctx,
         
     | 
| 
       1120 
1142 
     | 
    
         
             
                                            grpc_chttp2_stream_global *stream_global) {
         
     | 
| 
       1121 
1143 
     | 
    
         
             
              grpc_chttp2_complete_closure_step(
         
     | 
| 
       1122 
1144 
     | 
    
         
             
                  exec_ctx, &stream_global->send_initial_metadata_finished, 0);
         
     | 
| 
         @@ -1173,8 +1195,8 @@ static void close_from_api(grpc_exec_ctx *exec_ctx, 
     | 
|
| 
       1173 
1195 
     | 
    
         
             
              gpr_slice hdr;
         
     | 
| 
       1174 
1196 
     | 
    
         
             
              gpr_slice status_hdr;
         
     | 
| 
       1175 
1197 
     | 
    
         
             
              gpr_slice message_pfx;
         
     | 
| 
       1176 
     | 
    
         
            -
               
     | 
| 
       1177 
     | 
    
         
            -
               
     | 
| 
      
 1198 
     | 
    
         
            +
              uint8_t *p;
         
     | 
| 
      
 1199 
     | 
    
         
            +
              uint32_t len = 0;
         
     | 
| 
       1178 
1200 
     | 
    
         | 
| 
       1179 
1201 
     | 
    
         
             
              GPR_ASSERT(status >= 0 && (int)status < 100);
         
     | 
| 
       1180 
1202 
     | 
    
         | 
| 
         @@ -1203,14 +1225,14 @@ static void close_from_api(grpc_exec_ctx *exec_ctx, 
     | 
|
| 
       1203 
1225 
     | 
    
         
             
              *p++ = 's';
         
     | 
| 
       1204 
1226 
     | 
    
         
             
              if (status < 10) {
         
     | 
| 
       1205 
1227 
     | 
    
         
             
                *p++ = 1;
         
     | 
| 
       1206 
     | 
    
         
            -
                *p++ = ( 
     | 
| 
      
 1228 
     | 
    
         
            +
                *p++ = (uint8_t)('0' + status);
         
     | 
| 
       1207 
1229 
     | 
    
         
             
              } else {
         
     | 
| 
       1208 
1230 
     | 
    
         
             
                *p++ = 2;
         
     | 
| 
       1209 
     | 
    
         
            -
                *p++ = ( 
     | 
| 
       1210 
     | 
    
         
            -
                *p++ = ( 
     | 
| 
      
 1231 
     | 
    
         
            +
                *p++ = (uint8_t)('0' + (status / 10));
         
     | 
| 
      
 1232 
     | 
    
         
            +
                *p++ = (uint8_t)('0' + (status % 10));
         
     | 
| 
       1211 
1233 
     | 
    
         
             
              }
         
     | 
| 
       1212 
1234 
     | 
    
         
             
              GPR_ASSERT(p == GPR_SLICE_END_PTR(status_hdr));
         
     | 
| 
       1213 
     | 
    
         
            -
              len += ( 
     | 
| 
      
 1235 
     | 
    
         
            +
              len += (uint32_t)GPR_SLICE_LENGTH(status_hdr);
         
     | 
| 
       1214 
1236 
     | 
    
         | 
| 
       1215 
1237 
     | 
    
         
             
              if (optional_message) {
         
     | 
| 
       1216 
1238 
     | 
    
         
             
                GPR_ASSERT(GPR_SLICE_LENGTH(*optional_message) < 127);
         
     | 
| 
         @@ -1230,23 +1252,23 @@ static void close_from_api(grpc_exec_ctx *exec_ctx, 
     | 
|
| 
       1230 
1252 
     | 
    
         
             
                *p++ = 'a';
         
     | 
| 
       1231 
1253 
     | 
    
         
             
                *p++ = 'g';
         
     | 
| 
       1232 
1254 
     | 
    
         
             
                *p++ = 'e';
         
     | 
| 
       1233 
     | 
    
         
            -
                *p++ = ( 
     | 
| 
      
 1255 
     | 
    
         
            +
                *p++ = (uint8_t)GPR_SLICE_LENGTH(*optional_message);
         
     | 
| 
       1234 
1256 
     | 
    
         
             
                GPR_ASSERT(p == GPR_SLICE_END_PTR(message_pfx));
         
     | 
| 
       1235 
     | 
    
         
            -
                len += ( 
     | 
| 
       1236 
     | 
    
         
            -
                len += ( 
     | 
| 
      
 1257 
     | 
    
         
            +
                len += (uint32_t)GPR_SLICE_LENGTH(message_pfx);
         
     | 
| 
      
 1258 
     | 
    
         
            +
                len += (uint32_t)GPR_SLICE_LENGTH(*optional_message);
         
     | 
| 
       1237 
1259 
     | 
    
         
             
              }
         
     | 
| 
       1238 
1260 
     | 
    
         | 
| 
       1239 
1261 
     | 
    
         
             
              hdr = gpr_slice_malloc(9);
         
     | 
| 
       1240 
1262 
     | 
    
         
             
              p = GPR_SLICE_START_PTR(hdr);
         
     | 
| 
       1241 
     | 
    
         
            -
              *p++ = ( 
     | 
| 
       1242 
     | 
    
         
            -
              *p++ = ( 
     | 
| 
       1243 
     | 
    
         
            -
              *p++ = ( 
     | 
| 
      
 1263 
     | 
    
         
            +
              *p++ = (uint8_t)(len >> 16);
         
     | 
| 
      
 1264 
     | 
    
         
            +
              *p++ = (uint8_t)(len >> 8);
         
     | 
| 
      
 1265 
     | 
    
         
            +
              *p++ = (uint8_t)(len);
         
     | 
| 
       1244 
1266 
     | 
    
         
             
              *p++ = GRPC_CHTTP2_FRAME_HEADER;
         
     | 
| 
       1245 
1267 
     | 
    
         
             
              *p++ = GRPC_CHTTP2_DATA_FLAG_END_STREAM | GRPC_CHTTP2_DATA_FLAG_END_HEADERS;
         
     | 
| 
       1246 
     | 
    
         
            -
              *p++ = ( 
     | 
| 
       1247 
     | 
    
         
            -
              *p++ = ( 
     | 
| 
       1248 
     | 
    
         
            -
              *p++ = ( 
     | 
| 
       1249 
     | 
    
         
            -
              *p++ = ( 
     | 
| 
      
 1268 
     | 
    
         
            +
              *p++ = (uint8_t)(stream_global->id >> 24);
         
     | 
| 
      
 1269 
     | 
    
         
            +
              *p++ = (uint8_t)(stream_global->id >> 16);
         
     | 
| 
      
 1270 
     | 
    
         
            +
              *p++ = (uint8_t)(stream_global->id >> 8);
         
     | 
| 
      
 1271 
     | 
    
         
            +
              *p++ = (uint8_t)(stream_global->id);
         
     | 
| 
       1250 
1272 
     | 
    
         
             
              GPR_ASSERT(p == GPR_SLICE_END_PTR(hdr));
         
     | 
| 
       1251 
1273 
     | 
    
         | 
| 
       1252 
1274 
     | 
    
         
             
              gpr_slice_buffer_add(&transport_global->qbuf, hdr);
         
     | 
| 
         @@ -1288,14 +1310,14 @@ static void drop_connection(grpc_exec_ctx *exec_ctx, grpc_chttp2_transport *t) { 
     | 
|
| 
       1288 
1310 
     | 
    
         
             
            }
         
     | 
| 
       1289 
1311 
     | 
    
         | 
| 
       1290 
1312 
     | 
    
         
             
            /** update window from a settings change */
         
     | 
| 
       1291 
     | 
    
         
            -
            static void update_global_window(void *args,  
     | 
| 
      
 1313 
     | 
    
         
            +
            static void update_global_window(void *args, uint32_t id, void *stream) {
         
     | 
| 
       1292 
1314 
     | 
    
         
             
              grpc_chttp2_transport *t = args;
         
     | 
| 
       1293 
1315 
     | 
    
         
             
              grpc_chttp2_stream *s = stream;
         
     | 
| 
       1294 
1316 
     | 
    
         
             
              grpc_chttp2_transport_global *transport_global = &t->global;
         
     | 
| 
       1295 
1317 
     | 
    
         
             
              grpc_chttp2_stream_global *stream_global = &s->global;
         
     | 
| 
       1296 
1318 
     | 
    
         
             
              int was_zero;
         
     | 
| 
       1297 
1319 
     | 
    
         
             
              int is_zero;
         
     | 
| 
       1298 
     | 
    
         
            -
               
     | 
| 
      
 1320 
     | 
    
         
            +
              int64_t initial_window_update = t->parsing.initial_window_update;
         
     | 
| 
       1299 
1321 
     | 
    
         | 
| 
       1300 
1322 
     | 
    
         
             
              was_zero = stream_global->outgoing_window <= 0;
         
     | 
| 
       1301 
1323 
     | 
    
         
             
              GRPC_CHTTP2_FLOW_CREDIT_STREAM("settings", transport_global, stream_global,
         
     | 
| 
         @@ -1316,7 +1338,7 @@ static void read_error_locked(grpc_exec_ctx *exec_ctx, 
     | 
|
| 
       1316 
1338 
     | 
    
         
             
            }
         
     | 
| 
       1317 
1339 
     | 
    
         | 
| 
       1318 
1340 
     | 
    
         
             
            /* tcp read callback */
         
     | 
| 
       1319 
     | 
    
         
            -
            static void recv_data(grpc_exec_ctx *exec_ctx, void *tp,  
     | 
| 
      
 1341 
     | 
    
         
            +
            static void recv_data(grpc_exec_ctx *exec_ctx, void *tp, bool success) {
         
     | 
| 
       1320 
1342 
     | 
    
         
             
              size_t i;
         
     | 
| 
       1321 
1343 
     | 
    
         
             
              int keep_reading = 0;
         
     | 
| 
       1322 
1344 
     | 
    
         
             
              grpc_chttp2_transport *t = tp;
         
     | 
| 
         @@ -1355,7 +1377,7 @@ static void recv_data(grpc_exec_ctx *exec_ctx, void *tp, int success) { 
     | 
|
| 
       1355 
1377 
     | 
    
         
             
                grpc_chttp2_stream_map_move_into(&t->new_stream_map,
         
     | 
| 
       1356 
1378 
     | 
    
         
             
                                                 &t->parsing_stream_map);
         
     | 
| 
       1357 
1379 
     | 
    
         
             
                transport_global->concurrent_stream_count =
         
     | 
| 
       1358 
     | 
    
         
            -
                    ( 
     | 
| 
      
 1380 
     | 
    
         
            +
                    (uint32_t)grpc_chttp2_stream_map_size(&t->parsing_stream_map);
         
     | 
| 
       1359 
1381 
     | 
    
         
             
                if (transport_parsing->initial_window_update != 0) {
         
     | 
| 
       1360 
1382 
     | 
    
         
             
                  grpc_chttp2_stream_map_for_each(&t->parsing_stream_map,
         
     | 
| 
       1361 
1383 
     | 
    
         
             
                                                  update_global_window, t);
         
     | 
| 
         @@ -1448,28 +1470,27 @@ static void incoming_byte_stream_update_flow_control( 
     | 
|
| 
       1448 
1470 
     | 
    
         
             
                grpc_chttp2_transport_global *transport_global,
         
     | 
| 
       1449 
1471 
     | 
    
         
             
                grpc_chttp2_stream_global *stream_global, size_t max_size_hint,
         
     | 
| 
       1450 
1472 
     | 
    
         
             
                size_t have_already) {
         
     | 
| 
       1451 
     | 
    
         
            -
               
     | 
| 
      
 1473 
     | 
    
         
            +
              uint32_t max_recv_bytes;
         
     | 
| 
       1452 
1474 
     | 
    
         | 
| 
       1453 
1475 
     | 
    
         
             
              /* clamp max recv hint to an allowable size */
         
     | 
| 
       1454 
     | 
    
         
            -
              if (max_size_hint >=  
     | 
| 
       1455 
     | 
    
         
            -
                max_recv_bytes =  
     | 
| 
      
 1476 
     | 
    
         
            +
              if (max_size_hint >= UINT32_MAX - transport_global->stream_lookahead) {
         
     | 
| 
      
 1477 
     | 
    
         
            +
                max_recv_bytes = UINT32_MAX - transport_global->stream_lookahead;
         
     | 
| 
       1456 
1478 
     | 
    
         
             
              } else {
         
     | 
| 
       1457 
     | 
    
         
            -
                max_recv_bytes = ( 
     | 
| 
      
 1479 
     | 
    
         
            +
                max_recv_bytes = (uint32_t)max_size_hint;
         
     | 
| 
       1458 
1480 
     | 
    
         
             
              }
         
     | 
| 
       1459 
1481 
     | 
    
         | 
| 
       1460 
1482 
     | 
    
         
             
              /* account for bytes already received but unknown to higher layers */
         
     | 
| 
       1461 
1483 
     | 
    
         
             
              if (max_recv_bytes >= have_already) {
         
     | 
| 
       1462 
     | 
    
         
            -
                max_recv_bytes -= ( 
     | 
| 
      
 1484 
     | 
    
         
            +
                max_recv_bytes -= (uint32_t)have_already;
         
     | 
| 
       1463 
1485 
     | 
    
         
             
              } else {
         
     | 
| 
       1464 
1486 
     | 
    
         
             
                max_recv_bytes = 0;
         
     | 
| 
       1465 
1487 
     | 
    
         
             
              }
         
     | 
| 
       1466 
1488 
     | 
    
         | 
| 
       1467 
1489 
     | 
    
         
             
              /* add some small lookahead to keep pipelines flowing */
         
     | 
| 
       1468 
     | 
    
         
            -
              GPR_ASSERT(max_recv_bytes <=
         
     | 
| 
       1469 
     | 
    
         
            -
                         GPR_UINT32_MAX - transport_global->stream_lookahead);
         
     | 
| 
      
 1490 
     | 
    
         
            +
              GPR_ASSERT(max_recv_bytes <= UINT32_MAX - transport_global->stream_lookahead);
         
     | 
| 
       1470 
1491 
     | 
    
         
             
              max_recv_bytes += transport_global->stream_lookahead;
         
     | 
| 
       1471 
1492 
     | 
    
         
             
              if (stream_global->max_recv_bytes < max_recv_bytes) {
         
     | 
| 
       1472 
     | 
    
         
            -
                 
     | 
| 
      
 1493 
     | 
    
         
            +
                uint32_t add_max_recv_bytes =
         
     | 
| 
       1473 
1494 
     | 
    
         
             
                    max_recv_bytes - stream_global->max_recv_bytes;
         
     | 
| 
       1474 
1495 
     | 
    
         
             
                GRPC_CHTTP2_FLOW_CREDIT_STREAM("op", transport_global, stream_global,
         
     | 
| 
       1475 
1496 
     | 
    
         
             
                                               max_recv_bytes, add_max_recv_bytes);
         
     | 
| 
         @@ -1503,6 +1524,10 @@ static int incoming_byte_stream_next(grpc_exec_ctx *exec_ctx, 
     | 
|
| 
       1503 
1524 
     | 
    
         
             
                *slice = gpr_slice_buffer_take_first(&bs->slices);
         
     | 
| 
       1504 
1525 
     | 
    
         
             
                unlock(exec_ctx, bs->transport);
         
     | 
| 
       1505 
1526 
     | 
    
         
             
                return 1;
         
     | 
| 
      
 1527 
     | 
    
         
            +
              } else if (bs->failed) {
         
     | 
| 
      
 1528 
     | 
    
         
            +
                grpc_exec_ctx_enqueue(exec_ctx, on_complete, false, NULL);
         
     | 
| 
      
 1529 
     | 
    
         
            +
                unlock(exec_ctx, bs->transport);
         
     | 
| 
      
 1530 
     | 
    
         
            +
                return 0;
         
     | 
| 
       1506 
1531 
     | 
    
         
             
              } else {
         
     | 
| 
       1507 
1532 
     | 
    
         
             
                bs->on_next = on_complete;
         
     | 
| 
       1508 
1533 
     | 
    
         
             
                bs->next = slice;
         
     | 
| 
         @@ -1518,7 +1543,8 @@ static void incoming_byte_stream_unref(grpc_chttp2_incoming_byte_stream *bs) { 
     | 
|
| 
       1518 
1543 
     | 
    
         
             
              }
         
     | 
| 
       1519 
1544 
     | 
    
         
             
            }
         
     | 
| 
       1520 
1545 
     | 
    
         | 
| 
       1521 
     | 
    
         
            -
            static void incoming_byte_stream_destroy( 
     | 
| 
      
 1546 
     | 
    
         
            +
            static void incoming_byte_stream_destroy(grpc_exec_ctx *exec_ctx,
         
     | 
| 
      
 1547 
     | 
    
         
            +
                                                     grpc_byte_stream *byte_stream) {
         
     | 
| 
       1522 
1548 
     | 
    
         
             
              incoming_byte_stream_unref((grpc_chttp2_incoming_byte_stream *)byte_stream);
         
     | 
| 
       1523 
1549 
     | 
    
         
             
            }
         
     | 
| 
       1524 
1550 
     | 
    
         | 
| 
         @@ -1528,7 +1554,7 @@ void grpc_chttp2_incoming_byte_stream_push(grpc_exec_ctx *exec_ctx, 
     | 
|
| 
       1528 
1554 
     | 
    
         
             
              gpr_mu_lock(&bs->transport->mu);
         
     | 
| 
       1529 
1555 
     | 
    
         
             
              if (bs->on_next != NULL) {
         
     | 
| 
       1530 
1556 
     | 
    
         
             
                *bs->next = slice;
         
     | 
| 
       1531 
     | 
    
         
            -
                grpc_exec_ctx_enqueue(exec_ctx, bs->on_next,  
     | 
| 
      
 1557 
     | 
    
         
            +
                grpc_exec_ctx_enqueue(exec_ctx, bs->on_next, true, NULL);
         
     | 
| 
       1532 
1558 
     | 
    
         
             
                bs->on_next = NULL;
         
     | 
| 
       1533 
1559 
     | 
    
         
             
              } else {
         
     | 
| 
       1534 
1560 
     | 
    
         
             
                gpr_slice_buffer_add(&bs->slices, slice);
         
     | 
| 
         @@ -1537,14 +1563,36 @@ void grpc_chttp2_incoming_byte_stream_push(grpc_exec_ctx *exec_ctx, 
     | 
|
| 
       1537 
1563 
     | 
    
         
             
            }
         
     | 
| 
       1538 
1564 
     | 
    
         | 
| 
       1539 
1565 
     | 
    
         
             
            void grpc_chttp2_incoming_byte_stream_finished(
         
     | 
| 
       1540 
     | 
    
         
            -
                grpc_exec_ctx *exec_ctx, grpc_chttp2_incoming_byte_stream *bs 
     | 
| 
      
 1566 
     | 
    
         
            +
                grpc_exec_ctx *exec_ctx, grpc_chttp2_incoming_byte_stream *bs, int success,
         
     | 
| 
      
 1567 
     | 
    
         
            +
                int from_parsing_thread) {
         
     | 
| 
      
 1568 
     | 
    
         
            +
              if (!success) {
         
     | 
| 
      
 1569 
     | 
    
         
            +
                if (from_parsing_thread) {
         
     | 
| 
      
 1570 
     | 
    
         
            +
                  gpr_mu_lock(&bs->transport->mu);
         
     | 
| 
      
 1571 
     | 
    
         
            +
                }
         
     | 
| 
      
 1572 
     | 
    
         
            +
                grpc_exec_ctx_enqueue(exec_ctx, bs->on_next, false, NULL);
         
     | 
| 
      
 1573 
     | 
    
         
            +
                bs->on_next = NULL;
         
     | 
| 
      
 1574 
     | 
    
         
            +
                bs->failed = 1;
         
     | 
| 
      
 1575 
     | 
    
         
            +
                if (from_parsing_thread) {
         
     | 
| 
      
 1576 
     | 
    
         
            +
                  gpr_mu_unlock(&bs->transport->mu);
         
     | 
| 
      
 1577 
     | 
    
         
            +
                }
         
     | 
| 
      
 1578 
     | 
    
         
            +
              } else {
         
     | 
| 
      
 1579 
     | 
    
         
            +
            #ifndef NDEBUG
         
     | 
| 
      
 1580 
     | 
    
         
            +
                if (from_parsing_thread) {
         
     | 
| 
      
 1581 
     | 
    
         
            +
                  gpr_mu_lock(&bs->transport->mu);
         
     | 
| 
      
 1582 
     | 
    
         
            +
                }
         
     | 
| 
      
 1583 
     | 
    
         
            +
                GPR_ASSERT(bs->on_next == NULL);
         
     | 
| 
      
 1584 
     | 
    
         
            +
                if (from_parsing_thread) {
         
     | 
| 
      
 1585 
     | 
    
         
            +
                  gpr_mu_unlock(&bs->transport->mu);
         
     | 
| 
      
 1586 
     | 
    
         
            +
                }
         
     | 
| 
      
 1587 
     | 
    
         
            +
            #endif
         
     | 
| 
      
 1588 
     | 
    
         
            +
              }
         
     | 
| 
       1541 
1589 
     | 
    
         
             
              incoming_byte_stream_unref(bs);
         
     | 
| 
       1542 
1590 
     | 
    
         
             
            }
         
     | 
| 
       1543 
1591 
     | 
    
         | 
| 
       1544 
1592 
     | 
    
         
             
            grpc_chttp2_incoming_byte_stream *grpc_chttp2_incoming_byte_stream_create(
         
     | 
| 
       1545 
1593 
     | 
    
         
             
                grpc_exec_ctx *exec_ctx, grpc_chttp2_transport_parsing *transport_parsing,
         
     | 
| 
       1546 
     | 
    
         
            -
                grpc_chttp2_stream_parsing *stream_parsing,  
     | 
| 
       1547 
     | 
    
         
            -
                 
     | 
| 
      
 1594 
     | 
    
         
            +
                grpc_chttp2_stream_parsing *stream_parsing, uint32_t frame_size,
         
     | 
| 
      
 1595 
     | 
    
         
            +
                uint32_t flags, grpc_chttp2_incoming_frame_queue *add_to_queue) {
         
     | 
| 
       1548 
1596 
     | 
    
         
             
              grpc_chttp2_incoming_byte_stream *incoming_byte_stream =
         
     | 
| 
       1549 
1597 
     | 
    
         
             
                  gpr_malloc(sizeof(*incoming_byte_stream));
         
     | 
| 
       1550 
1598 
     | 
    
         
             
              incoming_byte_stream->base.length = frame_size;
         
     | 
| 
         @@ -1558,6 +1606,7 @@ grpc_chttp2_incoming_byte_stream *grpc_chttp2_incoming_byte_stream_create( 
     | 
|
| 
       1558 
1606 
     | 
    
         
             
              gpr_slice_buffer_init(&incoming_byte_stream->slices);
         
     | 
| 
       1559 
1607 
     | 
    
         
             
              incoming_byte_stream->on_next = NULL;
         
     | 
| 
       1560 
1608 
     | 
    
         
             
              incoming_byte_stream->is_tail = 1;
         
     | 
| 
      
 1609 
     | 
    
         
            +
              incoming_byte_stream->failed = 0;
         
     | 
| 
       1561 
1610 
     | 
    
         
             
              if (add_to_queue->head == NULL) {
         
     | 
| 
       1562 
1611 
     | 
    
         
             
                add_to_queue->head = incoming_byte_stream;
         
     | 
| 
       1563 
1612 
     | 
    
         
             
              } else {
         
     | 
| 
         @@ -1565,13 +1614,6 @@ grpc_chttp2_incoming_byte_stream *grpc_chttp2_incoming_byte_stream_create( 
     | 
|
| 
       1565 
1614 
     | 
    
         
             
                add_to_queue->tail->next_message = incoming_byte_stream;
         
     | 
| 
       1566 
1615 
     | 
    
         
             
              }
         
     | 
| 
       1567 
1616 
     | 
    
         
             
              add_to_queue->tail = incoming_byte_stream;
         
     | 
| 
       1568 
     | 
    
         
            -
              if (frame_size == 0) {
         
     | 
| 
       1569 
     | 
    
         
            -
                lock(TRANSPORT_FROM_PARSING(transport_parsing));
         
     | 
| 
       1570 
     | 
    
         
            -
                incoming_byte_stream_update_flow_control(
         
     | 
| 
       1571 
     | 
    
         
            -
                    &TRANSPORT_FROM_PARSING(transport_parsing)->global,
         
     | 
| 
       1572 
     | 
    
         
            -
                    &STREAM_FROM_PARSING(stream_parsing)->global, 0, 0);
         
     | 
| 
       1573 
     | 
    
         
            -
                unlock(exec_ctx, TRANSPORT_FROM_PARSING(transport_parsing));
         
     | 
| 
       1574 
     | 
    
         
            -
              }
         
     | 
| 
       1575 
1617 
     | 
    
         
             
              return incoming_byte_stream;
         
     | 
| 
       1576 
1618 
     | 
    
         
             
            }
         
     | 
| 
       1577 
1619 
     | 
    
         | 
| 
         @@ -1580,7 +1622,7 @@ grpc_chttp2_incoming_byte_stream *grpc_chttp2_incoming_byte_stream_create( 
     | 
|
| 
       1580 
1622 
     | 
    
         
             
             */
         
     | 
| 
       1581 
1623 
     | 
    
         | 
| 
       1582 
1624 
     | 
    
         
             
            static char *format_flowctl_context_var(const char *context, const char *var,
         
     | 
| 
       1583 
     | 
    
         
            -
                                                     
     | 
| 
      
 1625 
     | 
    
         
            +
                                                    int64_t val, uint32_t id,
         
     | 
| 
       1584 
1626 
     | 
    
         
             
                                                    char **scope) {
         
     | 
| 
       1585 
1627 
     | 
    
         
             
              char *underscore_pos;
         
     | 
| 
       1586 
1628 
     | 
    
         
             
              char *result;
         
     | 
| 
         @@ -1615,8 +1657,7 @@ void grpc_chttp2_flowctl_trace(const char *file, int line, const char *phase, 
     | 
|
| 
       1615 
1657 
     | 
    
         
             
                                           grpc_chttp2_flowctl_op op, const char *context1,
         
     | 
| 
       1616 
1658 
     | 
    
         
             
                                           const char *var1, const char *context2,
         
     | 
| 
       1617 
1659 
     | 
    
         
             
                                           const char *var2, int is_client,
         
     | 
| 
       1618 
     | 
    
         
            -
                                            
     | 
| 
       1619 
     | 
    
         
            -
                                           gpr_int64 val2) {
         
     | 
| 
      
 1660 
     | 
    
         
            +
                                           uint32_t stream_id, int64_t val1, int64_t val2) {
         
     | 
| 
       1620 
1661 
     | 
    
         
             
              char *scope1;
         
     | 
| 
       1621 
1662 
     | 
    
         
             
              char *scope2;
         
     | 
| 
       1622 
1663 
     | 
    
         
             
              char *label1 =
         
     |