grpc 1.7.3 → 1.8.0
Sign up to get free protection for your applications and to get access to all the features.
Potentially problematic release.
This version of grpc might be problematic. Click here for more details.
- checksums.yaml +4 -4
- data/Makefile +2106 -2116
- data/include/grpc/census.h +1 -432
- data/include/grpc/compression.h +9 -9
- data/include/grpc/grpc.h +115 -98
- data/include/grpc/grpc_cronet.h +3 -3
- data/include/grpc/grpc_posix.h +4 -4
- data/include/grpc/grpc_security.h +160 -88
- data/include/grpc/grpc_security_constants.h +7 -0
- data/include/grpc/impl/codegen/atm.h +9 -1
- data/include/grpc/impl/codegen/atm_gcc_atomic.h +13 -4
- data/include/grpc/impl/codegen/atm_gcc_sync.h +6 -5
- data/include/grpc/impl/codegen/atm_windows.h +23 -22
- data/include/grpc/impl/codegen/byte_buffer.h +14 -14
- data/include/grpc/impl/codegen/byte_buffer_reader.h +2 -2
- data/include/grpc/impl/codegen/connectivity_state.h +0 -2
- data/include/grpc/impl/codegen/grpc_types.h +32 -28
- data/include/grpc/impl/codegen/port_platform.h +48 -0
- data/include/grpc/impl/codegen/slice.h +10 -10
- data/include/grpc/impl/codegen/sync_generic.h +9 -3
- data/include/grpc/slice.h +16 -17
- data/include/grpc/slice_buffer.h +22 -22
- data/include/grpc/support/alloc.h +11 -11
- data/include/grpc/support/avl.h +28 -20
- data/include/grpc/support/cmdline.h +13 -13
- data/include/grpc/support/histogram.h +17 -17
- data/include/grpc/support/host_port.h +2 -2
- data/include/grpc/support/log.h +9 -9
- data/include/grpc/support/log_windows.h +1 -1
- data/include/grpc/support/string_util.h +2 -2
- data/include/grpc/support/subprocess.h +5 -5
- data/include/grpc/support/sync.h +43 -27
- data/include/grpc/support/thd.h +6 -6
- data/include/grpc/support/tls_gcc.h +1 -1
- data/include/grpc/support/tls_pthread.h +1 -1
- data/src/core/ext/census/{grpc_context.c → grpc_context.cc} +5 -8
- data/src/core/ext/filters/client_channel/backup_poller.cc +165 -0
- data/src/core/ext/{census/grpc_filter.h → filters/client_channel/backup_poller.h} +12 -7
- data/src/core/ext/filters/client_channel/{channel_connectivity.c → channel_connectivity.cc} +45 -42
- data/src/core/ext/filters/client_channel/{client_channel.c → client_channel.cc} +452 -417
- data/src/core/ext/filters/client_channel/client_channel.h +16 -8
- data/src/core/ext/filters/client_channel/{client_channel_factory.c → client_channel_factory.cc} +0 -0
- data/src/core/ext/filters/client_channel/client_channel_factory.h +29 -21
- data/src/core/ext/filters/client_channel/{client_channel_plugin.c → client_channel_plugin.cc} +15 -19
- data/src/core/ext/filters/client_channel/{connector.c → connector.cc} +0 -0
- data/src/core/ext/filters/client_channel/connector.h +29 -21
- data/src/core/ext/filters/client_channel/{http_connect_handshaker.c → http_connect_handshaker.cc} +10 -10
- data/src/core/ext/filters/client_channel/http_connect_handshaker.h +8 -0
- data/src/core/ext/filters/client_channel/{http_proxy.c → http_proxy.cc} +14 -14
- data/src/core/ext/filters/client_channel/http_proxy.h +8 -0
- data/src/core/ext/filters/client_channel/{lb_policy.c → lb_policy.cc} +47 -48
- data/src/core/ext/filters/client_channel/lb_policy.h +76 -70
- data/src/core/ext/filters/client_channel/lb_policy/grpclb/{client_load_reporting_filter.c → client_load_reporting_filter.cc} +28 -29
- data/src/core/ext/filters/client_channel/lb_policy/grpclb/client_load_reporting_filter.h +9 -1
- data/src/core/ext/filters/client_channel/lb_policy/grpclb/{grpclb.c → grpclb.cc} +554 -563
- data/src/core/ext/filters/client_channel/lb_policy/grpclb/grpclb.h +9 -1
- data/src/core/ext/filters/client_channel/lb_policy/grpclb/grpclb_channel.h +17 -9
- data/src/core/ext/filters/client_channel/lb_policy/grpclb/{grpclb_channel_secure.c → grpclb_channel_secure.cc} +17 -17
- data/src/core/ext/filters/client_channel/lb_policy/grpclb/{grpclb_client_stats.c → grpclb_client_stats.cc} +3 -3
- data/src/core/ext/filters/client_channel/lb_policy/grpclb/grpclb_client_stats.h +9 -1
- data/src/core/ext/filters/client_channel/lb_policy/grpclb/{load_balancer_api.c → load_balancer_api.cc} +64 -67
- data/src/core/ext/filters/client_channel/lb_policy/grpclb/load_balancer_api.h +20 -21
- data/src/core/ext/filters/client_channel/lb_policy/pick_first/pick_first.cc +599 -0
- data/src/core/ext/filters/client_channel/lb_policy/round_robin/round_robin.cc +695 -0
- data/src/core/ext/filters/client_channel/lb_policy/subchannel_list.cc +270 -0
- data/src/core/ext/filters/client_channel/lb_policy/subchannel_list.h +153 -0
- data/src/core/ext/filters/client_channel/{lb_policy_factory.c → lb_policy_factory.cc} +10 -10
- data/src/core/ext/filters/client_channel/lb_policy_factory.h +48 -40
- data/src/core/ext/filters/client_channel/{lb_policy_registry.c → lb_policy_registry.cc} +9 -9
- data/src/core/ext/filters/client_channel/lb_policy_registry.h +11 -3
- data/src/core/ext/filters/client_channel/{parse_address.c → parse_address.cc} +24 -24
- data/src/core/ext/filters/client_channel/parse_address.h +14 -6
- data/src/core/ext/filters/client_channel/{proxy_mapper.c → proxy_mapper.cc} +0 -0
- data/src/core/ext/filters/client_channel/proxy_mapper.h +8 -0
- data/src/core/ext/filters/client_channel/{proxy_mapper_registry.c → proxy_mapper_registry.cc} +0 -0
- data/src/core/ext/filters/client_channel/proxy_mapper_registry.h +8 -0
- data/src/core/ext/filters/client_channel/{resolver.c → resolver.cc} +21 -23
- data/src/core/ext/filters/client_channel/resolver.h +33 -27
- data/src/core/ext/filters/client_channel/resolver/dns/c_ares/{dns_resolver_ares.c → dns_resolver_ares.cc} +133 -133
- data/src/core/ext/filters/client_channel/resolver/dns/c_ares/grpc_ares_ev_driver.h +18 -9
- data/src/core/ext/filters/client_channel/resolver/dns/c_ares/{grpc_ares_ev_driver_posix.c → grpc_ares_ev_driver_posix.cc} +58 -56
- data/src/core/ext/filters/client_channel/resolver/dns/c_ares/{grpc_ares_wrapper.c → grpc_ares_wrapper.cc} +118 -115
- data/src/core/ext/filters/client_channel/resolver/dns/c_ares/grpc_ares_wrapper.h +23 -15
- data/src/core/ext/filters/client_channel/resolver/dns/c_ares/grpc_ares_wrapper_fallback.cc +60 -0
- data/src/core/ext/filters/client_channel/resolver/dns/native/{dns_resolver.c → dns_resolver.cc} +100 -94
- data/src/core/ext/filters/client_channel/resolver/fake/{fake_resolver.c → fake_resolver.cc} +14 -14
- data/src/core/ext/filters/client_channel/resolver/fake/fake_resolver.h +9 -1
- data/src/core/ext/filters/client_channel/resolver/sockaddr/{sockaddr_resolver.c → sockaddr_resolver.cc} +60 -60
- data/src/core/ext/filters/client_channel/{resolver_factory.c → resolver_factory.cc} +2 -2
- data/src/core/ext/filters/client_channel/resolver_factory.h +27 -19
- data/src/core/ext/filters/client_channel/{resolver_registry.c → resolver_registry.cc} +35 -35
- data/src/core/ext/filters/client_channel/resolver_registry.h +18 -10
- data/src/core/ext/filters/client_channel/{retry_throttle.c → retry_throttle.cc} +10 -10
- data/src/core/ext/filters/client_channel/retry_throttle.h +8 -0
- data/src/core/ext/filters/client_channel/{subchannel.c → subchannel.cc} +210 -213
- data/src/core/ext/filters/client_channel/subchannel.h +68 -60
- data/src/core/ext/filters/client_channel/{subchannel_index.c → subchannel_index.cc} +52 -52
- data/src/core/ext/filters/client_channel/subchannel_index.h +22 -14
- data/src/core/ext/filters/client_channel/{uri_parser.c → uri_parser.cc} +29 -27
- data/src/core/ext/filters/client_channel/uri_parser.h +18 -10
- data/src/core/ext/filters/deadline/{deadline_filter.c → deadline_filter.cc} +12 -15
- data/src/core/ext/filters/deadline/deadline_filter.h +11 -2
- data/src/core/ext/filters/http/client/{http_client_filter.c → http_client_filter.cc} +83 -83
- data/src/core/ext/filters/http/client/http_client_filter.h +8 -0
- data/src/core/ext/filters/http/{http_filters_plugin.c → http_filters_plugin.cc} +20 -21
- data/src/core/ext/filters/http/message_compress/{message_compress_filter.c → message_compress_filter.cc} +84 -83
- data/src/core/ext/filters/http/message_compress/message_compress_filter.h +9 -1
- data/src/core/ext/filters/http/server/{http_server_filter.c → http_server_filter.cc} +80 -78
- data/src/core/ext/filters/http/server/http_server_filter.h +8 -0
- data/src/core/ext/filters/load_reporting/{server_load_reporting_filter.c → server_load_reporting_filter.cc} +29 -29
- data/src/core/ext/filters/load_reporting/server_load_reporting_filter.h +9 -1
- data/src/core/ext/filters/load_reporting/{server_load_reporting_plugin.c → server_load_reporting_plugin.cc} +11 -11
- data/src/core/ext/filters/load_reporting/server_load_reporting_plugin.h +13 -5
- data/src/core/ext/filters/max_age/{max_age_filter.c → max_age_filter.cc} +46 -56
- data/src/core/ext/filters/max_age/max_age_filter.h +8 -0
- data/src/core/ext/filters/message_size/{message_size_filter.c → message_size_filter.cc} +62 -40
- data/src/core/ext/filters/message_size/message_size_filter.h +8 -0
- data/src/core/ext/filters/workarounds/{workaround_cronet_compression_filter.c → workaround_cronet_compression_filter.cc} +11 -11
- data/src/core/ext/filters/workarounds/workaround_cronet_compression_filter.h +8 -0
- data/src/core/ext/filters/workarounds/{workaround_utils.c → workaround_utils.cc} +7 -7
- data/src/core/ext/filters/workarounds/workaround_utils.h +9 -1
- data/src/core/ext/transport/chttp2/alpn/{alpn.c → alpn.cc} +3 -3
- data/src/core/ext/transport/chttp2/alpn/alpn.h +10 -2
- data/src/core/ext/transport/chttp2/client/{chttp2_connector.c → chttp2_connector.cc} +49 -45
- data/src/core/ext/transport/chttp2/client/chttp2_connector.h +8 -0
- data/src/core/ext/transport/chttp2/client/insecure/{channel_create.c → channel_create.cc} +28 -27
- data/src/core/ext/transport/chttp2/client/insecure/{channel_create_posix.c → channel_create_posix.cc} +14 -13
- data/src/core/ext/transport/chttp2/client/secure/{secure_channel_create.c → secure_channel_create.cc} +68 -66
- data/src/core/ext/transport/chttp2/server/{chttp2_server.c → chttp2_server.cc} +76 -77
- data/src/core/ext/transport/chttp2/server/chttp2_server.h +11 -3
- data/src/core/ext/transport/chttp2/server/insecure/{server_chttp2.c → server_chttp2.cc} +3 -3
- data/src/core/ext/transport/chttp2/server/insecure/{server_chttp2_posix.c → server_chttp2_posix.cc} +13 -12
- data/src/core/ext/transport/chttp2/server/secure/{server_secure_chttp2.c → server_secure_chttp2.cc} +12 -10
- data/src/core/ext/transport/chttp2/transport/{bin_decoder.c → bin_decoder.cc} +7 -7
- data/src/core/ext/transport/chttp2/transport/bin_decoder.h +15 -7
- data/src/core/ext/transport/chttp2/transport/{bin_encoder.c → bin_encoder.cc} +11 -11
- data/src/core/ext/transport/chttp2/transport/bin_encoder.h +8 -0
- data/src/core/ext/transport/chttp2/transport/{chttp2_plugin.c → chttp2_plugin.cc} +2 -9
- data/src/core/ext/transport/chttp2/transport/{chttp2_transport.c → chttp2_transport.cc} +778 -778
- data/src/core/ext/transport/chttp2/transport/chttp2_transport.h +14 -10
- data/src/core/ext/transport/chttp2/transport/flow_control.cc +385 -0
- data/src/core/ext/transport/chttp2/transport/flow_control.h +337 -0
- data/src/core/ext/transport/chttp2/transport/frame.h +8 -0
- data/src/core/ext/transport/chttp2/transport/{frame_data.c → frame_data.cc} +34 -34
- data/src/core/ext/transport/chttp2/transport/frame_data.h +25 -17
- data/src/core/ext/transport/chttp2/transport/{frame_goaway.c → frame_goaway.cc} +18 -18
- data/src/core/ext/transport/chttp2/transport/frame_goaway.h +18 -10
- data/src/core/ext/transport/chttp2/transport/{frame_ping.c → frame_ping.cc} +18 -19
- data/src/core/ext/transport/chttp2/transport/frame_ping.h +12 -4
- data/src/core/ext/transport/chttp2/transport/{frame_rst_stream.c → frame_rst_stream.cc} +16 -16
- data/src/core/ext/transport/chttp2/transport/frame_rst_stream.h +16 -8
- data/src/core/ext/transport/chttp2/transport/{frame_settings.c → frame_settings.cc} +23 -24
- data/src/core/ext/transport/chttp2/transport/frame_settings.h +17 -9
- data/src/core/ext/transport/chttp2/transport/{frame_window_update.c → frame_window_update.cc} +22 -24
- data/src/core/ext/transport/chttp2/transport/frame_window_update.h +14 -6
- data/src/core/ext/transport/chttp2/transport/{hpack_encoder.c → hpack_encoder.cc} +206 -161
- data/src/core/ext/transport/chttp2/transport/hpack_encoder.h +23 -13
- data/src/core/ext/transport/chttp2/transport/{hpack_parser.c → hpack_parser.cc} +340 -334
- data/src/core/ext/transport/chttp2/transport/hpack_parser.h +30 -22
- data/src/core/ext/transport/chttp2/transport/{hpack_table.c → hpack_table.cc} +25 -25
- data/src/core/ext/transport/chttp2/transport/hpack_table.h +19 -11
- data/src/core/ext/transport/chttp2/transport/{http2_settings.c → http2_settings.cc} +1 -1
- data/src/core/ext/transport/chttp2/transport/http2_settings.h +10 -2
- data/src/core/ext/transport/chttp2/transport/{huffsyms.c → huffsyms.cc} +0 -0
- data/src/core/ext/transport/chttp2/transport/huffsyms.h +8 -0
- data/src/core/ext/transport/chttp2/transport/{incoming_metadata.c → incoming_metadata.cc} +14 -13
- data/src/core/ext/transport/chttp2/transport/incoming_metadata.h +18 -10
- data/src/core/ext/transport/chttp2/transport/internal.h +214 -340
- data/src/core/ext/transport/chttp2/transport/{parsing.c → parsing.cc} +152 -141
- data/src/core/ext/transport/chttp2/transport/{stream_lists.c → stream_lists.cc} +53 -53
- data/src/core/ext/transport/chttp2/transport/{stream_map.c → stream_map.cc} +35 -34
- data/src/core/ext/transport/chttp2/transport/stream_map.h +22 -14
- data/src/core/ext/transport/chttp2/transport/{varint.c → varint.cc} +0 -0
- data/src/core/ext/transport/chttp2/transport/varint.h +8 -0
- data/src/core/ext/transport/chttp2/transport/writing.cc +636 -0
- data/src/core/ext/transport/inproc/{inproc_plugin.c → inproc_plugin.cc} +5 -6
- data/src/core/ext/transport/inproc/{inproc_transport.c → inproc_transport.cc} +479 -544
- data/src/core/ext/transport/inproc/inproc_transport.h +4 -4
- data/src/core/lib/backoff/backoff.cc +80 -0
- data/src/core/lib/backoff/backoff.h +83 -0
- data/src/core/lib/channel/{channel_args.c → channel_args.cc} +92 -92
- data/src/core/lib/channel/channel_args.h +45 -37
- data/src/core/lib/channel/{channel_stack.c → channel_stack.cc} +67 -68
- data/src/core/lib/channel/channel_stack.h +76 -75
- data/src/core/lib/channel/{channel_stack_builder.c → channel_stack_builder.cc} +91 -91
- data/src/core/lib/channel/channel_stack_builder.h +45 -45
- data/src/core/lib/channel/{connected_channel.c → connected_channel.cc} +70 -70
- data/src/core/lib/channel/connected_channel.h +12 -4
- data/src/core/lib/channel/context.h +2 -2
- data/src/core/lib/channel/{handshaker.c → handshaker.cc} +7 -9
- data/src/core/lib/channel/handshaker.h +9 -1
- data/src/core/lib/channel/{handshaker_factory.c → handshaker_factory.cc} +7 -7
- data/src/core/lib/channel/handshaker_factory.h +18 -10
- data/src/core/lib/channel/{handshaker_registry.c → handshaker_registry.cc} +0 -0
- data/src/core/lib/channel/handshaker_registry.h +8 -0
- data/src/core/lib/compression/algorithm_metadata.h +8 -0
- data/src/core/lib/compression/{compression.c → compression.cc} +9 -9
- data/src/core/lib/compression/{message_compress.c → message_compress.cc} +0 -0
- data/src/core/lib/compression/message_compress.h +8 -0
- data/src/core/lib/compression/{stream_compression.c → stream_compression.cc} +12 -12
- data/src/core/lib/compression/stream_compression.h +27 -19
- data/src/core/lib/compression/{stream_compression_gzip.c → stream_compression_gzip.cc} +35 -36
- data/src/core/lib/compression/stream_compression_gzip.h +8 -0
- data/src/core/lib/compression/{stream_compression_identity.c → stream_compression_identity.cc} +19 -20
- data/src/core/lib/compression/stream_compression_identity.h +8 -0
- data/src/core/lib/debug/{stats.c → stats.cc} +19 -19
- data/src/core/lib/debug/stats.h +17 -9
- data/src/core/lib/debug/{stats_data.c → stats_data.cc} +45 -22
- data/src/core/lib/debug/stats_data.h +58 -19
- data/src/core/lib/debug/trace.cc +142 -0
- data/src/core/lib/debug/trace.h +74 -14
- data/src/core/lib/http/{format_request.c → format_request.cc} +10 -10
- data/src/core/lib/http/format_request.h +12 -4
- data/src/core/lib/http/{httpcli.c → httpcli.cc} +80 -80
- data/src/core/lib/http/httpcli.h +41 -33
- data/src/core/lib/http/{httpcli_security_connector.c → httpcli_security_connector.cc} +69 -55
- data/src/core/lib/http/{parser.c → parser.cc} +42 -42
- data/src/core/lib/http/parser.h +28 -20
- data/src/core/lib/{support → iomgr}/block_annotate.h +17 -8
- data/src/core/lib/iomgr/{call_combiner.c → call_combiner.cc} +29 -17
- data/src/core/lib/iomgr/call_combiner.h +9 -1
- data/src/core/lib/iomgr/closure.h +220 -62
- data/src/core/lib/iomgr/{combiner.c → combiner.cc} +63 -62
- data/src/core/lib/iomgr/combiner.h +16 -8
- data/src/core/lib/iomgr/{endpoint.c → endpoint.cc} +6 -0
- data/src/core/lib/iomgr/endpoint.h +47 -32
- data/src/core/lib/iomgr/endpoint_pair.h +12 -4
- data/src/core/lib/iomgr/{endpoint_pair_posix.c → endpoint_pair_posix.cc} +3 -3
- data/src/core/lib/iomgr/{endpoint_pair_uv.c → endpoint_pair_uv.cc} +2 -2
- data/src/core/lib/iomgr/{endpoint_pair_windows.c → endpoint_pair_windows.cc} +6 -6
- data/src/core/lib/iomgr/{error.c → error.cc} +125 -124
- data/src/core/lib/iomgr/error.h +32 -27
- data/src/core/lib/iomgr/error_internal.h +11 -2
- data/src/core/lib/iomgr/{ev_epoll1_linux.c → ev_epoll1_linux.cc} +214 -215
- data/src/core/lib/iomgr/ev_epoll1_linux.h +9 -1
- data/src/core/lib/iomgr/ev_epollex_linux.cc +1488 -0
- data/src/core/lib/iomgr/ev_epollex_linux.h +9 -1
- data/src/core/lib/iomgr/{ev_epollsig_linux.c → ev_epollsig_linux.cc} +304 -305
- data/src/core/lib/iomgr/ev_epollsig_linux.h +12 -4
- data/src/core/lib/iomgr/{ev_poll_posix.c → ev_poll_posix.cc} +272 -283
- data/src/core/lib/iomgr/ev_poll_posix.h +10 -2
- data/src/core/lib/iomgr/ev_posix.cc +288 -0
- data/src/core/lib/iomgr/ev_posix.h +75 -67
- data/src/core/lib/iomgr/{ev_windows.c → ev_windows.cc} +2 -2
- data/src/core/lib/iomgr/exec_ctx.cc +177 -0
- data/src/core/lib/iomgr/exec_ctx.h +35 -13
- data/src/core/lib/iomgr/{executor.c → executor.cc} +34 -35
- data/src/core/lib/iomgr/executor.h +12 -4
- data/src/core/lib/iomgr/{fork_posix.c → fork_posix.cc} +0 -0
- data/src/core/lib/iomgr/{fork_windows.c → fork_windows.cc} +0 -0
- data/src/core/lib/iomgr/gethostname.h +9 -1
- data/src/core/lib/iomgr/{gethostname_fallback.c → gethostname_fallback.cc} +2 -1
- data/src/core/lib/iomgr/{gethostname_host_name_max.c → gethostname_host_name_max.cc} +4 -3
- data/src/core/lib/iomgr/{gethostname_sysconf.c → gethostname_sysconf.cc} +3 -2
- data/src/core/lib/iomgr/{iocp_windows.c → iocp_windows.cc} +23 -25
- data/src/core/lib/iomgr/iocp_windows.h +17 -3
- data/src/core/lib/iomgr/{iomgr.c → iomgr.cc} +25 -19
- data/src/core/lib/iomgr/iomgr.h +11 -3
- data/src/core/lib/iomgr/iomgr_internal.h +13 -5
- data/src/core/lib/iomgr/{iomgr_posix.c → iomgr_posix.cc} +0 -1
- data/src/core/lib/iomgr/{iomgr_uv.c → iomgr_uv.cc} +1 -1
- data/src/core/lib/iomgr/iomgr_uv.h +8 -0
- data/src/core/lib/iomgr/{iomgr_windows.c → iomgr_windows.cc} +0 -0
- data/src/core/lib/iomgr/{is_epollexclusive_available.c → is_epollexclusive_available.cc} +1 -1
- data/src/core/lib/iomgr/is_epollexclusive_available.h +8 -0
- data/src/core/lib/iomgr/{load_file.c → load_file.cc} +12 -12
- data/src/core/lib/iomgr/load_file.h +2 -2
- data/src/core/lib/iomgr/{lockfree_event.c → lockfree_event.cc} +76 -68
- data/src/core/lib/iomgr/lockfree_event.h +30 -11
- data/src/core/lib/iomgr/{network_status_tracker.c → network_status_tracker.cc} +3 -2
- data/src/core/lib/iomgr/network_status_tracker.h +2 -2
- data/src/core/lib/iomgr/{polling_entity.c → polling_entity.cc} +18 -18
- data/src/core/lib/iomgr/polling_entity.h +21 -13
- data/src/core/lib/iomgr/pollset.h +17 -11
- data/src/core/lib/iomgr/pollset_set.h +23 -15
- data/src/core/lib/iomgr/{pollset_set_uv.c → pollset_set_uv.cc} +0 -0
- data/src/core/lib/iomgr/{pollset_set_windows.c → pollset_set_windows.cc} +0 -0
- data/src/core/lib/iomgr/{pollset_uv.c → pollset_uv.cc} +31 -29
- data/src/core/lib/iomgr/pollset_uv.h +8 -0
- data/src/core/lib/iomgr/{pollset_windows.c → pollset_windows.cc} +24 -24
- data/src/core/lib/iomgr/pollset_windows.h +17 -4
- data/src/core/lib/iomgr/port.h +10 -0
- data/src/core/lib/iomgr/resolve_address.h +18 -10
- data/src/core/lib/iomgr/{resolve_address_posix.c → resolve_address_posix.cc} +40 -40
- data/src/core/lib/iomgr/{resolve_address_uv.c → resolve_address_uv.cc} +61 -56
- data/src/core/lib/iomgr/{resolve_address_windows.c → resolve_address_windows.cc} +36 -34
- data/src/core/lib/iomgr/{resource_quota.c → resource_quota.cc} +209 -180
- data/src/core/lib/iomgr/resource_quota.h +45 -37
- data/src/core/lib/iomgr/{sockaddr_utils.c → sockaddr_utils.cc} +61 -61
- data/src/core/lib/iomgr/sockaddr_utils.h +23 -15
- data/src/core/lib/iomgr/sockaddr_windows.h +6 -0
- data/src/core/lib/iomgr/{socket_factory_posix.c → socket_factory_posix.cc} +20 -20
- data/src/core/lib/iomgr/socket_factory_posix.h +15 -15
- data/src/core/lib/iomgr/{socket_mutator.c → socket_mutator.cc} +18 -18
- data/src/core/lib/iomgr/socket_mutator.h +11 -11
- data/src/core/lib/iomgr/socket_utils.h +9 -1
- data/src/core/lib/iomgr/{socket_utils_common_posix.c → socket_utils_common_posix.cc} +28 -28
- data/src/core/lib/iomgr/{socket_utils_linux.c → socket_utils_linux.cc} +3 -3
- data/src/core/lib/iomgr/{socket_utils_posix.c → socket_utils_posix.cc} +3 -3
- data/src/core/lib/iomgr/socket_utils_posix.h +26 -18
- data/src/core/lib/iomgr/{socket_utils_uv.c → socket_utils_uv.cc} +1 -1
- data/src/core/lib/iomgr/{socket_utils_windows.c → socket_utils_windows.cc} +2 -2
- data/src/core/lib/iomgr/{socket_windows.c → socket_windows.cc} +18 -18
- data/src/core/lib/iomgr/socket_windows.h +26 -13
- data/src/core/lib/iomgr/tcp_client.h +14 -6
- data/src/core/lib/iomgr/{tcp_client_posix.c → tcp_client_posix.cc} +69 -70
- data/src/core/lib/iomgr/tcp_client_posix.h +11 -3
- data/src/core/lib/iomgr/{tcp_client_uv.c → tcp_client_uv.cc} +47 -48
- data/src/core/lib/iomgr/{tcp_client_windows.c → tcp_client_windows.cc} +46 -44
- data/src/core/lib/iomgr/{tcp_posix.c → tcp_posix.cc} +198 -175
- data/src/core/lib/iomgr/tcp_posix.h +15 -7
- data/src/core/lib/iomgr/tcp_server.h +31 -23
- data/src/core/lib/iomgr/{tcp_server_posix.c → tcp_server_posix.cc} +78 -77
- data/src/core/lib/iomgr/tcp_server_utils_posix.h +27 -19
- data/src/core/lib/iomgr/{tcp_server_utils_posix_common.c → tcp_server_utils_posix_common.cc} +27 -27
- data/src/core/lib/iomgr/{tcp_server_utils_posix_ifaddrs.c → tcp_server_utils_posix_ifaddrs.cc} +25 -25
- data/src/core/lib/iomgr/{tcp_server_utils_posix_noifaddrs.c → tcp_server_utils_posix_noifaddrs.cc} +2 -2
- data/src/core/lib/iomgr/{tcp_server_uv.c → tcp_server_uv.cc} +133 -105
- data/src/core/lib/iomgr/{tcp_server_windows.c → tcp_server_windows.cc} +81 -77
- data/src/core/lib/iomgr/tcp_uv.cc +420 -0
- data/src/core/lib/iomgr/tcp_uv.h +18 -4
- data/src/core/lib/iomgr/{tcp_windows.c → tcp_windows.cc} +90 -79
- data/src/core/lib/iomgr/tcp_windows.h +17 -4
- data/src/core/lib/iomgr/{time_averaged_stats.c → time_averaged_stats.cc} +0 -0
- data/src/core/lib/iomgr/time_averaged_stats.h +8 -0
- data/src/core/lib/iomgr/timer.h +16 -9
- data/src/core/lib/iomgr/{timer_generic.c → timer_generic.cc} +130 -171
- data/src/core/lib/iomgr/timer_generic.h +4 -4
- data/src/core/lib/iomgr/{timer_heap.c → timer_heap.cc} +20 -21
- data/src/core/lib/iomgr/timer_heap.h +16 -8
- data/src/core/lib/iomgr/{timer_manager.c → timer_manager.cc} +54 -52
- data/src/core/lib/iomgr/timer_manager.h +8 -0
- data/src/core/lib/iomgr/{timer_uv.c → timer_uv.cc} +22 -24
- data/src/core/lib/iomgr/timer_uv.h +2 -2
- data/src/core/lib/iomgr/{udp_server.c → udp_server.cc} +75 -75
- data/src/core/lib/iomgr/udp_server.h +25 -17
- data/src/core/lib/iomgr/{unix_sockets_posix.c → unix_sockets_posix.cc} +22 -21
- data/src/core/lib/iomgr/unix_sockets_posix.h +14 -6
- data/src/core/lib/iomgr/{unix_sockets_posix_noop.c → unix_sockets_posix_noop.cc} +5 -5
- data/src/core/lib/iomgr/{wakeup_fd_cv.c → wakeup_fd_cv.cc} +2 -2
- data/src/core/lib/iomgr/wakeup_fd_cv.h +10 -0
- data/src/core/lib/iomgr/{wakeup_fd_eventfd.c → wakeup_fd_eventfd.cc} +0 -0
- data/src/core/lib/iomgr/{wakeup_fd_nospecial.c → wakeup_fd_nospecial.cc} +0 -0
- data/src/core/lib/iomgr/{wakeup_fd_pipe.c → wakeup_fd_pipe.cc} +1 -0
- data/src/core/lib/iomgr/wakeup_fd_pipe.h +9 -1
- data/src/core/lib/iomgr/{wakeup_fd_posix.c → wakeup_fd_posix.cc} +6 -7
- data/src/core/lib/iomgr/wakeup_fd_posix.h +8 -0
- data/src/core/lib/json/{json.c → json.cc} +0 -0
- data/src/core/lib/json/json.h +8 -0
- data/src/core/lib/json/{json_reader.c → json_reader.cc} +18 -18
- data/src/core/lib/json/json_reader.h +26 -18
- data/src/core/lib/json/{json_string.c → json_string.cc} +57 -57
- data/src/core/lib/json/{json_writer.c → json_writer.cc} +20 -20
- data/src/core/lib/json/json_writer.h +23 -15
- data/src/core/lib/profiling/{basic_timers.c → basic_timers.cc} +34 -34
- data/src/core/lib/profiling/{stap_timers.c → stap_timers.cc} +5 -5
- data/src/core/lib/profiling/timers.h +6 -6
- data/src/core/lib/security/context/{security_context.c → security_context.cc} +98 -95
- data/src/core/lib/security/context/security_context.h +27 -29
- data/src/core/lib/security/credentials/composite/{composite_credentials.c → composite_credentials.cc} +79 -73
- data/src/core/lib/security/credentials/composite/composite_credentials.h +17 -9
- data/src/core/lib/security/credentials/{credentials.c → credentials.cc} +97 -92
- data/src/core/lib/security/credentials/credentials.h +83 -75
- data/src/core/lib/security/credentials/{credentials_metadata.c → credentials_metadata.cc} +7 -6
- data/src/core/lib/security/credentials/fake/{fake_credentials.c → fake_credentials.cc} +39 -36
- data/src/core/lib/security/credentials/fake/fake_credentials.h +13 -5
- data/src/core/lib/security/credentials/google_default/{credentials_generic.c → credentials_generic.cc} +5 -5
- data/src/core/lib/security/credentials/google_default/{google_default_credentials.c → google_default_credentials.cc} +55 -55
- data/src/core/lib/security/credentials/google_default/google_default_credentials.h +9 -1
- data/src/core/lib/security/credentials/iam/{iam_credentials.c → iam_credentials.cc} +19 -18
- data/src/core/lib/security/credentials/jwt/{json_token.c → json_token.cc} +80 -75
- data/src/core/lib/security/credentials/jwt/json_token.h +23 -15
- data/src/core/lib/security/credentials/jwt/{jwt_credentials.c → jwt_credentials.cc} +45 -41
- data/src/core/lib/security/credentials/jwt/jwt_credentials.h +11 -3
- data/src/core/lib/security/credentials/jwt/{jwt_verifier.c → jwt_verifier.cc} +262 -252
- data/src/core/lib/security/credentials/jwt/jwt_verifier.h +38 -30
- data/src/core/lib/security/credentials/oauth2/{oauth2_credentials.c → oauth2_credentials.cc} +138 -141
- data/src/core/lib/security/credentials/oauth2/oauth2_credentials.h +30 -22
- data/src/core/lib/security/credentials/plugin/{plugin_credentials.c → plugin_credentials.cc} +52 -53
- data/src/core/lib/security/credentials/plugin/plugin_credentials.h +7 -7
- data/src/core/lib/security/credentials/ssl/ssl_credentials.cc +344 -0
- data/src/core/lib/security/credentials/ssl/ssl_credentials.h +27 -0
- data/src/core/lib/security/transport/auth_filters.h +16 -0
- data/src/core/lib/security/transport/{client_auth_filter.c → client_auth_filter.cc} +127 -115
- data/src/core/lib/security/transport/{lb_targets_info.c → lb_targets_info.cc} +16 -13
- data/src/core/lib/security/transport/lb_targets_info.h +11 -3
- data/src/core/lib/security/transport/{secure_endpoint.c → secure_endpoint.cc} +84 -76
- data/src/core/lib/security/transport/secure_endpoint.h +13 -5
- data/src/core/lib/security/transport/security_connector.cc +1121 -0
- data/src/core/lib/security/transport/security_connector.h +97 -79
- data/src/core/lib/security/transport/{security_handshaker.c → security_handshaker.cc} +139 -132
- data/src/core/lib/security/transport/security_handshaker.h +11 -3
- data/src/core/lib/security/transport/{server_auth_filter.c → server_auth_filter.cc} +68 -68
- data/src/core/lib/security/transport/{tsi_error.c → tsi_error.cc} +1 -1
- data/src/core/lib/security/transport/tsi_error.h +9 -1
- data/src/core/lib/security/util/{json_util.c → json_util.cc} +11 -11
- data/src/core/lib/security/util/json_util.h +12 -4
- data/src/core/lib/slice/{b64.c → b64.cc} +15 -15
- data/src/core/lib/slice/b64.h +12 -4
- data/src/core/lib/slice/{percent_encoding.c → percent_encoding.cc} +15 -15
- data/src/core/lib/slice/percent_encoding.h +11 -3
- data/src/core/lib/slice/{slice.c → slice.cc} +64 -64
- data/src/core/lib/slice/{slice_buffer.c → slice_buffer.cc} +38 -38
- data/src/core/lib/slice/{slice_hash_table.c → slice_hash_table.cc} +7 -7
- data/src/core/lib/slice/slice_hash_table.h +19 -11
- data/src/core/lib/slice/{slice_intern.c → slice_intern.cc} +35 -34
- data/src/core/lib/slice/slice_internal.h +17 -6
- data/src/core/lib/slice/{slice_string_helpers.c → slice_string_helpers.cc} +9 -9
- data/src/core/lib/slice/slice_string_helpers.h +3 -3
- data/src/core/lib/support/abstract.h +29 -0
- data/src/core/lib/support/{alloc.c → alloc.cc} +22 -22
- data/src/core/lib/support/{arena.c → arena.cc} +12 -12
- data/src/core/lib/support/arena.h +11 -3
- data/src/core/lib/support/{atm.c → atm.cc} +1 -1
- data/src/core/lib/support/{avl.c → avl.cc} +71 -70
- data/src/core/lib/support/{cmdline.c → cmdline.cc} +62 -62
- data/src/core/lib/support/{cpu_iphone.c → cpu_iphone.cc} +2 -0
- data/src/core/lib/support/{cpu_linux.c → cpu_linux.cc} +10 -0
- data/src/core/lib/support/{cpu_posix.c → cpu_posix.cc} +27 -4
- data/src/core/lib/support/{cpu_windows.c → cpu_windows.cc} +1 -0
- data/src/core/lib/support/env.h +3 -3
- data/src/core/lib/support/{env_linux.c → env_linux.cc} +11 -11
- data/src/core/lib/support/{env_posix.c → env_posix.cc} +4 -4
- data/src/core/lib/support/{env_windows.c → env_windows.cc} +5 -5
- data/src/core/lib/support/{fork.c → fork.cc} +2 -2
- data/src/core/lib/support/{histogram.c → histogram.cc} +25 -26
- data/src/core/lib/support/{host_port.c → host_port.cc} +16 -16
- data/src/core/lib/support/{log.c → log.cc} +8 -8
- data/src/core/lib/support/{log_android.c → log_android.cc} +7 -7
- data/src/core/lib/support/{log_linux.c → log_linux.cc} +8 -8
- data/src/core/lib/support/{log_posix.c → log_posix.cc} +9 -10
- data/src/core/lib/support/{log_windows.c → log_windows.cc} +7 -7
- data/src/core/lib/support/manual_constructor.h +211 -0
- data/src/core/lib/support/memory.h +41 -0
- data/src/core/lib/support/mpscq.cc +114 -0
- data/src/core/lib/support/mpscq.h +45 -7
- data/src/core/lib/support/{murmur_hash.c → murmur_hash.cc} +9 -12
- data/src/core/lib/support/murmur_hash.h +9 -1
- data/src/core/lib/support/spinlock.h +8 -1
- data/src/core/lib/support/{string.c → string.cc} +56 -55
- data/src/core/lib/support/string.h +21 -21
- data/src/core/lib/support/{string_posix.c → string_posix.cc} +5 -4
- data/src/core/lib/support/{string_util_windows.c → string_util_windows.cc} +9 -6
- data/src/core/lib/support/{string_windows.c → string_windows.cc} +3 -2
- data/src/core/lib/support/string_windows.h +8 -0
- data/src/core/lib/support/{subprocess_posix.c → subprocess_posix.cc} +13 -13
- data/src/core/lib/support/{subprocess_windows.c → subprocess_windows.cc} +9 -9
- data/src/core/lib/support/{sync.c → sync.cc} +22 -22
- data/src/core/lib/support/{sync_posix.c → sync_posix.cc} +6 -2
- data/src/core/lib/support/{sync_windows.c → sync_windows.cc} +14 -14
- data/src/core/lib/support/{thd.c → thd.cc} +0 -0
- data/src/core/lib/support/{thd_posix.c → thd_posix.cc} +10 -10
- data/src/core/lib/support/{thd_windows.c → thd_windows.cc} +10 -10
- data/src/core/lib/support/{time.c → time.cc} +0 -0
- data/src/core/lib/support/{time_posix.c → time_posix.cc} +5 -6
- data/src/core/lib/support/{time_precise.c → time_precise.cc} +6 -4
- data/src/core/lib/support/time_precise.h +9 -1
- data/src/core/lib/support/{time_windows.c → time_windows.cc} +2 -3
- data/src/core/lib/support/{tls_pthread.c → tls_pthread.cc} +2 -2
- data/src/core/lib/support/tmpfile.h +1 -1
- data/src/core/lib/support/{tmpfile_msys.c → tmpfile_msys.cc} +2 -2
- data/src/core/lib/support/{tmpfile_posix.c → tmpfile_posix.cc} +7 -7
- data/src/core/lib/support/{tmpfile_windows.c → tmpfile_windows.cc} +2 -2
- data/src/core/lib/support/{wrap_memcpy.c → wrap_memcpy.cc} +4 -2
- data/src/core/lib/surface/{alarm.c → alarm.cc} +32 -31
- data/src/core/lib/surface/alarm_internal.h +10 -2
- data/src/core/lib/surface/{api_trace.c → api_trace.cc} +1 -1
- data/src/core/lib/surface/api_trace.h +2 -2
- data/src/core/lib/surface/{byte_buffer.c → byte_buffer.cc} +13 -13
- data/src/core/lib/surface/{byte_buffer_reader.c → byte_buffer_reader.cc} +9 -9
- data/src/core/lib/surface/{call.c → call.cc} +379 -372
- data/src/core/lib/surface/call.h +37 -38
- data/src/core/lib/surface/{call_details.c → call_details.cc} +0 -0
- data/src/core/lib/surface/{call_log_batch.c → call_log_batch.cc} +13 -11
- data/src/core/lib/surface/call_test_only.h +5 -5
- data/src/core/lib/surface/{channel.c → channel.cc} +94 -95
- data/src/core/lib/surface/channel.h +29 -21
- data/src/core/lib/surface/{channel_init.c → channel_init.cc} +13 -13
- data/src/core/lib/surface/channel_init.h +6 -6
- data/src/core/lib/surface/{channel_ping.c → channel_ping.cc} +12 -12
- data/src/core/lib/surface/{channel_stack_type.c → channel_stack_type.cc} +1 -1
- data/src/core/lib/surface/channel_stack_type.h +9 -1
- data/src/core/lib/surface/{completion_queue.c → completion_queue.cc} +416 -379
- data/src/core/lib/surface/completion_queue.h +29 -29
- data/src/core/lib/surface/{completion_queue_factory.c → completion_queue_factory.cc} +1 -1
- data/src/core/lib/surface/completion_queue_factory.h +8 -0
- data/src/core/lib/surface/{event_string.c → event_string.cc} +9 -9
- data/src/core/lib/surface/event_string.h +9 -1
- data/src/core/lib/surface/{init.c → init.cc} +16 -39
- data/src/core/lib/surface/init.h +8 -0
- data/src/core/lib/surface/{init_secure.c → init_secure.cc} +12 -25
- data/src/core/lib/surface/lame_client.cc +38 -40
- data/src/core/lib/surface/lame_client.h +8 -0
- data/src/core/lib/surface/{metadata_array.c → metadata_array.cc} +0 -0
- data/src/core/lib/surface/{server.c → server.cc} +340 -404
- data/src/core/lib/surface/server.h +22 -14
- data/src/core/lib/surface/{validate_metadata.c → validate_metadata.cc} +10 -9
- data/src/core/lib/surface/validate_metadata.h +10 -2
- data/src/core/lib/surface/{version.c → version.cc} +2 -2
- data/src/core/lib/transport/bdp_estimator.cc +84 -0
- data/src/core/lib/transport/bdp_estimator.h +67 -42
- data/src/core/lib/transport/{byte_stream.c → byte_stream.cc} +51 -51
- data/src/core/lib/transport/byte_stream.h +41 -33
- data/src/core/lib/transport/{connectivity_state.c → connectivity_state.cc} +36 -40
- data/src/core/lib/transport/connectivity_state.h +29 -21
- data/src/core/lib/transport/{error_utils.c → error_utils.cc} +26 -22
- data/src/core/lib/transport/error_utils.h +18 -6
- data/src/core/lib/transport/{metadata.c → metadata.cc} +92 -88
- data/src/core/lib/transport/metadata.h +22 -20
- data/src/core/lib/transport/{metadata_batch.c → metadata_batch.cc} +78 -79
- data/src/core/lib/transport/metadata_batch.h +46 -45
- data/src/core/lib/transport/pid_controller.cc +48 -0
- data/src/core/lib/transport/pid_controller.h +84 -32
- data/src/core/lib/transport/{service_config.c → service_config.cc} +66 -48
- data/src/core/lib/transport/service_config.h +11 -2
- data/src/core/lib/transport/{static_metadata.c → static_metadata.cc} +2 -2
- data/src/core/lib/transport/static_metadata.h +30 -23
- data/src/core/lib/transport/{status_conversion.c → status_conversion.cc} +4 -3
- data/src/core/lib/transport/status_conversion.h +12 -2
- data/src/core/lib/transport/{timeout_encoding.c → timeout_encoding.cc} +28 -61
- data/src/core/lib/transport/timeout_encoding.h +11 -2
- data/src/core/lib/transport/{transport.c → transport.cc} +79 -79
- data/src/core/lib/transport/transport.h +78 -80
- data/src/core/lib/transport/transport_impl.h +27 -19
- data/src/core/lib/transport/{transport_op_string.c → transport_op_string.cc} +32 -30
- data/src/core/plugin_registry/{grpc_plugin_registry.c → grpc_plugin_registry.cc} +34 -38
- data/src/core/tsi/{fake_transport_security.c → fake_transport_security.cc} +141 -132
- data/src/core/tsi/fake_transport_security.h +5 -5
- data/src/core/tsi/{gts_transport_security.c → gts_transport_security.cc} +4 -4
- data/src/core/tsi/gts_transport_security.h +11 -3
- data/src/core/tsi/{ssl_transport_security.c → ssl_transport_security.cc} +309 -300
- data/src/core/tsi/ssl_transport_security.h +25 -25
- data/src/core/tsi/ssl_types.h +8 -0
- data/src/core/tsi/{transport_security.c → transport_security.cc} +94 -87
- data/src/core/tsi/transport_security.h +55 -55
- data/src/core/tsi/{transport_security_adapter.c → transport_security_adapter.cc} +58 -55
- data/src/core/tsi/transport_security_adapter.h +2 -2
- data/src/core/tsi/{transport_security_grpc.c → transport_security_grpc.cc} +21 -21
- data/src/core/tsi/transport_security_grpc.h +19 -19
- data/src/core/tsi/transport_security_interface.h +41 -41
- data/src/ruby/ext/grpc/extconf.rb +4 -2
- data/src/ruby/ext/grpc/rb_byte_buffer.c +5 -5
- data/src/ruby/ext/grpc/rb_byte_buffer.h +2 -2
- data/src/ruby/ext/grpc/rb_call.c +41 -42
- data/src/ruby/ext/grpc/rb_call.h +6 -6
- data/src/ruby/ext/grpc/rb_call_credentials.c +30 -30
- data/src/ruby/ext/grpc/rb_channel.c +87 -87
- data/src/ruby/ext/grpc/rb_channel_credentials.c +23 -23
- data/src/ruby/ext/grpc/rb_completion_queue.c +11 -11
- data/src/ruby/ext/grpc/rb_completion_queue.h +3 -3
- data/src/ruby/ext/grpc/rb_compression_options.c +20 -20
- data/src/ruby/ext/grpc/rb_event_thread.c +14 -14
- data/src/ruby/ext/grpc/rb_event_thread.h +1 -1
- data/src/ruby/ext/grpc/rb_grpc.c +8 -8
- data/src/ruby/ext/grpc/rb_grpc_imports.generated.c +16 -58
- data/src/ruby/ext/grpc/rb_grpc_imports.generated.h +242 -306
- data/src/ruby/ext/grpc/rb_server.c +23 -23
- data/src/ruby/ext/grpc/rb_server_credentials.c +13 -13
- data/src/ruby/lib/grpc/generic/rpc_server.rb +25 -12
- data/src/ruby/lib/grpc/version.rb +1 -1
- data/src/ruby/pb/grpc/health/checker.rb +14 -0
- data/src/ruby/spec/pb/health/checker_spec.rb +29 -0
- data/third_party/cares/config_freebsd/ares_config.h +502 -0
- data/third_party/cares/config_openbsd/ares_config.h +502 -0
- metadata +302 -328
- data/src/core/ext/census/aggregation.h +0 -51
- data/src/core/ext/census/base_resources.c +0 -56
- data/src/core/ext/census/base_resources.h +0 -24
- data/src/core/ext/census/census_interface.h +0 -61
- data/src/core/ext/census/census_rpc_stats.h +0 -86
- data/src/core/ext/census/context.c +0 -496
- data/src/core/ext/census/gen/census.pb.c +0 -161
- data/src/core/ext/census/gen/census.pb.h +0 -280
- data/src/core/ext/census/gen/trace_context.pb.c +0 -39
- data/src/core/ext/census/gen/trace_context.pb.h +0 -78
- data/src/core/ext/census/grpc_filter.c +0 -196
- data/src/core/ext/census/grpc_plugin.c +0 -70
- data/src/core/ext/census/initialize.c +0 -51
- data/src/core/ext/census/intrusive_hash_map.c +0 -305
- data/src/core/ext/census/intrusive_hash_map.h +0 -152
- data/src/core/ext/census/intrusive_hash_map_internal.h +0 -48
- data/src/core/ext/census/mlog.c +0 -586
- data/src/core/ext/census/mlog.h +0 -80
- data/src/core/ext/census/operation.c +0 -48
- data/src/core/ext/census/placeholders.c +0 -49
- data/src/core/ext/census/resource.c +0 -303
- data/src/core/ext/census/resource.h +0 -48
- data/src/core/ext/census/rpc_metric_id.h +0 -36
- data/src/core/ext/census/trace_context.c +0 -71
- data/src/core/ext/census/trace_context.h +0 -56
- data/src/core/ext/census/trace_label.h +0 -46
- data/src/core/ext/census/trace_propagation.h +0 -48
- data/src/core/ext/census/trace_status.h +0 -30
- data/src/core/ext/census/trace_string.h +0 -35
- data/src/core/ext/census/tracing.c +0 -55
- data/src/core/ext/census/tracing.h +0 -109
- data/src/core/ext/filters/client_channel/lb_policy/pick_first/pick_first.c +0 -714
- data/src/core/ext/filters/client_channel/lb_policy/round_robin/round_robin.c +0 -924
- data/src/core/ext/filters/client_channel/resolver/dns/c_ares/grpc_ares_wrapper_fallback.c +0 -60
- data/src/core/ext/transport/chttp2/transport/flow_control.c +0 -502
- data/src/core/ext/transport/chttp2/transport/writing.c +0 -534
- data/src/core/lib/debug/trace.c +0 -146
- data/src/core/lib/iomgr/closure.c +0 -219
- data/src/core/lib/iomgr/ev_epollex_linux.c +0 -1461
- data/src/core/lib/iomgr/ev_posix.c +0 -266
- data/src/core/lib/iomgr/exec_ctx.c +0 -113
- data/src/core/lib/iomgr/tcp_uv.c +0 -381
- data/src/core/lib/security/credentials/ssl/ssl_credentials.c +0 -194
- data/src/core/lib/security/transport/security_connector.c +0 -914
- data/src/core/lib/support/backoff.c +0 -72
- data/src/core/lib/support/backoff.h +0 -56
- data/src/core/lib/support/mpscq.c +0 -79
- data/src/core/lib/support/stack_lockfree.c +0 -137
- data/src/core/lib/support/stack_lockfree.h +0 -38
- data/src/core/lib/transport/bdp_estimator.c +0 -110
- data/src/core/lib/transport/pid_controller.c +0 -63
@@ -19,11 +19,10 @@
|
|
19
19
|
#include "src/core/ext/transport/inproc/inproc_transport.h"
|
20
20
|
#include "src/core/lib/debug/trace.h"
|
21
21
|
|
22
|
-
|
22
|
+
grpc_core::TraceFlag grpc_inproc_trace(false, "inproc");
|
23
23
|
|
24
|
-
void grpc_inproc_plugin_init(void) {
|
25
|
-
grpc_register_tracer(&grpc_inproc_trace);
|
26
|
-
grpc_inproc_transport_init();
|
27
|
-
}
|
24
|
+
extern "C" void grpc_inproc_plugin_init(void) { grpc_inproc_transport_init(); }
|
28
25
|
|
29
|
-
void grpc_inproc_plugin_shutdown(void) {
|
26
|
+
extern "C" void grpc_inproc_plugin_shutdown(void) {
|
27
|
+
grpc_inproc_transport_shutdown();
|
28
|
+
}
|
@@ -32,9 +32,9 @@
|
|
32
32
|
#include "src/core/lib/transport/error_utils.h"
|
33
33
|
#include "src/core/lib/transport/transport_impl.h"
|
34
34
|
|
35
|
-
#define INPROC_LOG(...)
|
36
|
-
do {
|
37
|
-
if (
|
35
|
+
#define INPROC_LOG(...) \
|
36
|
+
do { \
|
37
|
+
if (grpc_inproc_trace.enabled()) gpr_log(__VA_ARGS__); \
|
38
38
|
} while (0)
|
39
39
|
|
40
40
|
static grpc_slice g_empty_slice;
|
@@ -50,125 +50,55 @@ typedef struct {
|
|
50
50
|
|
51
51
|
typedef struct inproc_transport {
|
52
52
|
grpc_transport base;
|
53
|
-
shared_mu
|
53
|
+
shared_mu* mu;
|
54
54
|
gpr_refcount refs;
|
55
55
|
bool is_client;
|
56
56
|
grpc_connectivity_state_tracker connectivity;
|
57
|
-
void (*accept_stream_cb)(grpc_exec_ctx
|
58
|
-
grpc_transport
|
59
|
-
void
|
57
|
+
void (*accept_stream_cb)(grpc_exec_ctx* exec_ctx, void* user_data,
|
58
|
+
grpc_transport* transport, const void* server_data);
|
59
|
+
void* accept_stream_data;
|
60
60
|
bool is_closed;
|
61
|
-
struct inproc_transport
|
62
|
-
struct inproc_stream
|
61
|
+
struct inproc_transport* other_side;
|
62
|
+
struct inproc_stream* stream_list;
|
63
63
|
} inproc_transport;
|
64
64
|
|
65
|
-
typedef struct sb_list_entry {
|
66
|
-
grpc_slice_buffer sb;
|
67
|
-
struct sb_list_entry *next;
|
68
|
-
} sb_list_entry;
|
69
|
-
|
70
|
-
// Specialize grpc_byte_stream for our use case
|
71
|
-
typedef struct {
|
72
|
-
grpc_byte_stream base;
|
73
|
-
sb_list_entry *le;
|
74
|
-
grpc_error *shutdown_error;
|
75
|
-
} inproc_slice_byte_stream;
|
76
|
-
|
77
|
-
typedef struct {
|
78
|
-
// TODO (vjpai): Add some inlined elements to avoid alloc in simple cases
|
79
|
-
sb_list_entry *head;
|
80
|
-
sb_list_entry *tail;
|
81
|
-
} slice_buffer_list;
|
82
|
-
|
83
|
-
static void slice_buffer_list_init(slice_buffer_list *l) {
|
84
|
-
l->head = NULL;
|
85
|
-
l->tail = NULL;
|
86
|
-
}
|
87
|
-
|
88
|
-
static void sb_list_entry_destroy(grpc_exec_ctx *exec_ctx, sb_list_entry *le) {
|
89
|
-
grpc_slice_buffer_destroy_internal(exec_ctx, &le->sb);
|
90
|
-
gpr_free(le);
|
91
|
-
}
|
92
|
-
|
93
|
-
static void slice_buffer_list_destroy(grpc_exec_ctx *exec_ctx,
|
94
|
-
slice_buffer_list *l) {
|
95
|
-
sb_list_entry *curr = l->head;
|
96
|
-
while (curr != NULL) {
|
97
|
-
sb_list_entry *le = curr;
|
98
|
-
curr = curr->next;
|
99
|
-
sb_list_entry_destroy(exec_ctx, le);
|
100
|
-
}
|
101
|
-
l->head = NULL;
|
102
|
-
l->tail = NULL;
|
103
|
-
}
|
104
|
-
|
105
|
-
static bool slice_buffer_list_empty(slice_buffer_list *l) {
|
106
|
-
return l->head == NULL;
|
107
|
-
}
|
108
|
-
|
109
|
-
static void slice_buffer_list_append_entry(slice_buffer_list *l,
|
110
|
-
sb_list_entry *next) {
|
111
|
-
next->next = NULL;
|
112
|
-
if (l->tail) {
|
113
|
-
l->tail->next = next;
|
114
|
-
l->tail = next;
|
115
|
-
} else {
|
116
|
-
l->head = next;
|
117
|
-
l->tail = next;
|
118
|
-
}
|
119
|
-
}
|
120
|
-
|
121
|
-
static grpc_slice_buffer *slice_buffer_list_append(slice_buffer_list *l) {
|
122
|
-
sb_list_entry *next = (sb_list_entry *)gpr_malloc(sizeof(*next));
|
123
|
-
grpc_slice_buffer_init(&next->sb);
|
124
|
-
slice_buffer_list_append_entry(l, next);
|
125
|
-
return &next->sb;
|
126
|
-
}
|
127
|
-
|
128
|
-
static sb_list_entry *slice_buffer_list_pophead(slice_buffer_list *l) {
|
129
|
-
sb_list_entry *ret = l->head;
|
130
|
-
l->head = l->head->next;
|
131
|
-
if (l->head == NULL) {
|
132
|
-
l->tail = NULL;
|
133
|
-
}
|
134
|
-
return ret;
|
135
|
-
}
|
136
|
-
|
137
65
|
typedef struct inproc_stream {
|
138
|
-
inproc_transport
|
66
|
+
inproc_transport* t;
|
139
67
|
grpc_metadata_batch to_read_initial_md;
|
140
68
|
uint32_t to_read_initial_md_flags;
|
141
69
|
bool to_read_initial_md_filled;
|
142
|
-
slice_buffer_list to_read_message;
|
143
70
|
grpc_metadata_batch to_read_trailing_md;
|
144
71
|
bool to_read_trailing_md_filled;
|
145
|
-
bool
|
146
|
-
bool
|
147
|
-
grpc_closure
|
72
|
+
bool ops_needed;
|
73
|
+
bool op_closure_scheduled;
|
74
|
+
grpc_closure op_closure;
|
148
75
|
// Write buffer used only during gap at init time when client-side
|
149
76
|
// stream is set up but server side stream is not yet set up
|
150
77
|
grpc_metadata_batch write_buffer_initial_md;
|
151
78
|
bool write_buffer_initial_md_filled;
|
152
79
|
uint32_t write_buffer_initial_md_flags;
|
153
|
-
|
154
|
-
slice_buffer_list write_buffer_message;
|
80
|
+
grpc_millis write_buffer_deadline;
|
155
81
|
grpc_metadata_batch write_buffer_trailing_md;
|
156
82
|
bool write_buffer_trailing_md_filled;
|
157
|
-
grpc_error
|
83
|
+
grpc_error* write_buffer_cancel_error;
|
158
84
|
|
159
|
-
struct inproc_stream
|
85
|
+
struct inproc_stream* other_side;
|
160
86
|
bool other_side_closed; // won't talk anymore
|
161
87
|
bool write_buffer_other_side_closed; // on hold
|
162
|
-
grpc_stream_refcount
|
163
|
-
grpc_closure
|
88
|
+
grpc_stream_refcount* refs;
|
89
|
+
grpc_closure* closure_at_destroy;
|
164
90
|
|
165
|
-
gpr_arena
|
91
|
+
gpr_arena* arena;
|
166
92
|
|
167
|
-
grpc_transport_stream_op_batch
|
168
|
-
grpc_transport_stream_op_batch
|
169
|
-
grpc_transport_stream_op_batch
|
93
|
+
grpc_transport_stream_op_batch* send_message_op;
|
94
|
+
grpc_transport_stream_op_batch* send_trailing_md_op;
|
95
|
+
grpc_transport_stream_op_batch* recv_initial_md_op;
|
96
|
+
grpc_transport_stream_op_batch* recv_message_op;
|
97
|
+
grpc_transport_stream_op_batch* recv_trailing_md_op;
|
170
98
|
|
171
|
-
|
99
|
+
grpc_slice_buffer recv_message;
|
100
|
+
grpc_slice_buffer_stream recv_stream;
|
101
|
+
bool recv_inited;
|
172
102
|
|
173
103
|
bool initial_md_sent;
|
174
104
|
bool trailing_md_sent;
|
@@ -177,72 +107,29 @@ typedef struct inproc_stream {
|
|
177
107
|
|
178
108
|
bool closed;
|
179
109
|
|
180
|
-
grpc_error
|
181
|
-
grpc_error
|
110
|
+
grpc_error* cancel_self_error;
|
111
|
+
grpc_error* cancel_other_error;
|
182
112
|
|
183
|
-
|
113
|
+
grpc_millis deadline;
|
184
114
|
|
185
115
|
bool listed;
|
186
|
-
struct inproc_stream
|
187
|
-
struct inproc_stream
|
116
|
+
struct inproc_stream* stream_list_prev;
|
117
|
+
struct inproc_stream* stream_list_next;
|
188
118
|
} inproc_stream;
|
189
119
|
|
190
|
-
static
|
191
|
-
|
192
|
-
|
193
|
-
|
194
|
-
|
195
|
-
// Thus, this function always returns true (unlike other transports) and
|
196
|
-
// there is never any need to schedule a closure
|
197
|
-
return true;
|
198
|
-
}
|
199
|
-
|
200
|
-
static grpc_error *inproc_slice_byte_stream_pull(grpc_exec_ctx *exec_ctx,
|
201
|
-
grpc_byte_stream *bs,
|
202
|
-
grpc_slice *slice) {
|
203
|
-
inproc_slice_byte_stream *stream = (inproc_slice_byte_stream *)bs;
|
204
|
-
if (stream->shutdown_error != GRPC_ERROR_NONE) {
|
205
|
-
return GRPC_ERROR_REF(stream->shutdown_error);
|
206
|
-
}
|
207
|
-
*slice = grpc_slice_buffer_take_first(&stream->le->sb);
|
208
|
-
return GRPC_ERROR_NONE;
|
209
|
-
}
|
210
|
-
|
211
|
-
static void inproc_slice_byte_stream_shutdown(grpc_exec_ctx *exec_ctx,
|
212
|
-
grpc_byte_stream *bs,
|
213
|
-
grpc_error *error) {
|
214
|
-
inproc_slice_byte_stream *stream = (inproc_slice_byte_stream *)bs;
|
215
|
-
GRPC_ERROR_UNREF(stream->shutdown_error);
|
216
|
-
stream->shutdown_error = error;
|
217
|
-
}
|
218
|
-
|
219
|
-
static void inproc_slice_byte_stream_destroy(grpc_exec_ctx *exec_ctx,
|
220
|
-
grpc_byte_stream *bs) {
|
221
|
-
inproc_slice_byte_stream *stream = (inproc_slice_byte_stream *)bs;
|
222
|
-
sb_list_entry_destroy(exec_ctx, stream->le);
|
223
|
-
GRPC_ERROR_UNREF(stream->shutdown_error);
|
224
|
-
}
|
225
|
-
|
226
|
-
static const grpc_byte_stream_vtable inproc_slice_byte_stream_vtable = {
|
227
|
-
inproc_slice_byte_stream_next, inproc_slice_byte_stream_pull,
|
228
|
-
inproc_slice_byte_stream_shutdown, inproc_slice_byte_stream_destroy};
|
229
|
-
|
230
|
-
void inproc_slice_byte_stream_init(inproc_slice_byte_stream *s,
|
231
|
-
sb_list_entry *le) {
|
232
|
-
s->base.length = (uint32_t)le->sb.length;
|
233
|
-
s->base.flags = 0;
|
234
|
-
s->base.vtable = &inproc_slice_byte_stream_vtable;
|
235
|
-
s->le = le;
|
236
|
-
s->shutdown_error = GRPC_ERROR_NONE;
|
237
|
-
}
|
120
|
+
static grpc_closure do_nothing_closure;
|
121
|
+
static bool cancel_stream_locked(grpc_exec_ctx* exec_ctx, inproc_stream* s,
|
122
|
+
grpc_error* error);
|
123
|
+
static void op_state_machine(grpc_exec_ctx* exec_ctx, void* arg,
|
124
|
+
grpc_error* error);
|
238
125
|
|
239
|
-
static void ref_transport(inproc_transport
|
126
|
+
static void ref_transport(inproc_transport* t) {
|
240
127
|
INPROC_LOG(GPR_DEBUG, "ref_transport %p", t);
|
241
128
|
gpr_ref(&t->refs);
|
242
129
|
}
|
243
130
|
|
244
|
-
static void really_destroy_transport(grpc_exec_ctx
|
245
|
-
inproc_transport
|
131
|
+
static void really_destroy_transport(grpc_exec_ctx* exec_ctx,
|
132
|
+
inproc_transport* t) {
|
246
133
|
INPROC_LOG(GPR_DEBUG, "really_destroy_transport %p", t);
|
247
134
|
grpc_connectivity_state_destroy(exec_ctx, &t->connectivity);
|
248
135
|
if (gpr_unref(&t->mu->refs)) {
|
@@ -251,7 +138,7 @@ static void really_destroy_transport(grpc_exec_ctx *exec_ctx,
|
|
251
138
|
gpr_free(t);
|
252
139
|
}
|
253
140
|
|
254
|
-
static void unref_transport(grpc_exec_ctx
|
141
|
+
static void unref_transport(grpc_exec_ctx* exec_ctx, inproc_transport* t) {
|
255
142
|
INPROC_LOG(GPR_DEBUG, "unref_transport %p", t);
|
256
143
|
if (gpr_unref(&t->refs)) {
|
257
144
|
really_destroy_transport(exec_ctx, t);
|
@@ -266,26 +153,28 @@ static void unref_transport(grpc_exec_ctx *exec_ctx, inproc_transport *t) {
|
|
266
153
|
#define STREAM_UNREF(e, refs, reason) grpc_stream_unref(e, refs)
|
267
154
|
#endif
|
268
155
|
|
269
|
-
static void ref_stream(inproc_stream
|
156
|
+
static void ref_stream(inproc_stream* s, const char* reason) {
|
270
157
|
INPROC_LOG(GPR_DEBUG, "ref_stream %p %s", s, reason);
|
271
158
|
STREAM_REF(s->refs, reason);
|
272
159
|
}
|
273
160
|
|
274
|
-
static void unref_stream(grpc_exec_ctx
|
275
|
-
const char
|
161
|
+
static void unref_stream(grpc_exec_ctx* exec_ctx, inproc_stream* s,
|
162
|
+
const char* reason) {
|
276
163
|
INPROC_LOG(GPR_DEBUG, "unref_stream %p %s", s, reason);
|
277
164
|
STREAM_UNREF(exec_ctx, s->refs, reason);
|
278
165
|
}
|
279
166
|
|
280
|
-
static void really_destroy_stream(grpc_exec_ctx
|
167
|
+
static void really_destroy_stream(grpc_exec_ctx* exec_ctx, inproc_stream* s) {
|
281
168
|
INPROC_LOG(GPR_DEBUG, "really_destroy_stream %p", s);
|
282
169
|
|
283
|
-
slice_buffer_list_destroy(exec_ctx, &s->to_read_message);
|
284
|
-
slice_buffer_list_destroy(exec_ctx, &s->write_buffer_message);
|
285
170
|
GRPC_ERROR_UNREF(s->write_buffer_cancel_error);
|
286
171
|
GRPC_ERROR_UNREF(s->cancel_self_error);
|
287
172
|
GRPC_ERROR_UNREF(s->cancel_other_error);
|
288
173
|
|
174
|
+
if (s->recv_inited) {
|
175
|
+
grpc_slice_buffer_destroy_internal(exec_ctx, &s->recv_message);
|
176
|
+
}
|
177
|
+
|
289
178
|
unref_transport(exec_ctx, s->t);
|
290
179
|
|
291
180
|
if (s->closure_at_destroy) {
|
@@ -293,15 +182,12 @@ static void really_destroy_stream(grpc_exec_ctx *exec_ctx, inproc_stream *s) {
|
|
293
182
|
}
|
294
183
|
}
|
295
184
|
|
296
|
-
static void
|
297
|
-
grpc_error *error);
|
298
|
-
|
299
|
-
static void log_metadata(const grpc_metadata_batch *md_batch, bool is_client,
|
185
|
+
static void log_metadata(const grpc_metadata_batch* md_batch, bool is_client,
|
300
186
|
bool is_initial) {
|
301
|
-
for (grpc_linked_mdelem
|
187
|
+
for (grpc_linked_mdelem* md = md_batch->list.head; md != nullptr;
|
302
188
|
md = md->next) {
|
303
|
-
char
|
304
|
-
char
|
189
|
+
char* key = grpc_slice_to_c_string(GRPC_MDKEY(md->md));
|
190
|
+
char* value = grpc_slice_to_c_string(GRPC_MDVALUE(md->md));
|
305
191
|
gpr_log(GPR_INFO, "INPROC:%s:%s: %s: %s", is_initial ? "HDR" : "TRL",
|
306
192
|
is_client ? "CLI" : "SVR", key, value);
|
307
193
|
gpr_free(key);
|
@@ -309,25 +195,25 @@ static void log_metadata(const grpc_metadata_batch *md_batch, bool is_client,
|
|
309
195
|
}
|
310
196
|
}
|
311
197
|
|
312
|
-
static grpc_error
|
313
|
-
const grpc_metadata_batch
|
314
|
-
uint32_t flags, grpc_metadata_batch
|
315
|
-
uint32_t
|
316
|
-
if (
|
317
|
-
log_metadata(metadata, s->t->is_client, outflags !=
|
198
|
+
static grpc_error* fill_in_metadata(grpc_exec_ctx* exec_ctx, inproc_stream* s,
|
199
|
+
const grpc_metadata_batch* metadata,
|
200
|
+
uint32_t flags, grpc_metadata_batch* out_md,
|
201
|
+
uint32_t* outflags, bool* markfilled) {
|
202
|
+
if (grpc_inproc_trace.enabled()) {
|
203
|
+
log_metadata(metadata, s->t->is_client, outflags != nullptr);
|
318
204
|
}
|
319
205
|
|
320
|
-
if (outflags !=
|
206
|
+
if (outflags != nullptr) {
|
321
207
|
*outflags = flags;
|
322
208
|
}
|
323
|
-
if (markfilled !=
|
209
|
+
if (markfilled != nullptr) {
|
324
210
|
*markfilled = true;
|
325
211
|
}
|
326
|
-
grpc_error
|
327
|
-
for (grpc_linked_mdelem
|
328
|
-
(elem !=
|
329
|
-
grpc_linked_mdelem
|
330
|
-
(grpc_linked_mdelem
|
212
|
+
grpc_error* error = GRPC_ERROR_NONE;
|
213
|
+
for (grpc_linked_mdelem* elem = metadata->list.head;
|
214
|
+
(elem != nullptr) && (error == GRPC_ERROR_NONE); elem = elem->next) {
|
215
|
+
grpc_linked_mdelem* nelem =
|
216
|
+
(grpc_linked_mdelem*)gpr_arena_alloc(s->arena, sizeof(*nelem));
|
331
217
|
nelem->md = grpc_mdelem_from_slices(
|
332
218
|
exec_ctx, grpc_slice_intern(GRPC_MDKEY(elem->md)),
|
333
219
|
grpc_slice_intern(GRPC_MDVALUE(elem->md)));
|
@@ -337,12 +223,12 @@ static grpc_error *fill_in_metadata(grpc_exec_ctx *exec_ctx, inproc_stream *s,
|
|
337
223
|
return error;
|
338
224
|
}
|
339
225
|
|
340
|
-
static int init_stream(grpc_exec_ctx
|
341
|
-
grpc_stream
|
342
|
-
const void
|
226
|
+
static int init_stream(grpc_exec_ctx* exec_ctx, grpc_transport* gt,
|
227
|
+
grpc_stream* gs, grpc_stream_refcount* refcount,
|
228
|
+
const void* server_data, gpr_arena* arena) {
|
343
229
|
INPROC_LOG(GPR_DEBUG, "init_stream %p %p %p", gt, gs, server_data);
|
344
|
-
inproc_transport
|
345
|
-
inproc_stream
|
230
|
+
inproc_transport* t = (inproc_transport*)gt;
|
231
|
+
inproc_stream* s = (inproc_stream*)gs;
|
346
232
|
s->arena = arena;
|
347
233
|
|
348
234
|
s->refs = refcount;
|
@@ -359,14 +245,12 @@ static int init_stream(grpc_exec_ctx *exec_ctx, grpc_transport *gt,
|
|
359
245
|
s->write_buffer_initial_md_filled = false;
|
360
246
|
grpc_metadata_batch_init(&s->write_buffer_trailing_md);
|
361
247
|
s->write_buffer_trailing_md_filled = false;
|
362
|
-
|
363
|
-
|
364
|
-
s->
|
365
|
-
s->read_closure_scheduled = false;
|
366
|
-
GRPC_CLOSURE_INIT(&s->read_closure, read_state_machine, s,
|
248
|
+
s->ops_needed = false;
|
249
|
+
s->op_closure_scheduled = false;
|
250
|
+
GRPC_CLOSURE_INIT(&s->op_closure, op_state_machine, s,
|
367
251
|
grpc_schedule_on_exec_ctx);
|
368
252
|
s->t = t;
|
369
|
-
s->closure_at_destroy =
|
253
|
+
s->closure_at_destroy = nullptr;
|
370
254
|
s->other_side_closed = false;
|
371
255
|
|
372
256
|
s->initial_md_sent = s->trailing_md_sent = s->initial_md_recvd =
|
@@ -377,10 +261,10 @@ static int init_stream(grpc_exec_ctx *exec_ctx, grpc_transport *gt,
|
|
377
261
|
s->cancel_self_error = GRPC_ERROR_NONE;
|
378
262
|
s->cancel_other_error = GRPC_ERROR_NONE;
|
379
263
|
s->write_buffer_cancel_error = GRPC_ERROR_NONE;
|
380
|
-
s->deadline =
|
381
|
-
s->write_buffer_deadline =
|
264
|
+
s->deadline = GRPC_MILLIS_INF_FUTURE;
|
265
|
+
s->write_buffer_deadline = GRPC_MILLIS_INF_FUTURE;
|
382
266
|
|
383
|
-
s->stream_list_prev =
|
267
|
+
s->stream_list_prev = nullptr;
|
384
268
|
gpr_mu_lock(&t->mu->mu);
|
385
269
|
s->listed = true;
|
386
270
|
ref_stream(s, "inproc_init_stream:list");
|
@@ -393,19 +277,19 @@ static int init_stream(grpc_exec_ctx *exec_ctx, grpc_transport *gt,
|
|
393
277
|
|
394
278
|
if (!server_data) {
|
395
279
|
ref_transport(t);
|
396
|
-
inproc_transport
|
280
|
+
inproc_transport* st = t->other_side;
|
397
281
|
ref_transport(st);
|
398
|
-
s->other_side =
|
282
|
+
s->other_side = nullptr; // will get filled in soon
|
399
283
|
// Pass the client-side stream address to the server-side for a ref
|
400
284
|
ref_stream(s, "inproc_init_stream:clt"); // ref it now on behalf of server
|
401
285
|
// side to avoid destruction
|
402
286
|
INPROC_LOG(GPR_DEBUG, "calling accept stream cb %p %p",
|
403
287
|
st->accept_stream_cb, st->accept_stream_data);
|
404
288
|
(*st->accept_stream_cb)(exec_ctx, st->accept_stream_data, &st->base,
|
405
|
-
(void
|
289
|
+
(void*)s);
|
406
290
|
} else {
|
407
291
|
// This is the server-side and is being called through accept_stream_cb
|
408
|
-
inproc_stream
|
292
|
+
inproc_stream* cs = (inproc_stream*)server_data;
|
409
293
|
s->other_side = cs;
|
410
294
|
// Ref the server-side stream on behalf of the client now
|
411
295
|
ref_stream(s, "inproc_init_stream:srv");
|
@@ -421,18 +305,13 @@ static int init_stream(grpc_exec_ctx *exec_ctx, grpc_transport *gt,
|
|
421
305
|
cs->write_buffer_initial_md_flags,
|
422
306
|
&s->to_read_initial_md, &s->to_read_initial_md_flags,
|
423
307
|
&s->to_read_initial_md_filled);
|
424
|
-
s->deadline =
|
308
|
+
s->deadline = GPR_MIN(s->deadline, cs->write_buffer_deadline);
|
425
309
|
grpc_metadata_batch_clear(exec_ctx, &cs->write_buffer_initial_md);
|
426
310
|
cs->write_buffer_initial_md_filled = false;
|
427
311
|
}
|
428
|
-
while (!slice_buffer_list_empty(&cs->write_buffer_message)) {
|
429
|
-
slice_buffer_list_append_entry(
|
430
|
-
&s->to_read_message,
|
431
|
-
slice_buffer_list_pophead(&cs->write_buffer_message));
|
432
|
-
}
|
433
312
|
if (cs->write_buffer_trailing_md_filled) {
|
434
313
|
fill_in_metadata(exec_ctx, s, &cs->write_buffer_trailing_md, 0,
|
435
|
-
&s->to_read_trailing_md,
|
314
|
+
&s->to_read_trailing_md, nullptr,
|
436
315
|
&s->to_read_trailing_md_filled);
|
437
316
|
grpc_metadata_batch_clear(exec_ctx, &cs->write_buffer_trailing_md);
|
438
317
|
cs->write_buffer_trailing_md_filled = false;
|
@@ -447,21 +326,21 @@ static int init_stream(grpc_exec_ctx *exec_ctx, grpc_transport *gt,
|
|
447
326
|
return 0; // return value is not important
|
448
327
|
}
|
449
328
|
|
450
|
-
static void close_stream_locked(grpc_exec_ctx
|
329
|
+
static void close_stream_locked(grpc_exec_ctx* exec_ctx, inproc_stream* s) {
|
451
330
|
if (!s->closed) {
|
452
331
|
// Release the metadata that we would have written out
|
453
332
|
grpc_metadata_batch_destroy(exec_ctx, &s->write_buffer_initial_md);
|
454
333
|
grpc_metadata_batch_destroy(exec_ctx, &s->write_buffer_trailing_md);
|
455
334
|
|
456
335
|
if (s->listed) {
|
457
|
-
inproc_stream
|
458
|
-
inproc_stream
|
459
|
-
if (p !=
|
336
|
+
inproc_stream* p = s->stream_list_prev;
|
337
|
+
inproc_stream* n = s->stream_list_next;
|
338
|
+
if (p != nullptr) {
|
460
339
|
p->stream_list_next = n;
|
461
340
|
} else {
|
462
341
|
s->t->stream_list = n;
|
463
342
|
}
|
464
|
-
if (n !=
|
343
|
+
if (n != nullptr) {
|
465
344
|
n->stream_list_prev = p;
|
466
345
|
}
|
467
346
|
s->listed = false;
|
@@ -473,24 +352,54 @@ static void close_stream_locked(grpc_exec_ctx *exec_ctx, inproc_stream *s) {
|
|
473
352
|
}
|
474
353
|
|
475
354
|
// This function means that we are done talking/listening to the other side
|
476
|
-
static void close_other_side_locked(grpc_exec_ctx
|
477
|
-
const char
|
478
|
-
if (s->other_side !=
|
355
|
+
static void close_other_side_locked(grpc_exec_ctx* exec_ctx, inproc_stream* s,
|
356
|
+
const char* reason) {
|
357
|
+
if (s->other_side != nullptr) {
|
479
358
|
// First release the metadata that came from the other side's arena
|
480
359
|
grpc_metadata_batch_destroy(exec_ctx, &s->to_read_initial_md);
|
481
360
|
grpc_metadata_batch_destroy(exec_ctx, &s->to_read_trailing_md);
|
482
361
|
|
483
362
|
unref_stream(exec_ctx, s->other_side, reason);
|
484
363
|
s->other_side_closed = true;
|
485
|
-
s->other_side =
|
364
|
+
s->other_side = nullptr;
|
486
365
|
} else if (!s->other_side_closed) {
|
487
366
|
s->write_buffer_other_side_closed = true;
|
488
367
|
}
|
489
368
|
}
|
490
369
|
|
491
|
-
|
492
|
-
|
493
|
-
|
370
|
+
// Call the on_complete closure associated with this stream_op_batch if
|
371
|
+
// this stream_op_batch is only one of the pending operations for this
|
372
|
+
// stream. This is called when one of the pending operations for the stream
|
373
|
+
// is done and about to be NULLed out
|
374
|
+
static void complete_if_batch_end_locked(grpc_exec_ctx* exec_ctx,
|
375
|
+
inproc_stream* s, grpc_error* error,
|
376
|
+
grpc_transport_stream_op_batch* op,
|
377
|
+
const char* msg) {
|
378
|
+
int is_sm = (int)(op == s->send_message_op);
|
379
|
+
int is_stm = (int)(op == s->send_trailing_md_op);
|
380
|
+
int is_rim = (int)(op == s->recv_initial_md_op);
|
381
|
+
int is_rm = (int)(op == s->recv_message_op);
|
382
|
+
int is_rtm = (int)(op == s->recv_trailing_md_op);
|
383
|
+
|
384
|
+
if ((is_sm + is_stm + is_rim + is_rm + is_rtm) == 1) {
|
385
|
+
INPROC_LOG(GPR_DEBUG, "%s %p %p %p", msg, s, op, error);
|
386
|
+
GRPC_CLOSURE_SCHED(exec_ctx, op->on_complete, GRPC_ERROR_REF(error));
|
387
|
+
}
|
388
|
+
}
|
389
|
+
|
390
|
+
static void maybe_schedule_op_closure_locked(grpc_exec_ctx* exec_ctx,
|
391
|
+
inproc_stream* s,
|
392
|
+
grpc_error* error) {
|
393
|
+
if (s && s->ops_needed && !s->op_closure_scheduled) {
|
394
|
+
GRPC_CLOSURE_SCHED(exec_ctx, &s->op_closure, GRPC_ERROR_REF(error));
|
395
|
+
s->op_closure_scheduled = true;
|
396
|
+
s->ops_needed = false;
|
397
|
+
}
|
398
|
+
}
|
399
|
+
|
400
|
+
static void fail_helper_locked(grpc_exec_ctx* exec_ctx, inproc_stream* s,
|
401
|
+
grpc_error* error) {
|
402
|
+
INPROC_LOG(GPR_DEBUG, "op_state_machine %p fail_helper", s);
|
494
403
|
// If we're failing this side, we need to make sure that
|
495
404
|
// we also send or have already sent trailing metadata
|
496
405
|
if (!s->trailing_md_sent) {
|
@@ -500,45 +409,39 @@ static void fail_helper_locked(grpc_exec_ctx *exec_ctx, inproc_stream *s,
|
|
500
409
|
grpc_metadata_batch fake_md;
|
501
410
|
grpc_metadata_batch_init(&fake_md);
|
502
411
|
|
503
|
-
inproc_stream
|
504
|
-
grpc_metadata_batch
|
505
|
-
|
506
|
-
|
507
|
-
|
508
|
-
|
412
|
+
inproc_stream* other = s->other_side;
|
413
|
+
grpc_metadata_batch* dest = (other == nullptr)
|
414
|
+
? &s->write_buffer_trailing_md
|
415
|
+
: &other->to_read_trailing_md;
|
416
|
+
bool* destfilled = (other == nullptr) ? &s->write_buffer_trailing_md_filled
|
417
|
+
: &other->to_read_trailing_md_filled;
|
418
|
+
fill_in_metadata(exec_ctx, s, &fake_md, 0, dest, nullptr, destfilled);
|
509
419
|
grpc_metadata_batch_destroy(exec_ctx, &fake_md);
|
510
420
|
|
511
|
-
if (other !=
|
421
|
+
if (other != nullptr) {
|
512
422
|
if (other->cancel_other_error == GRPC_ERROR_NONE) {
|
513
423
|
other->cancel_other_error = GRPC_ERROR_REF(error);
|
514
424
|
}
|
515
|
-
|
516
|
-
if (!other->read_closure_scheduled) {
|
517
|
-
GRPC_CLOSURE_SCHED(exec_ctx, &other->read_closure,
|
518
|
-
GRPC_ERROR_REF(error));
|
519
|
-
other->read_closure_scheduled = true;
|
520
|
-
}
|
521
|
-
other->reads_needed = false;
|
522
|
-
}
|
425
|
+
maybe_schedule_op_closure_locked(exec_ctx, other, error);
|
523
426
|
} else if (s->write_buffer_cancel_error == GRPC_ERROR_NONE) {
|
524
427
|
s->write_buffer_cancel_error = GRPC_ERROR_REF(error);
|
525
428
|
}
|
526
429
|
}
|
527
430
|
if (s->recv_initial_md_op) {
|
528
|
-
grpc_error
|
431
|
+
grpc_error* err;
|
529
432
|
if (!s->t->is_client) {
|
530
433
|
// If this is a server, provide initial metadata with a path and authority
|
531
434
|
// since it expects that as well as no error yet
|
532
435
|
grpc_metadata_batch fake_md;
|
533
436
|
grpc_metadata_batch_init(&fake_md);
|
534
|
-
grpc_linked_mdelem
|
535
|
-
(grpc_linked_mdelem
|
437
|
+
grpc_linked_mdelem* path_md =
|
438
|
+
(grpc_linked_mdelem*)gpr_arena_alloc(s->arena, sizeof(*path_md));
|
536
439
|
path_md->md =
|
537
440
|
grpc_mdelem_from_slices(exec_ctx, g_fake_path_key, g_fake_path_value);
|
538
441
|
GPR_ASSERT(grpc_metadata_batch_link_tail(exec_ctx, &fake_md, path_md) ==
|
539
442
|
GRPC_ERROR_NONE);
|
540
|
-
grpc_linked_mdelem
|
541
|
-
(grpc_linked_mdelem
|
443
|
+
grpc_linked_mdelem* auth_md =
|
444
|
+
(grpc_linked_mdelem*)gpr_arena_alloc(s->arena, sizeof(*auth_md));
|
542
445
|
auth_md->md =
|
543
446
|
grpc_mdelem_from_slices(exec_ctx, g_fake_auth_key, g_fake_auth_value);
|
544
447
|
GPR_ASSERT(grpc_metadata_batch_link_tail(exec_ctx, &fake_md, auth_md) ==
|
@@ -549,7 +452,7 @@ static void fail_helper_locked(grpc_exec_ctx *exec_ctx, inproc_stream *s,
|
|
549
452
|
s->recv_initial_md_op->payload->recv_initial_metadata
|
550
453
|
.recv_initial_metadata,
|
551
454
|
s->recv_initial_md_op->payload->recv_initial_metadata.recv_flags,
|
552
|
-
|
455
|
+
nullptr);
|
553
456
|
grpc_metadata_batch_destroy(exec_ctx, &fake_md);
|
554
457
|
err = GRPC_ERROR_NONE;
|
555
458
|
} else {
|
@@ -564,15 +467,10 @@ static void fail_helper_locked(grpc_exec_ctx *exec_ctx, inproc_stream *s,
|
|
564
467
|
err);
|
565
468
|
// Last use of err so no need to REF and then UNREF it
|
566
469
|
|
567
|
-
|
568
|
-
|
569
|
-
|
570
|
-
|
571
|
-
error, s);
|
572
|
-
GRPC_CLOSURE_SCHED(exec_ctx, s->recv_initial_md_op->on_complete,
|
573
|
-
GRPC_ERROR_REF(error));
|
574
|
-
}
|
575
|
-
s->recv_initial_md_op = NULL;
|
470
|
+
complete_if_batch_end_locked(
|
471
|
+
exec_ctx, s, error, s->recv_initial_md_op,
|
472
|
+
"fail_helper scheduling recv-initial-metadata-on-complete");
|
473
|
+
s->recv_initial_md_op = nullptr;
|
576
474
|
}
|
577
475
|
if (s->recv_message_op) {
|
578
476
|
INPROC_LOG(GPR_DEBUG, "fail_helper %p scheduling message-ready %p", s,
|
@@ -580,21 +478,31 @@ static void fail_helper_locked(grpc_exec_ctx *exec_ctx, inproc_stream *s,
|
|
580
478
|
GRPC_CLOSURE_SCHED(
|
581
479
|
exec_ctx, s->recv_message_op->payload->recv_message.recv_message_ready,
|
582
480
|
GRPC_ERROR_REF(error));
|
583
|
-
|
584
|
-
|
585
|
-
|
586
|
-
|
587
|
-
|
588
|
-
|
589
|
-
|
481
|
+
complete_if_batch_end_locked(
|
482
|
+
exec_ctx, s, error, s->recv_message_op,
|
483
|
+
"fail_helper scheduling recv-message-on-complete");
|
484
|
+
s->recv_message_op = nullptr;
|
485
|
+
}
|
486
|
+
if (s->send_message_op) {
|
487
|
+
complete_if_batch_end_locked(
|
488
|
+
exec_ctx, s, error, s->send_message_op,
|
489
|
+
"fail_helper scheduling send-message-on-complete");
|
490
|
+
s->send_message_op = nullptr;
|
491
|
+
}
|
492
|
+
if (s->send_trailing_md_op) {
|
493
|
+
complete_if_batch_end_locked(
|
494
|
+
exec_ctx, s, error, s->send_trailing_md_op,
|
495
|
+
"fail_helper scheduling send-trailng-md-on-complete");
|
496
|
+
s->send_trailing_md_op = nullptr;
|
590
497
|
}
|
591
498
|
if (s->recv_trailing_md_op) {
|
592
499
|
INPROC_LOG(GPR_DEBUG,
|
593
500
|
"fail_helper %p scheduling trailing-md-on-complete %p", s,
|
594
501
|
error);
|
595
|
-
|
596
|
-
|
597
|
-
|
502
|
+
complete_if_batch_end_locked(
|
503
|
+
exec_ctx, s, error, s->recv_trailing_md_op,
|
504
|
+
"fail_helper scheduling recv-trailing-metadata-on-complete");
|
505
|
+
s->recv_trailing_md_op = nullptr;
|
598
506
|
}
|
599
507
|
close_other_side_locked(exec_ctx, s, "fail_helper:other_side");
|
600
508
|
close_stream_locked(exec_ctx, s);
|
@@ -602,25 +510,76 @@ static void fail_helper_locked(grpc_exec_ctx *exec_ctx, inproc_stream *s,
|
|
602
510
|
GRPC_ERROR_UNREF(error);
|
603
511
|
}
|
604
512
|
|
605
|
-
static void
|
606
|
-
|
513
|
+
static void message_transfer_locked(grpc_exec_ctx* exec_ctx,
|
514
|
+
inproc_stream* sender,
|
515
|
+
inproc_stream* receiver) {
|
516
|
+
size_t remaining =
|
517
|
+
sender->send_message_op->payload->send_message.send_message->length;
|
518
|
+
if (receiver->recv_inited) {
|
519
|
+
grpc_slice_buffer_destroy_internal(exec_ctx, &receiver->recv_message);
|
520
|
+
}
|
521
|
+
grpc_slice_buffer_init(&receiver->recv_message);
|
522
|
+
receiver->recv_inited = true;
|
523
|
+
do {
|
524
|
+
grpc_slice message_slice;
|
525
|
+
grpc_closure unused;
|
526
|
+
GPR_ASSERT(grpc_byte_stream_next(
|
527
|
+
exec_ctx, sender->send_message_op->payload->send_message.send_message,
|
528
|
+
SIZE_MAX, &unused));
|
529
|
+
grpc_error* error = grpc_byte_stream_pull(
|
530
|
+
exec_ctx, sender->send_message_op->payload->send_message.send_message,
|
531
|
+
&message_slice);
|
532
|
+
if (error != GRPC_ERROR_NONE) {
|
533
|
+
cancel_stream_locked(exec_ctx, sender, GRPC_ERROR_REF(error));
|
534
|
+
break;
|
535
|
+
}
|
536
|
+
GPR_ASSERT(error == GRPC_ERROR_NONE);
|
537
|
+
remaining -= GRPC_SLICE_LENGTH(message_slice);
|
538
|
+
grpc_slice_buffer_add(&receiver->recv_message, message_slice);
|
539
|
+
} while (remaining > 0);
|
540
|
+
|
541
|
+
grpc_slice_buffer_stream_init(&receiver->recv_stream, &receiver->recv_message,
|
542
|
+
0);
|
543
|
+
*receiver->recv_message_op->payload->recv_message.recv_message =
|
544
|
+
&receiver->recv_stream.base;
|
545
|
+
INPROC_LOG(GPR_DEBUG, "message_transfer_locked %p scheduling message-ready",
|
546
|
+
receiver);
|
547
|
+
GRPC_CLOSURE_SCHED(
|
548
|
+
exec_ctx,
|
549
|
+
receiver->recv_message_op->payload->recv_message.recv_message_ready,
|
550
|
+
GRPC_ERROR_NONE);
|
551
|
+
complete_if_batch_end_locked(
|
552
|
+
exec_ctx, sender, GRPC_ERROR_NONE, sender->send_message_op,
|
553
|
+
"message_transfer scheduling sender on_complete");
|
554
|
+
complete_if_batch_end_locked(
|
555
|
+
exec_ctx, receiver, GRPC_ERROR_NONE, receiver->recv_message_op,
|
556
|
+
"message_transfer scheduling receiver on_complete");
|
557
|
+
|
558
|
+
receiver->recv_message_op = nullptr;
|
559
|
+
sender->send_message_op = nullptr;
|
560
|
+
}
|
561
|
+
|
562
|
+
static void op_state_machine(grpc_exec_ctx* exec_ctx, void* arg,
|
563
|
+
grpc_error* error) {
|
607
564
|
// This function gets called when we have contents in the unprocessed reads
|
608
565
|
// Get what we want based on our ops wanted
|
609
566
|
// Schedule our appropriate closures
|
610
|
-
// and then return to
|
567
|
+
// and then return to ops_needed state if still needed
|
611
568
|
|
612
569
|
// Since this is a closure directly invoked by the combiner, it should not
|
613
570
|
// unref the error parameter explicitly; the combiner will do that implicitly
|
614
|
-
grpc_error
|
571
|
+
grpc_error* new_err = GRPC_ERROR_NONE;
|
615
572
|
|
616
573
|
bool needs_close = false;
|
617
574
|
|
618
|
-
INPROC_LOG(GPR_DEBUG, "
|
619
|
-
inproc_stream
|
620
|
-
gpr_mu
|
575
|
+
INPROC_LOG(GPR_DEBUG, "op_state_machine %p", arg);
|
576
|
+
inproc_stream* s = (inproc_stream*)arg;
|
577
|
+
gpr_mu* mu = &s->t->mu->mu; // keep aside in case s gets closed
|
621
578
|
gpr_mu_lock(mu);
|
622
|
-
s->
|
579
|
+
s->op_closure_scheduled = false;
|
623
580
|
// cancellation takes precedence
|
581
|
+
inproc_stream* other = s->other_side;
|
582
|
+
|
624
583
|
if (s->cancel_self_error != GRPC_ERROR_NONE) {
|
625
584
|
fail_helper_locked(exec_ctx, s, GRPC_ERROR_REF(s->cancel_self_error));
|
626
585
|
goto done;
|
@@ -632,89 +591,117 @@ static void read_state_machine(grpc_exec_ctx *exec_ctx, void *arg,
|
|
632
591
|
goto done;
|
633
592
|
}
|
634
593
|
|
635
|
-
if (s->
|
636
|
-
if (
|
637
|
-
|
638
|
-
|
639
|
-
|
640
|
-
|
641
|
-
|
642
|
-
|
643
|
-
|
644
|
-
|
594
|
+
if (s->send_message_op && other) {
|
595
|
+
if (other->recv_message_op) {
|
596
|
+
message_transfer_locked(exec_ctx, s, other);
|
597
|
+
maybe_schedule_op_closure_locked(exec_ctx, other, GRPC_ERROR_NONE);
|
598
|
+
} else if (!s->t->is_client &&
|
599
|
+
(s->trailing_md_sent || other->recv_trailing_md_op)) {
|
600
|
+
// A server send will never be matched if the client is waiting
|
601
|
+
// for trailing metadata already
|
602
|
+
complete_if_batch_end_locked(
|
603
|
+
exec_ctx, s, GRPC_ERROR_NONE, s->send_message_op,
|
604
|
+
"op_state_machine scheduling send-message-on-complete");
|
605
|
+
s->send_message_op = nullptr;
|
606
|
+
}
|
607
|
+
}
|
608
|
+
// Pause a send trailing metadata if there is still an outstanding
|
609
|
+
// send message unless we know that the send message will never get
|
610
|
+
// matched to a receive. This happens on the client if the server has
|
611
|
+
// already sent status.
|
612
|
+
if (s->send_trailing_md_op &&
|
613
|
+
(!s->send_message_op ||
|
614
|
+
(s->t->is_client &&
|
615
|
+
(s->trailing_md_recvd || s->to_read_trailing_md_filled)))) {
|
616
|
+
grpc_metadata_batch* dest = (other == nullptr)
|
617
|
+
? &s->write_buffer_trailing_md
|
618
|
+
: &other->to_read_trailing_md;
|
619
|
+
bool* destfilled = (other == nullptr) ? &s->write_buffer_trailing_md_filled
|
620
|
+
: &other->to_read_trailing_md_filled;
|
621
|
+
if (*destfilled || s->trailing_md_sent) {
|
622
|
+
// The buffer is already in use; that's an error!
|
623
|
+
INPROC_LOG(GPR_DEBUG, "Extra trailing metadata %p", s);
|
624
|
+
new_err = GRPC_ERROR_CREATE_FROM_STATIC_STRING("Extra trailing metadata");
|
645
625
|
fail_helper_locked(exec_ctx, s, GRPC_ERROR_REF(new_err));
|
646
626
|
goto done;
|
647
|
-
} else
|
627
|
+
} else {
|
628
|
+
if (!other || !other->closed) {
|
629
|
+
fill_in_metadata(exec_ctx, s,
|
630
|
+
s->send_trailing_md_op->payload->send_trailing_metadata
|
631
|
+
.send_trailing_metadata,
|
632
|
+
0, dest, nullptr, destfilled);
|
633
|
+
}
|
634
|
+
s->trailing_md_sent = true;
|
635
|
+
if (!s->t->is_client && s->trailing_md_recvd && s->recv_trailing_md_op) {
|
636
|
+
INPROC_LOG(GPR_DEBUG,
|
637
|
+
"op_state_machine %p scheduling trailing-md-on-complete", s);
|
638
|
+
GRPC_CLOSURE_SCHED(exec_ctx, s->recv_trailing_md_op->on_complete,
|
639
|
+
GRPC_ERROR_NONE);
|
640
|
+
s->recv_trailing_md_op = nullptr;
|
641
|
+
needs_close = true;
|
642
|
+
}
|
643
|
+
}
|
644
|
+
maybe_schedule_op_closure_locked(exec_ctx, other, GRPC_ERROR_NONE);
|
645
|
+
complete_if_batch_end_locked(
|
646
|
+
exec_ctx, s, GRPC_ERROR_NONE, s->send_trailing_md_op,
|
647
|
+
"op_state_machine scheduling send-trailing-metadata-on-complete");
|
648
|
+
s->send_trailing_md_op = nullptr;
|
649
|
+
}
|
650
|
+
if (s->recv_initial_md_op) {
|
651
|
+
if (s->initial_md_recvd) {
|
648
652
|
new_err =
|
649
653
|
GRPC_ERROR_CREATE_FROM_STATIC_STRING("Already recvd initial md");
|
650
654
|
INPROC_LOG(
|
651
655
|
GPR_DEBUG,
|
652
|
-
"
|
656
|
+
"op_state_machine %p scheduling on_complete errors for already "
|
653
657
|
"recvd initial md %p",
|
654
658
|
s, new_err);
|
655
659
|
fail_helper_locked(exec_ctx, s, GRPC_ERROR_REF(new_err));
|
656
660
|
goto done;
|
657
661
|
}
|
658
662
|
|
659
|
-
s->
|
660
|
-
|
661
|
-
|
662
|
-
|
663
|
-
|
664
|
-
|
665
|
-
|
666
|
-
|
667
|
-
|
668
|
-
|
669
|
-
|
670
|
-
|
671
|
-
new_err);
|
672
|
-
GRPC_CLOSURE_SCHED(exec_ctx,
|
673
|
-
s->recv_initial_md_op->payload->recv_initial_metadata
|
674
|
-
.recv_initial_metadata_ready,
|
675
|
-
GRPC_ERROR_REF(new_err));
|
676
|
-
if ((s->recv_initial_md_op != s->recv_message_op) &&
|
677
|
-
(s->recv_initial_md_op != s->recv_trailing_md_op)) {
|
678
|
-
INPROC_LOG(
|
679
|
-
GPR_DEBUG,
|
680
|
-
"read_state_machine %p scheduling initial-metadata-on-complete %p", s,
|
681
|
-
new_err);
|
682
|
-
GRPC_CLOSURE_SCHED(exec_ctx, s->recv_initial_md_op->on_complete,
|
683
|
-
GRPC_ERROR_REF(new_err));
|
684
|
-
}
|
685
|
-
s->recv_initial_md_op = NULL;
|
686
|
-
|
687
|
-
if (new_err != GRPC_ERROR_NONE) {
|
663
|
+
if (s->to_read_initial_md_filled) {
|
664
|
+
s->initial_md_recvd = true;
|
665
|
+
new_err = fill_in_metadata(
|
666
|
+
exec_ctx, s, &s->to_read_initial_md, s->to_read_initial_md_flags,
|
667
|
+
s->recv_initial_md_op->payload->recv_initial_metadata
|
668
|
+
.recv_initial_metadata,
|
669
|
+
s->recv_initial_md_op->payload->recv_initial_metadata.recv_flags,
|
670
|
+
nullptr);
|
671
|
+
s->recv_initial_md_op->payload->recv_initial_metadata
|
672
|
+
.recv_initial_metadata->deadline = s->deadline;
|
673
|
+
grpc_metadata_batch_clear(exec_ctx, &s->to_read_initial_md);
|
674
|
+
s->to_read_initial_md_filled = false;
|
688
675
|
INPROC_LOG(GPR_DEBUG,
|
689
|
-
"
|
676
|
+
"op_state_machine %p scheduling initial-metadata-ready %p", s,
|
690
677
|
new_err);
|
691
|
-
|
692
|
-
|
678
|
+
GRPC_CLOSURE_SCHED(exec_ctx,
|
679
|
+
s->recv_initial_md_op->payload->recv_initial_metadata
|
680
|
+
.recv_initial_metadata_ready,
|
681
|
+
GRPC_ERROR_REF(new_err));
|
682
|
+
complete_if_batch_end_locked(
|
683
|
+
exec_ctx, s, new_err, s->recv_initial_md_op,
|
684
|
+
"op_state_machine scheduling recv-initial-metadata-on-complete");
|
685
|
+
s->recv_initial_md_op = nullptr;
|
686
|
+
|
687
|
+
if (new_err != GRPC_ERROR_NONE) {
|
688
|
+
INPROC_LOG(GPR_DEBUG,
|
689
|
+
"op_state_machine %p scheduling on_complete errors2 %p", s,
|
690
|
+
new_err);
|
691
|
+
fail_helper_locked(exec_ctx, s, GRPC_ERROR_REF(new_err));
|
692
|
+
goto done;
|
693
|
+
}
|
693
694
|
}
|
694
695
|
}
|
695
|
-
if (s->
|
696
|
-
|
697
|
-
|
698
|
-
|
699
|
-
}
|
700
|
-
if (!slice_buffer_list_empty(&s->to_read_message) && s->recv_message_op) {
|
701
|
-
inproc_slice_byte_stream_init(
|
702
|
-
&s->recv_message_stream,
|
703
|
-
slice_buffer_list_pophead(&s->to_read_message));
|
704
|
-
*s->recv_message_op->payload->recv_message.recv_message =
|
705
|
-
&s->recv_message_stream.base;
|
706
|
-
INPROC_LOG(GPR_DEBUG, "read_state_machine %p scheduling message-ready", s);
|
707
|
-
GRPC_CLOSURE_SCHED(
|
708
|
-
exec_ctx, s->recv_message_op->payload->recv_message.recv_message_ready,
|
709
|
-
GRPC_ERROR_NONE);
|
710
|
-
if (s->recv_message_op != s->recv_trailing_md_op) {
|
711
|
-
INPROC_LOG(GPR_DEBUG,
|
712
|
-
"read_state_machine %p scheduling message-on-complete %p", s,
|
713
|
-
new_err);
|
714
|
-
GRPC_CLOSURE_SCHED(exec_ctx, s->recv_message_op->on_complete,
|
715
|
-
GRPC_ERROR_REF(new_err));
|
696
|
+
if (s->recv_message_op) {
|
697
|
+
if (other && other->send_message_op) {
|
698
|
+
message_transfer_locked(exec_ctx, other, s);
|
699
|
+
maybe_schedule_op_closure_locked(exec_ctx, other, GRPC_ERROR_NONE);
|
716
700
|
}
|
717
|
-
|
701
|
+
}
|
702
|
+
if (s->recv_trailing_md_op && s->t->is_client && other &&
|
703
|
+
other->send_message_op) {
|
704
|
+
maybe_schedule_op_closure_locked(exec_ctx, other, GRPC_ERROR_NONE);
|
718
705
|
}
|
719
706
|
if (s->to_read_trailing_md_filled) {
|
720
707
|
if (s->trailing_md_recvd) {
|
@@ -722,38 +709,41 @@ static void read_state_machine(grpc_exec_ctx *exec_ctx, void *arg,
|
|
722
709
|
GRPC_ERROR_CREATE_FROM_STATIC_STRING("Already recvd trailing md");
|
723
710
|
INPROC_LOG(
|
724
711
|
GPR_DEBUG,
|
725
|
-
"
|
712
|
+
"op_state_machine %p scheduling on_complete errors for already "
|
726
713
|
"recvd trailing md %p",
|
727
714
|
s, new_err);
|
728
715
|
fail_helper_locked(exec_ctx, s, GRPC_ERROR_REF(new_err));
|
729
716
|
goto done;
|
730
717
|
}
|
731
|
-
if (s->recv_message_op !=
|
718
|
+
if (s->recv_message_op != nullptr) {
|
732
719
|
// This message needs to be wrapped up because it will never be
|
733
720
|
// satisfied
|
734
|
-
INPROC_LOG(GPR_DEBUG, "
|
735
|
-
s);
|
721
|
+
INPROC_LOG(GPR_DEBUG, "op_state_machine %p scheduling message-ready", s);
|
736
722
|
GRPC_CLOSURE_SCHED(
|
737
723
|
exec_ctx,
|
738
724
|
s->recv_message_op->payload->recv_message.recv_message_ready,
|
739
725
|
GRPC_ERROR_NONE);
|
740
|
-
|
741
|
-
|
742
|
-
|
743
|
-
|
744
|
-
|
745
|
-
|
746
|
-
|
747
|
-
|
726
|
+
complete_if_batch_end_locked(
|
727
|
+
exec_ctx, s, new_err, s->recv_message_op,
|
728
|
+
"op_state_machine scheduling recv-message-on-complete");
|
729
|
+
s->recv_message_op = nullptr;
|
730
|
+
}
|
731
|
+
if ((s->trailing_md_sent || s->t->is_client) && s->send_message_op) {
|
732
|
+
// Nothing further will try to receive from this stream, so finish off
|
733
|
+
// any outstanding send_message op
|
734
|
+
complete_if_batch_end_locked(
|
735
|
+
exec_ctx, s, new_err, s->send_message_op,
|
736
|
+
"op_state_machine scheduling send-message-on-complete");
|
737
|
+
s->send_message_op = nullptr;
|
748
738
|
}
|
749
|
-
if (s->recv_trailing_md_op !=
|
739
|
+
if (s->recv_trailing_md_op != nullptr) {
|
750
740
|
// We wanted trailing metadata and we got it
|
751
741
|
s->trailing_md_recvd = true;
|
752
742
|
new_err =
|
753
743
|
fill_in_metadata(exec_ctx, s, &s->to_read_trailing_md, 0,
|
754
744
|
s->recv_trailing_md_op->payload
|
755
745
|
->recv_trailing_metadata.recv_trailing_metadata,
|
756
|
-
|
746
|
+
nullptr, nullptr);
|
757
747
|
grpc_metadata_batch_clear(exec_ctx, &s->to_read_trailing_md);
|
758
748
|
s->to_read_trailing_md_filled = false;
|
759
749
|
|
@@ -763,77 +753,74 @@ static void read_state_machine(grpc_exec_ctx *exec_ctx, void *arg,
|
|
763
753
|
// (If the server hasn't already sent its trailing md, it doesn't have
|
764
754
|
// a final status, so don't mark this op complete)
|
765
755
|
if (s->t->is_client || s->trailing_md_sent) {
|
766
|
-
INPROC_LOG(
|
767
|
-
|
768
|
-
|
769
|
-
new_err);
|
756
|
+
INPROC_LOG(GPR_DEBUG,
|
757
|
+
"op_state_machine %p scheduling trailing-md-on-complete %p",
|
758
|
+
s, new_err);
|
770
759
|
GRPC_CLOSURE_SCHED(exec_ctx, s->recv_trailing_md_op->on_complete,
|
771
760
|
GRPC_ERROR_REF(new_err));
|
772
|
-
s->recv_trailing_md_op =
|
761
|
+
s->recv_trailing_md_op = nullptr;
|
773
762
|
needs_close = true;
|
774
763
|
} else {
|
775
764
|
INPROC_LOG(GPR_DEBUG,
|
776
|
-
"
|
765
|
+
"op_state_machine %p server needs to delay handling "
|
777
766
|
"trailing-md-on-complete %p",
|
778
767
|
s, new_err);
|
779
768
|
}
|
780
769
|
} else {
|
781
770
|
INPROC_LOG(
|
782
771
|
GPR_DEBUG,
|
783
|
-
"
|
784
|
-
s);
|
772
|
+
"op_state_machine %p has trailing md but not yet waiting for it", s);
|
785
773
|
}
|
786
774
|
}
|
787
775
|
if (s->trailing_md_recvd && s->recv_message_op) {
|
788
776
|
// No further message will come on this stream, so finish off the
|
789
777
|
// recv_message_op
|
790
|
-
INPROC_LOG(GPR_DEBUG, "
|
778
|
+
INPROC_LOG(GPR_DEBUG, "op_state_machine %p scheduling message-ready", s);
|
791
779
|
GRPC_CLOSURE_SCHED(
|
792
780
|
exec_ctx, s->recv_message_op->payload->recv_message.recv_message_ready,
|
793
781
|
GRPC_ERROR_NONE);
|
794
|
-
|
795
|
-
|
796
|
-
|
797
|
-
|
798
|
-
|
799
|
-
|
800
|
-
|
801
|
-
|
782
|
+
complete_if_batch_end_locked(
|
783
|
+
exec_ctx, s, new_err, s->recv_message_op,
|
784
|
+
"op_state_machine scheduling recv-message-on-complete");
|
785
|
+
s->recv_message_op = nullptr;
|
786
|
+
}
|
787
|
+
if (s->trailing_md_recvd && (s->trailing_md_sent || s->t->is_client) &&
|
788
|
+
s->send_message_op) {
|
789
|
+
// Nothing further will try to receive from this stream, so finish off
|
790
|
+
// any outstanding send_message op
|
791
|
+
complete_if_batch_end_locked(
|
792
|
+
exec_ctx, s, new_err, s->send_message_op,
|
793
|
+
"op_state_machine scheduling send-message-on-complete");
|
794
|
+
s->send_message_op = nullptr;
|
802
795
|
}
|
803
|
-
if (s->
|
796
|
+
if (s->send_message_op || s->send_trailing_md_op || s->recv_initial_md_op ||
|
797
|
+
s->recv_message_op || s->recv_trailing_md_op) {
|
804
798
|
// Didn't get the item we wanted so we still need to get
|
805
799
|
// rescheduled
|
806
|
-
INPROC_LOG(
|
807
|
-
|
808
|
-
|
800
|
+
INPROC_LOG(
|
801
|
+
GPR_DEBUG, "op_state_machine %p still needs closure %p %p %p %p %p", s,
|
802
|
+
s->send_message_op, s->send_trailing_md_op, s->recv_initial_md_op,
|
803
|
+
s->recv_message_op, s->recv_trailing_md_op);
|
804
|
+
s->ops_needed = true;
|
809
805
|
}
|
810
806
|
done:
|
811
807
|
if (needs_close) {
|
812
|
-
close_other_side_locked(exec_ctx, s, "
|
808
|
+
close_other_side_locked(exec_ctx, s, "op_state_machine");
|
813
809
|
close_stream_locked(exec_ctx, s);
|
814
810
|
}
|
815
811
|
gpr_mu_unlock(mu);
|
816
812
|
GRPC_ERROR_UNREF(new_err);
|
817
813
|
}
|
818
814
|
|
819
|
-
static
|
820
|
-
|
821
|
-
static bool cancel_stream_locked(grpc_exec_ctx *exec_ctx, inproc_stream *s,
|
822
|
-
grpc_error *error) {
|
815
|
+
static bool cancel_stream_locked(grpc_exec_ctx* exec_ctx, inproc_stream* s,
|
816
|
+
grpc_error* error) {
|
823
817
|
bool ret = false; // was the cancel accepted
|
824
818
|
INPROC_LOG(GPR_DEBUG, "cancel_stream %p with %s", s,
|
825
819
|
grpc_error_string(error));
|
826
820
|
if (s->cancel_self_error == GRPC_ERROR_NONE) {
|
827
821
|
ret = true;
|
828
822
|
s->cancel_self_error = GRPC_ERROR_REF(error);
|
829
|
-
|
830
|
-
if (!s->read_closure_scheduled) {
|
831
|
-
GRPC_CLOSURE_SCHED(exec_ctx, &s->read_closure,
|
832
|
-
GRPC_ERROR_REF(s->cancel_self_error));
|
833
|
-
s->read_closure_scheduled = true;
|
834
|
-
}
|
835
|
-
s->reads_needed = false;
|
836
|
-
}
|
823
|
+
maybe_schedule_op_closure_locked(exec_ctx, s, s->cancel_self_error);
|
837
824
|
// Send trailing md to the other side indicating cancellation, even if we
|
838
825
|
// already have
|
839
826
|
s->trailing_md_sent = true;
|
@@ -841,26 +828,21 @@ static bool cancel_stream_locked(grpc_exec_ctx *exec_ctx, inproc_stream *s,
|
|
841
828
|
grpc_metadata_batch cancel_md;
|
842
829
|
grpc_metadata_batch_init(&cancel_md);
|
843
830
|
|
844
|
-
inproc_stream
|
845
|
-
grpc_metadata_batch
|
846
|
-
|
847
|
-
|
848
|
-
|
849
|
-
|
831
|
+
inproc_stream* other = s->other_side;
|
832
|
+
grpc_metadata_batch* dest = (other == nullptr)
|
833
|
+
? &s->write_buffer_trailing_md
|
834
|
+
: &other->to_read_trailing_md;
|
835
|
+
bool* destfilled = (other == nullptr) ? &s->write_buffer_trailing_md_filled
|
836
|
+
: &other->to_read_trailing_md_filled;
|
837
|
+
fill_in_metadata(exec_ctx, s, &cancel_md, 0, dest, nullptr, destfilled);
|
850
838
|
grpc_metadata_batch_destroy(exec_ctx, &cancel_md);
|
851
839
|
|
852
|
-
if (other !=
|
840
|
+
if (other != nullptr) {
|
853
841
|
if (other->cancel_other_error == GRPC_ERROR_NONE) {
|
854
842
|
other->cancel_other_error = GRPC_ERROR_REF(s->cancel_self_error);
|
855
843
|
}
|
856
|
-
|
857
|
-
|
858
|
-
GRPC_CLOSURE_SCHED(exec_ctx, &other->read_closure,
|
859
|
-
GRPC_ERROR_REF(other->cancel_other_error));
|
860
|
-
other->read_closure_scheduled = true;
|
861
|
-
}
|
862
|
-
other->reads_needed = false;
|
863
|
-
}
|
844
|
+
maybe_schedule_op_closure_locked(exec_ctx, other,
|
845
|
+
other->cancel_other_error);
|
864
846
|
} else if (s->write_buffer_cancel_error == GRPC_ERROR_NONE) {
|
865
847
|
s->write_buffer_cancel_error = GRPC_ERROR_REF(s->cancel_self_error);
|
866
848
|
}
|
@@ -869,12 +851,10 @@ static bool cancel_stream_locked(grpc_exec_ctx *exec_ctx, inproc_stream *s,
|
|
869
851
|
// couldn't complete that because we hadn't yet sent out trailing
|
870
852
|
// md, now's the chance
|
871
853
|
if (!s->t->is_client && s->trailing_md_recvd && s->recv_trailing_md_op) {
|
872
|
-
|
873
|
-
|
874
|
-
|
875
|
-
|
876
|
-
GRPC_ERROR_REF(s->cancel_self_error));
|
877
|
-
s->recv_trailing_md_op = NULL;
|
854
|
+
complete_if_batch_end_locked(
|
855
|
+
exec_ctx, s, s->cancel_self_error, s->recv_trailing_md_op,
|
856
|
+
"cancel_stream scheduling trailing-md-on-complete");
|
857
|
+
s->recv_trailing_md_op = nullptr;
|
878
858
|
}
|
879
859
|
}
|
880
860
|
|
@@ -885,15 +865,15 @@ static bool cancel_stream_locked(grpc_exec_ctx *exec_ctx, inproc_stream *s,
|
|
885
865
|
return ret;
|
886
866
|
}
|
887
867
|
|
888
|
-
static void perform_stream_op(grpc_exec_ctx
|
889
|
-
grpc_stream
|
890
|
-
grpc_transport_stream_op_batch
|
868
|
+
static void perform_stream_op(grpc_exec_ctx* exec_ctx, grpc_transport* gt,
|
869
|
+
grpc_stream* gs,
|
870
|
+
grpc_transport_stream_op_batch* op) {
|
891
871
|
INPROC_LOG(GPR_DEBUG, "perform_stream_op %p %p %p", gt, gs, op);
|
892
|
-
inproc_stream
|
893
|
-
gpr_mu
|
872
|
+
inproc_stream* s = (inproc_stream*)gs;
|
873
|
+
gpr_mu* mu = &s->t->mu->mu; // save aside in case s gets closed
|
894
874
|
gpr_mu_lock(mu);
|
895
875
|
|
896
|
-
if (
|
876
|
+
if (grpc_inproc_trace.enabled()) {
|
897
877
|
if (op->send_initial_metadata) {
|
898
878
|
log_metadata(op->payload->send_initial_metadata.send_initial_metadata,
|
899
879
|
s->t->is_client, true);
|
@@ -903,9 +883,9 @@ static void perform_stream_op(grpc_exec_ctx *exec_ctx, grpc_transport *gt,
|
|
903
883
|
s->t->is_client, false);
|
904
884
|
}
|
905
885
|
}
|
906
|
-
grpc_error
|
907
|
-
grpc_closure
|
908
|
-
if (on_complete ==
|
886
|
+
grpc_error* error = GRPC_ERROR_NONE;
|
887
|
+
grpc_closure* on_complete = op->on_complete;
|
888
|
+
if (on_complete == nullptr) {
|
909
889
|
on_complete = &do_nothing_closure;
|
910
890
|
}
|
911
891
|
|
@@ -918,7 +898,8 @@ static void perform_stream_op(grpc_exec_ctx *exec_ctx, grpc_transport *gt,
|
|
918
898
|
// already self-canceled so still give it an error
|
919
899
|
error = GRPC_ERROR_REF(s->cancel_self_error);
|
920
900
|
} else {
|
921
|
-
INPROC_LOG(GPR_DEBUG, "perform_stream_op %p%s%s%s%s%s%s", s,
|
901
|
+
INPROC_LOG(GPR_DEBUG, "perform_stream_op %p %s%s%s%s%s%s%s", s,
|
902
|
+
s->t->is_client ? "client" : "server",
|
922
903
|
op->send_initial_metadata ? " send_initial_metadata" : "",
|
923
904
|
op->send_message ? " send_message" : "",
|
924
905
|
op->send_trailing_metadata ? " send_trailing_metadata" : "",
|
@@ -929,26 +910,27 @@ static void perform_stream_op(grpc_exec_ctx *exec_ctx, grpc_transport *gt,
|
|
929
910
|
|
930
911
|
bool needs_close = false;
|
931
912
|
|
913
|
+
inproc_stream* other = s->other_side;
|
932
914
|
if (error == GRPC_ERROR_NONE &&
|
933
|
-
(op->send_initial_metadata || op->
|
934
|
-
op->send_trailing_metadata)) {
|
935
|
-
inproc_stream *other = s->other_side;
|
915
|
+
(op->send_initial_metadata || op->send_trailing_metadata)) {
|
936
916
|
if (s->t->is_closed) {
|
937
917
|
error = GRPC_ERROR_CREATE_FROM_STATIC_STRING("Endpoint already shutdown");
|
938
918
|
}
|
939
919
|
if (error == GRPC_ERROR_NONE && op->send_initial_metadata) {
|
940
|
-
grpc_metadata_batch
|
941
|
-
|
942
|
-
|
943
|
-
|
944
|
-
|
945
|
-
|
920
|
+
grpc_metadata_batch* dest = (other == nullptr)
|
921
|
+
? &s->write_buffer_initial_md
|
922
|
+
: &other->to_read_initial_md;
|
923
|
+
uint32_t* destflags = (other == nullptr)
|
924
|
+
? &s->write_buffer_initial_md_flags
|
925
|
+
: &other->to_read_initial_md_flags;
|
926
|
+
bool* destfilled = (other == nullptr) ? &s->write_buffer_initial_md_filled
|
927
|
+
: &other->to_read_initial_md_filled;
|
946
928
|
if (*destfilled || s->initial_md_sent) {
|
947
929
|
// The buffer is already in use; that's an error!
|
948
930
|
INPROC_LOG(GPR_DEBUG, "Extra initial metadata %p", s);
|
949
931
|
error = GRPC_ERROR_CREATE_FROM_STATIC_STRING("Extra initial metadata");
|
950
932
|
} else {
|
951
|
-
if (!other->closed) {
|
933
|
+
if (!other || !other->closed) {
|
952
934
|
fill_in_metadata(
|
953
935
|
exec_ctx, s,
|
954
936
|
op->payload->send_initial_metadata.send_initial_metadata,
|
@@ -956,79 +938,28 @@ static void perform_stream_op(grpc_exec_ctx *exec_ctx, grpc_transport *gt,
|
|
956
938
|
dest, destflags, destfilled);
|
957
939
|
}
|
958
940
|
if (s->t->is_client) {
|
959
|
-
|
960
|
-
(other ==
|
961
|
-
*dl =
|
962
|
-
|
941
|
+
grpc_millis* dl =
|
942
|
+
(other == nullptr) ? &s->write_buffer_deadline : &other->deadline;
|
943
|
+
*dl = GPR_MIN(*dl, op->payload->send_initial_metadata
|
944
|
+
.send_initial_metadata->deadline);
|
963
945
|
s->initial_md_sent = true;
|
964
946
|
}
|
965
947
|
}
|
966
|
-
|
967
|
-
if (error == GRPC_ERROR_NONE && op->send_message) {
|
968
|
-
size_t remaining = op->payload->send_message.send_message->length;
|
969
|
-
grpc_slice_buffer *dest = slice_buffer_list_append(
|
970
|
-
(other == NULL) ? &s->write_buffer_message : &other->to_read_message);
|
971
|
-
do {
|
972
|
-
grpc_slice message_slice;
|
973
|
-
grpc_closure unused;
|
974
|
-
GPR_ASSERT(grpc_byte_stream_next(exec_ctx,
|
975
|
-
op->payload->send_message.send_message,
|
976
|
-
SIZE_MAX, &unused));
|
977
|
-
error = grpc_byte_stream_pull(
|
978
|
-
exec_ctx, op->payload->send_message.send_message, &message_slice);
|
979
|
-
if (error != GRPC_ERROR_NONE) {
|
980
|
-
cancel_stream_locked(exec_ctx, s, GRPC_ERROR_REF(error));
|
981
|
-
break;
|
982
|
-
}
|
983
|
-
GPR_ASSERT(error == GRPC_ERROR_NONE);
|
984
|
-
remaining -= GRPC_SLICE_LENGTH(message_slice);
|
985
|
-
grpc_slice_buffer_add(dest, message_slice);
|
986
|
-
} while (remaining != 0);
|
987
|
-
grpc_byte_stream_destroy(exec_ctx,
|
988
|
-
op->payload->send_message.send_message);
|
989
|
-
}
|
990
|
-
if (error == GRPC_ERROR_NONE && op->send_trailing_metadata) {
|
991
|
-
grpc_metadata_batch *dest = (other == NULL) ? &s->write_buffer_trailing_md
|
992
|
-
: &other->to_read_trailing_md;
|
993
|
-
bool *destfilled = (other == NULL) ? &s->write_buffer_trailing_md_filled
|
994
|
-
: &other->to_read_trailing_md_filled;
|
995
|
-
if (*destfilled || s->trailing_md_sent) {
|
996
|
-
// The buffer is already in use; that's an error!
|
997
|
-
INPROC_LOG(GPR_DEBUG, "Extra trailing metadata %p", s);
|
998
|
-
error = GRPC_ERROR_CREATE_FROM_STATIC_STRING("Extra trailing metadata");
|
999
|
-
} else {
|
1000
|
-
if (!other->closed) {
|
1001
|
-
fill_in_metadata(
|
1002
|
-
exec_ctx, s,
|
1003
|
-
op->payload->send_trailing_metadata.send_trailing_metadata, 0,
|
1004
|
-
dest, NULL, destfilled);
|
1005
|
-
}
|
1006
|
-
s->trailing_md_sent = true;
|
1007
|
-
if (!s->t->is_client && s->trailing_md_recvd &&
|
1008
|
-
s->recv_trailing_md_op) {
|
1009
|
-
INPROC_LOG(GPR_DEBUG,
|
1010
|
-
"perform_stream_op %p scheduling trailing-md-on-complete",
|
1011
|
-
s);
|
1012
|
-
GRPC_CLOSURE_SCHED(exec_ctx, s->recv_trailing_md_op->on_complete,
|
1013
|
-
GRPC_ERROR_NONE);
|
1014
|
-
s->recv_trailing_md_op = NULL;
|
1015
|
-
needs_close = true;
|
1016
|
-
}
|
1017
|
-
}
|
1018
|
-
}
|
1019
|
-
if (other != NULL && other->reads_needed) {
|
1020
|
-
if (!other->read_closure_scheduled) {
|
1021
|
-
GRPC_CLOSURE_SCHED(exec_ctx, &other->read_closure, error);
|
1022
|
-
other->read_closure_scheduled = true;
|
1023
|
-
}
|
1024
|
-
other->reads_needed = false;
|
948
|
+
maybe_schedule_op_closure_locked(exec_ctx, other, error);
|
1025
949
|
}
|
1026
950
|
}
|
951
|
+
|
1027
952
|
if (error == GRPC_ERROR_NONE &&
|
1028
|
-
(op->
|
953
|
+
(op->send_message || op->send_trailing_metadata ||
|
954
|
+
op->recv_initial_metadata || op->recv_message ||
|
1029
955
|
op->recv_trailing_metadata)) {
|
1030
|
-
//
|
1031
|
-
|
956
|
+
// Mark ops that need to be processed by the closure
|
957
|
+
if (op->send_message) {
|
958
|
+
s->send_message_op = op;
|
959
|
+
}
|
960
|
+
if (op->send_trailing_metadata) {
|
961
|
+
s->send_trailing_md_op = op;
|
962
|
+
}
|
1032
963
|
if (op->recv_initial_metadata) {
|
1033
964
|
s->recv_initial_md_op = op;
|
1034
965
|
}
|
@@ -1040,25 +971,29 @@ static void perform_stream_op(grpc_exec_ctx *exec_ctx, grpc_transport *gt,
|
|
1040
971
|
}
|
1041
972
|
|
1042
973
|
// We want to initiate the closure if:
|
1043
|
-
// 1.
|
1044
|
-
// 2.
|
1045
|
-
// 3.
|
1046
|
-
//
|
1047
|
-
if
|
1048
|
-
|
1049
|
-
|
1050
|
-
|
1051
|
-
|
1052
|
-
|
1053
|
-
|
1054
|
-
|
974
|
+
// 1. We want to send a message and the other side wants to receive or end
|
975
|
+
// 2. We want to send trailing metadata and there isn't an unmatched send
|
976
|
+
// 3. We want initial metadata and the other side has sent it
|
977
|
+
// 4. We want to receive a message and there is a message ready
|
978
|
+
// 5. There is trailing metadata, even if nothing specifically wants
|
979
|
+
// that because that can shut down the receive message as well
|
980
|
+
if ((op->send_message && other &&
|
981
|
+
((other->recv_message_op != nullptr) ||
|
982
|
+
(other->recv_trailing_md_op != nullptr))) ||
|
983
|
+
(op->send_trailing_metadata && !op->send_message) ||
|
984
|
+
(op->recv_initial_metadata && s->to_read_initial_md_filled) ||
|
985
|
+
(op->recv_message && other && (other->send_message_op != nullptr)) ||
|
986
|
+
(s->to_read_trailing_md_filled || s->trailing_md_recvd)) {
|
987
|
+
if (!s->op_closure_scheduled) {
|
988
|
+
GRPC_CLOSURE_SCHED(exec_ctx, &s->op_closure, GRPC_ERROR_NONE);
|
989
|
+
s->op_closure_scheduled = true;
|
1055
990
|
}
|
1056
991
|
} else {
|
1057
|
-
s->
|
992
|
+
s->ops_needed = true;
|
1058
993
|
}
|
1059
994
|
} else {
|
1060
995
|
if (error != GRPC_ERROR_NONE) {
|
1061
|
-
// Schedule op's
|
996
|
+
// Schedule op's closures that we didn't push to op state machine
|
1062
997
|
if (op->recv_initial_metadata) {
|
1063
998
|
INPROC_LOG(
|
1064
999
|
GPR_DEBUG,
|
@@ -1091,8 +1026,8 @@ static void perform_stream_op(grpc_exec_ctx *exec_ctx, grpc_transport *gt,
|
|
1091
1026
|
GRPC_ERROR_UNREF(error);
|
1092
1027
|
}
|
1093
1028
|
|
1094
|
-
static void close_transport_locked(grpc_exec_ctx
|
1095
|
-
inproc_transport
|
1029
|
+
static void close_transport_locked(grpc_exec_ctx* exec_ctx,
|
1030
|
+
inproc_transport* t) {
|
1096
1031
|
INPROC_LOG(GPR_DEBUG, "close_transport %p %d", t, t->is_closed);
|
1097
1032
|
grpc_connectivity_state_set(
|
1098
1033
|
exec_ctx, &t->connectivity, GRPC_CHANNEL_SHUTDOWN,
|
@@ -1101,7 +1036,7 @@ static void close_transport_locked(grpc_exec_ctx *exec_ctx,
|
|
1101
1036
|
if (!t->is_closed) {
|
1102
1037
|
t->is_closed = true;
|
1103
1038
|
/* Also end all streams on this transport */
|
1104
|
-
while (t->stream_list !=
|
1039
|
+
while (t->stream_list != nullptr) {
|
1105
1040
|
// cancel_stream_locked also adjusts stream list
|
1106
1041
|
cancel_stream_locked(
|
1107
1042
|
exec_ctx, t->stream_list,
|
@@ -1112,9 +1047,9 @@ static void close_transport_locked(grpc_exec_ctx *exec_ctx,
|
|
1112
1047
|
}
|
1113
1048
|
}
|
1114
1049
|
|
1115
|
-
static void perform_transport_op(grpc_exec_ctx
|
1116
|
-
grpc_transport_op
|
1117
|
-
inproc_transport
|
1050
|
+
static void perform_transport_op(grpc_exec_ctx* exec_ctx, grpc_transport* gt,
|
1051
|
+
grpc_transport_op* op) {
|
1052
|
+
inproc_transport* t = (inproc_transport*)gt;
|
1118
1053
|
INPROC_LOG(GPR_DEBUG, "perform_transport_op %p %p", t, op);
|
1119
1054
|
gpr_mu_lock(&t->mu->mu);
|
1120
1055
|
if (op->on_connectivity_state_change) {
|
@@ -1146,17 +1081,17 @@ static void perform_transport_op(grpc_exec_ctx *exec_ctx, grpc_transport *gt,
|
|
1146
1081
|
gpr_mu_unlock(&t->mu->mu);
|
1147
1082
|
}
|
1148
1083
|
|
1149
|
-
static void destroy_stream(grpc_exec_ctx
|
1150
|
-
grpc_stream
|
1151
|
-
grpc_closure
|
1084
|
+
static void destroy_stream(grpc_exec_ctx* exec_ctx, grpc_transport* gt,
|
1085
|
+
grpc_stream* gs,
|
1086
|
+
grpc_closure* then_schedule_closure) {
|
1152
1087
|
INPROC_LOG(GPR_DEBUG, "destroy_stream %p %p", gs, then_schedule_closure);
|
1153
|
-
inproc_stream
|
1088
|
+
inproc_stream* s = (inproc_stream*)gs;
|
1154
1089
|
s->closure_at_destroy = then_schedule_closure;
|
1155
1090
|
really_destroy_stream(exec_ctx, s);
|
1156
1091
|
}
|
1157
1092
|
|
1158
|
-
static void destroy_transport(grpc_exec_ctx
|
1159
|
-
inproc_transport
|
1093
|
+
static void destroy_transport(grpc_exec_ctx* exec_ctx, grpc_transport* gt) {
|
1094
|
+
inproc_transport* t = (inproc_transport*)gt;
|
1160
1095
|
INPROC_LOG(GPR_DEBUG, "destroy_transport %p", t);
|
1161
1096
|
gpr_mu_lock(&t->mu->mu);
|
1162
1097
|
close_transport_locked(exec_ctx, t);
|
@@ -1169,30 +1104,30 @@ static void destroy_transport(grpc_exec_ctx *exec_ctx, grpc_transport *gt) {
|
|
1169
1104
|
* INTEGRATION GLUE
|
1170
1105
|
*/
|
1171
1106
|
|
1172
|
-
static void set_pollset(grpc_exec_ctx
|
1173
|
-
grpc_stream
|
1107
|
+
static void set_pollset(grpc_exec_ctx* exec_ctx, grpc_transport* gt,
|
1108
|
+
grpc_stream* gs, grpc_pollset* pollset) {
|
1174
1109
|
// Nothing to do here
|
1175
1110
|
}
|
1176
1111
|
|
1177
|
-
static void set_pollset_set(grpc_exec_ctx
|
1178
|
-
grpc_stream
|
1112
|
+
static void set_pollset_set(grpc_exec_ctx* exec_ctx, grpc_transport* gt,
|
1113
|
+
grpc_stream* gs, grpc_pollset_set* pollset_set) {
|
1179
1114
|
// Nothing to do here
|
1180
1115
|
}
|
1181
1116
|
|
1182
|
-
static grpc_endpoint
|
1183
|
-
return
|
1117
|
+
static grpc_endpoint* get_endpoint(grpc_exec_ctx* exec_ctx, grpc_transport* t) {
|
1118
|
+
return nullptr;
|
1184
1119
|
}
|
1185
1120
|
|
1186
1121
|
/*******************************************************************************
|
1187
1122
|
* GLOBAL INIT AND DESTROY
|
1188
1123
|
*/
|
1189
|
-
static void do_nothing(grpc_exec_ctx
|
1124
|
+
static void do_nothing(grpc_exec_ctx* exec_ctx, void* arg, grpc_error* error) {}
|
1190
1125
|
|
1191
1126
|
void grpc_inproc_transport_init(void) {
|
1192
1127
|
grpc_exec_ctx exec_ctx = GRPC_EXEC_CTX_INIT;
|
1193
|
-
GRPC_CLOSURE_INIT(&do_nothing_closure, do_nothing,
|
1128
|
+
GRPC_CLOSURE_INIT(&do_nothing_closure, do_nothing, nullptr,
|
1194
1129
|
grpc_schedule_on_exec_ctx);
|
1195
|
-
g_empty_slice = grpc_slice_from_static_buffer(
|
1130
|
+
g_empty_slice = grpc_slice_from_static_buffer(nullptr, 0);
|
1196
1131
|
|
1197
1132
|
grpc_slice key_tmp = grpc_slice_from_static_string(":path");
|
1198
1133
|
g_fake_path_key = grpc_slice_intern(key_tmp);
|
@@ -1217,16 +1152,16 @@ static const grpc_transport_vtable inproc_vtable = {
|
|
1217
1152
|
/*******************************************************************************
|
1218
1153
|
* Main inproc transport functions
|
1219
1154
|
*/
|
1220
|
-
static void inproc_transports_create(grpc_exec_ctx
|
1221
|
-
grpc_transport
|
1222
|
-
const grpc_channel_args
|
1223
|
-
grpc_transport
|
1224
|
-
const grpc_channel_args
|
1155
|
+
static void inproc_transports_create(grpc_exec_ctx* exec_ctx,
|
1156
|
+
grpc_transport** server_transport,
|
1157
|
+
const grpc_channel_args* server_args,
|
1158
|
+
grpc_transport** client_transport,
|
1159
|
+
const grpc_channel_args* client_args) {
|
1225
1160
|
INPROC_LOG(GPR_DEBUG, "inproc_transports_create");
|
1226
|
-
inproc_transport
|
1227
|
-
inproc_transport
|
1161
|
+
inproc_transport* st = (inproc_transport*)gpr_zalloc(sizeof(*st));
|
1162
|
+
inproc_transport* ct = (inproc_transport*)gpr_zalloc(sizeof(*ct));
|
1228
1163
|
// Share one lock between both sides since both sides get affected
|
1229
|
-
st->mu = ct->mu = (shared_mu
|
1164
|
+
st->mu = ct->mu = (shared_mu*)gpr_malloc(sizeof(*st->mu));
|
1230
1165
|
gpr_mu_init(&st->mu->mu);
|
1231
1166
|
gpr_ref_init(&st->mu->refs, 2);
|
1232
1167
|
st->base.vtable = &inproc_vtable;
|
@@ -1243,39 +1178,39 @@ static void inproc_transports_create(grpc_exec_ctx *exec_ctx,
|
|
1243
1178
|
"inproc_client");
|
1244
1179
|
st->other_side = ct;
|
1245
1180
|
ct->other_side = st;
|
1246
|
-
st->stream_list =
|
1247
|
-
ct->stream_list =
|
1248
|
-
*server_transport = (grpc_transport
|
1249
|
-
*client_transport = (grpc_transport
|
1181
|
+
st->stream_list = nullptr;
|
1182
|
+
ct->stream_list = nullptr;
|
1183
|
+
*server_transport = (grpc_transport*)st;
|
1184
|
+
*client_transport = (grpc_transport*)ct;
|
1250
1185
|
}
|
1251
1186
|
|
1252
|
-
grpc_channel
|
1253
|
-
grpc_channel_args
|
1254
|
-
void
|
1187
|
+
grpc_channel* grpc_inproc_channel_create(grpc_server* server,
|
1188
|
+
grpc_channel_args* args,
|
1189
|
+
void* reserved) {
|
1255
1190
|
GRPC_API_TRACE("grpc_inproc_channel_create(server=%p, args=%p)", 2,
|
1256
1191
|
(server, args));
|
1257
1192
|
|
1258
1193
|
grpc_exec_ctx exec_ctx = GRPC_EXEC_CTX_INIT;
|
1259
1194
|
|
1260
|
-
const grpc_channel_args
|
1195
|
+
const grpc_channel_args* server_args = grpc_server_get_channel_args(server);
|
1261
1196
|
|
1262
1197
|
// Add a default authority channel argument for the client
|
1263
1198
|
|
1264
1199
|
grpc_arg default_authority_arg;
|
1265
1200
|
default_authority_arg.type = GRPC_ARG_STRING;
|
1266
|
-
default_authority_arg.key = (char
|
1267
|
-
default_authority_arg.value.string = (char
|
1268
|
-
grpc_channel_args
|
1201
|
+
default_authority_arg.key = (char*)GRPC_ARG_DEFAULT_AUTHORITY;
|
1202
|
+
default_authority_arg.value.string = (char*)"inproc.authority";
|
1203
|
+
grpc_channel_args* client_args =
|
1269
1204
|
grpc_channel_args_copy_and_add(args, &default_authority_arg, 1);
|
1270
1205
|
|
1271
|
-
grpc_transport
|
1272
|
-
grpc_transport
|
1206
|
+
grpc_transport* server_transport;
|
1207
|
+
grpc_transport* client_transport;
|
1273
1208
|
inproc_transports_create(&exec_ctx, &server_transport, server_args,
|
1274
1209
|
&client_transport, client_args);
|
1275
1210
|
|
1276
|
-
grpc_server_setup_transport(&exec_ctx, server, server_transport,
|
1211
|
+
grpc_server_setup_transport(&exec_ctx, server, server_transport, nullptr,
|
1277
1212
|
server_args);
|
1278
|
-
grpc_channel
|
1213
|
+
grpc_channel* channel =
|
1279
1214
|
grpc_channel_create(&exec_ctx, "inproc", client_args,
|
1280
1215
|
GRPC_CLIENT_DIRECT_CHANNEL, client_transport);
|
1281
1216
|
|