grpc 1.8.7 → 1.9.0.pre1
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 +549 -325
- data/include/grpc/impl/codegen/grpc_types.h +1 -2
- data/include/grpc/impl/codegen/port_platform.h +46 -5
- data/include/grpc/impl/codegen/slice.h +1 -2
- data/include/grpc/module.modulemap +0 -2
- data/include/grpc/slice_buffer.h +1 -2
- data/include/grpc/support/log.h +4 -2
- data/include/grpc/support/thd.h +4 -1
- data/include/grpc/support/tls.h +6 -0
- data/include/grpc/support/tls_gcc.h +5 -40
- data/include/grpc/support/tls_msvc.h +9 -0
- data/include/grpc/support/tls_pthread.h +9 -0
- data/src/core/ext/filters/client_channel/backup_poller.cc +32 -29
- data/src/core/ext/filters/client_channel/backup_poller.h +2 -2
- data/src/core/ext/filters/client_channel/channel_connectivity.cc +26 -32
- data/src/core/ext/filters/client_channel/client_channel.cc +325 -356
- data/src/core/ext/filters/client_channel/client_channel.h +4 -12
- data/src/core/ext/filters/client_channel/client_channel_factory.cc +9 -14
- data/src/core/ext/filters/client_channel/client_channel_factory.h +7 -20
- data/src/core/ext/filters/client_channel/client_channel_plugin.cc +7 -10
- data/src/core/ext/filters/client_channel/connector.cc +6 -7
- data/src/core/ext/filters/client_channel/connector.h +6 -16
- data/src/core/ext/filters/client_channel/http_connect_handshaker.cc +38 -50
- data/src/core/ext/filters/client_channel/http_connect_handshaker.h +0 -8
- data/src/core/ext/filters/client_channel/http_proxy.cc +9 -13
- data/src/core/ext/filters/client_channel/http_proxy.h +0 -8
- data/src/core/ext/filters/client_channel/lb_policy.cc +72 -94
- data/src/core/ext/filters/client_channel/lb_policy.h +83 -92
- data/src/core/ext/filters/client_channel/lb_policy/grpclb/client_load_reporting_filter.cc +14 -19
- data/src/core/ext/filters/client_channel/lb_policy/grpclb/client_load_reporting_filter.h +0 -8
- data/src/core/ext/filters/client_channel/lb_policy/grpclb/grpclb.cc +474 -591
- data/src/core/ext/filters/client_channel/lb_policy/grpclb/grpclb.h +0 -8
- data/src/core/ext/filters/client_channel/lb_policy/grpclb/grpclb_channel.h +2 -10
- data/src/core/ext/filters/client_channel/lb_policy/grpclb/grpclb_channel_secure.cc +6 -6
- data/src/core/ext/filters/client_channel/lb_policy/grpclb/grpclb_client_stats.h +0 -8
- data/src/core/ext/filters/client_channel/lb_policy/grpclb/load_balancer_api.cc +0 -9
- data/src/core/ext/filters/client_channel/lb_policy/grpclb/load_balancer_api.h +0 -9
- data/src/core/ext/filters/client_channel/lb_policy/grpclb/proto/grpc/lb/v1/load_balancer.pb.c +3 -4
- data/src/core/ext/filters/client_channel/lb_policy/grpclb/proto/grpc/lb/v1/load_balancer.pb.h +9 -12
- data/src/core/ext/filters/client_channel/lb_policy/pick_first/pick_first.cc +160 -182
- data/src/core/ext/filters/client_channel/lb_policy/round_robin/round_robin.cc +182 -221
- data/src/core/ext/filters/client_channel/lb_policy/subchannel_list.cc +24 -35
- data/src/core/ext/filters/client_channel/lb_policy/subchannel_list.h +9 -20
- data/src/core/ext/filters/client_channel/lb_policy_factory.cc +6 -9
- data/src/core/ext/filters/client_channel/lb_policy_factory.h +4 -15
- data/src/core/ext/filters/client_channel/lb_policy_registry.cc +3 -3
- data/src/core/ext/filters/client_channel/lb_policy_registry.h +1 -9
- data/src/core/ext/filters/client_channel/parse_address.cc +1 -1
- data/src/core/ext/filters/client_channel/parse_address.h +0 -8
- data/src/core/ext/filters/client_channel/proxy_mapper.cc +6 -8
- data/src/core/ext/filters/client_channel/proxy_mapper.h +6 -16
- data/src/core/ext/filters/client_channel/proxy_mapper_registry.cc +13 -17
- data/src/core/ext/filters/client_channel/proxy_mapper_registry.h +2 -12
- data/src/core/ext/filters/client_channel/resolver.cc +11 -13
- data/src/core/ext/filters/client_channel/resolver.h +14 -25
- data/src/core/ext/filters/client_channel/resolver/dns/c_ares/dns_resolver_ares.cc +57 -70
- data/src/core/ext/filters/client_channel/resolver/dns/c_ares/grpc_ares_ev_driver.h +2 -12
- data/src/core/ext/filters/client_channel/resolver/dns/c_ares/grpc_ares_ev_driver_posix.cc +23 -31
- data/src/core/ext/filters/client_channel/resolver/dns/c_ares/grpc_ares_wrapper.cc +27 -45
- data/src/core/ext/filters/client_channel/resolver/dns/c_ares/grpc_ares_wrapper.h +5 -15
- data/src/core/ext/filters/client_channel/resolver/dns/c_ares/grpc_ares_wrapper_fallback.cc +9 -11
- data/src/core/ext/filters/client_channel/resolver/dns/native/dns_resolver.cc +53 -66
- data/src/core/ext/filters/client_channel/resolver/fake/fake_resolver.cc +25 -33
- data/src/core/ext/filters/client_channel/resolver/fake/fake_resolver.h +1 -9
- data/src/core/ext/filters/client_channel/resolver/sockaddr/sockaddr_resolver.cc +26 -35
- data/src/core/ext/filters/client_channel/resolver_factory.cc +2 -3
- data/src/core/ext/filters/client_channel/resolver_factory.h +2 -12
- data/src/core/ext/filters/client_channel/resolver_registry.cc +12 -15
- data/src/core/ext/filters/client_channel/resolver_registry.h +3 -12
- data/src/core/ext/filters/client_channel/retry_throttle.h +0 -8
- data/src/core/ext/filters/client_channel/subchannel.cc +289 -301
- data/src/core/ext/filters/client_channel/subchannel.h +57 -84
- data/src/core/ext/filters/client_channel/subchannel_index.cc +30 -33
- data/src/core/ext/filters/client_channel/subchannel_index.h +4 -16
- data/src/core/ext/filters/client_channel/uri_parser.cc +13 -17
- data/src/core/ext/filters/client_channel/uri_parser.h +1 -10
- data/src/core/ext/filters/deadline/deadline_filter.cc +49 -67
- data/src/core/ext/filters/deadline/deadline_filter.h +4 -14
- data/src/core/ext/filters/http/client/http_client_filter.cc +60 -77
- data/src/core/ext/filters/http/client/http_client_filter.h +0 -8
- data/src/core/ext/filters/http/http_filters_plugin.cc +4 -6
- data/src/core/ext/filters/http/message_compress/message_compress_filter.cc +63 -79
- data/src/core/ext/filters/http/message_compress/message_compress_filter.h +0 -8
- data/src/core/ext/filters/http/server/http_server_filter.cc +57 -71
- data/src/core/ext/filters/http/server/http_server_filter.h +0 -8
- data/src/core/ext/filters/load_reporting/server_load_reporting_filter.cc +19 -24
- data/src/core/ext/filters/load_reporting/server_load_reporting_filter.h +0 -8
- data/src/core/ext/filters/load_reporting/server_load_reporting_plugin.cc +3 -3
- data/src/core/ext/filters/load_reporting/server_load_reporting_plugin.h +0 -8
- data/src/core/ext/filters/max_age/max_age_filter.cc +49 -62
- data/src/core/ext/filters/max_age/max_age_filter.h +0 -8
- data/src/core/ext/filters/message_size/message_size_filter.cc +23 -29
- data/src/core/ext/filters/message_size/message_size_filter.h +0 -8
- data/src/core/ext/filters/workarounds/workaround_cronet_compression_filter.cc +15 -18
- data/src/core/ext/filters/workarounds/workaround_cronet_compression_filter.h +0 -8
- data/src/core/ext/filters/workarounds/workaround_utils.h +0 -8
- data/src/core/ext/transport/chttp2/alpn/alpn.h +0 -8
- data/src/core/ext/transport/chttp2/client/chttp2_connector.cc +33 -40
- data/src/core/ext/transport/chttp2/client/chttp2_connector.h +0 -8
- data/src/core/ext/transport/chttp2/client/insecure/channel_create.cc +15 -17
- data/src/core/ext/transport/chttp2/client/insecure/channel_create_posix.cc +8 -8
- data/src/core/ext/transport/chttp2/client/secure/secure_channel_create.cc +23 -28
- data/src/core/ext/transport/chttp2/server/chttp2_server.cc +50 -57
- data/src/core/ext/transport/chttp2/server/chttp2_server.h +1 -10
- data/src/core/ext/transport/chttp2/server/insecure/server_chttp2.cc +3 -3
- data/src/core/ext/transport/chttp2/server/insecure/server_chttp2_posix.cc +7 -10
- data/src/core/ext/transport/chttp2/server/secure/server_secure_chttp2.cc +5 -6
- data/src/core/ext/transport/chttp2/transport/bin_decoder.cc +7 -9
- data/src/core/ext/transport/chttp2/transport/bin_decoder.h +2 -11
- data/src/core/ext/transport/chttp2/transport/bin_encoder.h +1 -9
- data/src/core/ext/transport/chttp2/transport/chttp2_plugin.cc +10 -2
- data/src/core/ext/transport/chttp2/transport/chttp2_transport.cc +516 -636
- data/src/core/ext/transport/chttp2/transport/chttp2_transport.h +4 -11
- data/src/core/ext/transport/chttp2/transport/flow_control.cc +29 -13
- data/src/core/ext/transport/chttp2/transport/flow_control.h +196 -53
- data/src/core/ext/transport/chttp2/transport/frame.h +0 -8
- data/src/core/ext/transport/chttp2/transport/frame_data.cc +31 -33
- data/src/core/ext/transport/chttp2/transport/frame_data.h +3 -12
- data/src/core/ext/transport/chttp2/transport/frame_goaway.cc +2 -3
- data/src/core/ext/transport/chttp2/transport/frame_goaway.h +1 -10
- data/src/core/ext/transport/chttp2/transport/frame_ping.cc +5 -6
- data/src/core/ext/transport/chttp2/transport/frame_ping.h +1 -9
- data/src/core/ext/transport/chttp2/transport/frame_rst_stream.cc +2 -3
- data/src/core/ext/transport/chttp2/transport/frame_rst_stream.h +1 -10
- data/src/core/ext/transport/chttp2/transport/frame_settings.cc +8 -3
- data/src/core/ext/transport/chttp2/transport/frame_settings.h +1 -10
- data/src/core/ext/transport/chttp2/transport/frame_window_update.cc +8 -8
- data/src/core/ext/transport/chttp2/transport/frame_window_update.h +5 -11
- data/src/core/ext/transport/chttp2/transport/hpack_encoder.cc +63 -81
- data/src/core/ext/transport/chttp2/transport/hpack_encoder.h +2 -12
- data/src/core/ext/transport/chttp2/transport/hpack_parser.cc +230 -318
- data/src/core/ext/transport/chttp2/transport/hpack_parser.h +6 -19
- data/src/core/ext/transport/chttp2/transport/hpack_table.cc +14 -20
- data/src/core/ext/transport/chttp2/transport/hpack_table.h +5 -16
- data/src/core/ext/transport/chttp2/transport/http2_settings.h +0 -7
- data/src/core/ext/transport/chttp2/transport/huffsyms.h +0 -8
- data/src/core/ext/transport/chttp2/transport/incoming_metadata.cc +8 -11
- data/src/core/ext/transport/chttp2/transport/incoming_metadata.h +4 -13
- data/src/core/ext/transport/chttp2/transport/internal.h +51 -75
- data/src/core/ext/transport/chttp2/transport/parsing.cc +83 -109
- data/src/core/ext/transport/chttp2/transport/stream_lists.cc +2 -0
- data/src/core/ext/transport/chttp2/transport/stream_map.h +0 -8
- data/src/core/ext/transport/chttp2/transport/varint.h +0 -8
- data/src/core/ext/transport/chttp2/transport/writing.cc +61 -65
- data/src/core/ext/transport/inproc/inproc_plugin.cc +2 -4
- data/src/core/ext/transport/inproc/inproc_transport.cc +177 -188
- data/src/core/ext/transport/inproc/inproc_transport.h +0 -8
- data/src/core/lib/backoff/backoff.cc +39 -44
- data/src/core/lib/backoff/backoff.h +61 -57
- data/src/core/lib/channel/channel_args.cc +8 -10
- data/src/core/lib/channel/channel_args.h +4 -13
- data/src/core/lib/channel/channel_stack.cc +19 -27
- data/src/core/lib/channel/channel_stack.h +27 -47
- data/src/core/lib/channel/channel_stack_builder.cc +11 -14
- data/src/core/lib/channel/channel_stack_builder.h +4 -15
- data/src/core/lib/channel/connected_channel.cc +23 -36
- data/src/core/lib/channel/connected_channel.h +1 -10
- data/src/core/lib/channel/handshaker.cc +31 -40
- data/src/core/lib/channel/handshaker.h +14 -25
- data/src/core/lib/channel/handshaker_factory.cc +6 -6
- data/src/core/lib/channel/handshaker_factory.h +5 -15
- data/src/core/lib/channel/handshaker_registry.cc +9 -13
- data/src/core/lib/channel/handshaker_registry.h +2 -11
- data/src/core/lib/compression/algorithm_metadata.h +0 -8
- data/src/core/lib/compression/message_compress.cc +19 -23
- data/src/core/lib/compression/message_compress.h +2 -12
- data/src/core/lib/compression/stream_compression.cc +1 -1
- data/src/core/lib/compression/stream_compression.h +0 -8
- data/src/core/lib/compression/stream_compression_gzip.cc +12 -11
- data/src/core/lib/compression/stream_compression_gzip.h +0 -8
- data/src/core/lib/compression/stream_compression_identity.h +0 -8
- data/src/core/lib/debug/stats.cc +4 -4
- data/src/core/lib/debug/stats.h +9 -19
- data/src/core/lib/debug/stats_data.cc +85 -116
- data/src/core/lib/debug/stats_data.h +236 -312
- data/src/core/lib/debug/trace.cc +1 -1
- data/src/core/lib/debug/trace.h +0 -12
- data/src/core/lib/{support → gpr++}/abstract.h +8 -3
- data/src/core/lib/{support → gpr++}/atomic.h +5 -5
- data/src/core/lib/{support → gpr++}/atomic_with_atm.h +3 -3
- data/src/core/lib/{support → gpr++}/atomic_with_std.h +3 -3
- data/src/core/lib/gpr++/debug_location.h +52 -0
- data/src/core/lib/gpr++/inlined_vector.h +112 -0
- data/src/core/lib/{support → gpr++}/manual_constructor.h +2 -2
- data/src/core/lib/{support → gpr++}/memory.h +3 -3
- data/src/core/lib/gpr++/orphanable.h +171 -0
- data/src/core/lib/gpr++/ref_counted.h +133 -0
- data/src/core/lib/gpr++/ref_counted_ptr.h +99 -0
- data/src/core/lib/{support → gpr}/alloc.cc +0 -0
- data/src/core/lib/{support → gpr}/arena.cc +1 -1
- data/src/core/lib/{support → gpr}/arena.h +3 -11
- data/src/core/lib/{support → gpr}/atm.cc +0 -0
- data/src/core/lib/{support → gpr}/avl.cc +0 -0
- data/src/core/lib/{support → gpr}/cmdline.cc +1 -1
- data/src/core/lib/{support → gpr}/cpu_iphone.cc +0 -0
- data/src/core/lib/{support → gpr}/cpu_linux.cc +0 -0
- data/src/core/lib/{support → gpr}/cpu_posix.cc +0 -0
- data/src/core/lib/{support → gpr}/cpu_windows.cc +0 -0
- data/src/core/lib/{support → gpr}/env.h +3 -11
- data/src/core/lib/{support → gpr}/env_linux.cc +2 -2
- data/src/core/lib/{support → gpr}/env_posix.cc +4 -4
- data/src/core/lib/{support → gpr}/env_windows.cc +3 -3
- data/src/core/lib/{support → gpr}/fork.cc +3 -3
- data/src/core/lib/{support → gpr}/fork.h +3 -3
- data/src/core/lib/{support → gpr}/host_port.cc +1 -1
- data/src/core/lib/{support → gpr}/log.cc +3 -3
- data/src/core/lib/{support → gpr}/log_android.cc +3 -3
- data/src/core/lib/{support → gpr}/log_linux.cc +1 -1
- data/src/core/lib/{support → gpr}/log_posix.cc +5 -5
- data/src/core/lib/{support → gpr}/log_windows.cc +3 -3
- data/src/core/lib/{support → gpr}/mpscq.cc +1 -1
- data/src/core/lib/{support → gpr}/mpscq.h +3 -10
- data/src/core/lib/{support → gpr}/murmur_hash.cc +1 -1
- data/src/core/lib/{support → gpr}/murmur_hash.h +3 -11
- data/src/core/lib/{support → gpr}/spinlock.h +3 -3
- data/src/core/lib/{support → gpr}/string.cc +1 -1
- data/src/core/lib/{support → gpr}/string.h +3 -10
- data/src/core/lib/{support → gpr}/string_posix.cc +0 -0
- data/src/core/lib/{support → gpr}/string_util_windows.cc +2 -2
- data/src/core/lib/{support → gpr}/string_windows.cc +1 -1
- data/src/core/lib/{support → gpr}/string_windows.h +3 -11
- data/src/core/lib/{support → gpr}/subprocess_posix.cc +0 -0
- data/src/core/lib/{support → gpr}/subprocess_windows.cc +2 -2
- data/src/core/lib/{support → gpr}/sync.cc +0 -0
- data/src/core/lib/{support → gpr}/sync_posix.cc +10 -1
- data/src/core/lib/{support → gpr}/sync_windows.cc +0 -0
- data/src/core/lib/{support → gpr}/thd.cc +0 -0
- data/src/core/lib/{support → gpr}/thd_internal.h +3 -3
- data/src/core/lib/{support → gpr}/thd_posix.cc +18 -2
- data/src/core/lib/{support → gpr}/thd_windows.cc +2 -1
- data/src/core/lib/{support → gpr}/time.cc +0 -0
- data/src/core/lib/{support → gpr}/time_posix.cc +2 -4
- data/src/core/lib/{support → gpr}/time_precise.cc +1 -1
- data/src/core/lib/{support → gpr}/time_precise.h +3 -11
- data/src/core/lib/{support → gpr}/time_windows.cc +1 -3
- data/src/core/lib/{support → gpr}/tls_pthread.cc +0 -0
- data/src/core/lib/{support → gpr}/tmpfile.h +3 -11
- data/src/core/lib/{support → gpr}/tmpfile_msys.cc +2 -2
- data/src/core/lib/{support → gpr}/tmpfile_posix.cc +2 -2
- data/src/core/lib/{support → gpr}/tmpfile_windows.cc +2 -2
- data/src/core/lib/{support → gpr}/wrap_memcpy.cc +0 -0
- data/src/core/lib/http/format_request.cc +1 -1
- data/src/core/lib/http/format_request.h +0 -8
- data/src/core/lib/http/httpcli.cc +55 -74
- data/src/core/lib/http/httpcli.h +13 -22
- data/src/core/lib/http/httpcli_security_connector.cc +27 -33
- data/src/core/lib/http/parser.h +0 -8
- data/src/core/lib/iomgr/block_annotate.h +10 -17
- data/src/core/lib/iomgr/call_combiner.cc +14 -17
- data/src/core/lib/iomgr/call_combiner.h +16 -34
- data/src/core/lib/iomgr/closure.h +24 -37
- data/src/core/lib/iomgr/combiner.cc +62 -66
- data/src/core/lib/iomgr/combiner.h +6 -16
- data/src/core/lib/iomgr/endpoint.cc +15 -21
- data/src/core/lib/iomgr/endpoint.h +16 -33
- data/src/core/lib/iomgr/endpoint_pair.h +0 -8
- data/src/core/lib/iomgr/endpoint_pair_posix.cc +4 -5
- data/src/core/lib/iomgr/endpoint_pair_windows.cc +4 -6
- data/src/core/lib/iomgr/error.cc +2 -6
- data/src/core/lib/iomgr/error.h +4 -9
- data/src/core/lib/iomgr/error_internal.h +0 -8
- data/src/core/lib/iomgr/ev_epoll1_linux.cc +110 -117
- data/src/core/lib/iomgr/ev_epoll1_linux.h +0 -8
- data/src/core/lib/iomgr/ev_epollex_linux.cc +111 -141
- data/src/core/lib/iomgr/ev_epollex_linux.h +0 -8
- data/src/core/lib/iomgr/ev_epollsig_linux.cc +83 -109
- data/src/core/lib/iomgr/ev_epollsig_linux.h +2 -10
- data/src/core/lib/iomgr/ev_poll_posix.cc +103 -125
- data/src/core/lib/iomgr/ev_poll_posix.h +0 -8
- data/src/core/lib/iomgr/ev_posix.cc +35 -50
- data/src/core/lib/iomgr/ev_posix.h +27 -53
- data/src/core/lib/iomgr/exec_ctx.cc +46 -78
- data/src/core/lib/iomgr/exec_ctx.h +127 -60
- data/src/core/lib/iomgr/executor.cc +34 -38
- data/src/core/lib/iomgr/executor.h +3 -11
- data/src/core/lib/iomgr/fork_posix.cc +13 -12
- data/src/core/lib/iomgr/gethostname.h +0 -8
- data/src/core/lib/iomgr/gethostname_sysconf.cc +1 -1
- data/src/core/lib/iomgr/iocp_windows.cc +14 -16
- data/src/core/lib/iomgr/iocp_windows.h +1 -10
- data/src/core/lib/iomgr/iomgr.cc +60 -59
- data/src/core/lib/iomgr/iomgr.h +3 -12
- data/src/core/lib/iomgr/iomgr_internal.h +0 -8
- data/src/core/lib/iomgr/iomgr_uv.cc +2 -3
- data/src/core/lib/iomgr/iomgr_uv.h +0 -8
- data/src/core/lib/iomgr/is_epollexclusive_available.cc +1 -1
- data/src/core/lib/iomgr/load_file.cc +1 -1
- data/src/core/lib/iomgr/load_file.h +0 -8
- data/src/core/lib/iomgr/lockfree_event.cc +7 -8
- data/src/core/lib/iomgr/lockfree_event.h +3 -3
- data/src/core/lib/iomgr/polling_entity.cc +6 -10
- data/src/core/lib/iomgr/polling_entity.h +2 -11
- data/src/core/lib/iomgr/pollset.h +4 -13
- data/src/core/lib/iomgr/pollset_set.h +5 -18
- data/src/core/lib/iomgr/pollset_set_uv.cc +5 -10
- data/src/core/lib/iomgr/pollset_set_windows.cc +5 -10
- data/src/core/lib/iomgr/pollset_uv.cc +8 -9
- data/src/core/lib/iomgr/pollset_uv.h +0 -8
- data/src/core/lib/iomgr/pollset_windows.cc +14 -15
- data/src/core/lib/iomgr/pollset_windows.h +0 -8
- data/src/core/lib/iomgr/port.h +6 -1
- data/src/core/lib/iomgr/resolve_address.h +1 -10
- data/src/core/lib/iomgr/resolve_address_posix.cc +10 -12
- data/src/core/lib/iomgr/resolve_address_uv.cc +7 -8
- data/src/core/lib/iomgr/resolve_address_windows.cc +8 -9
- data/src/core/lib/iomgr/resource_quota.cc +77 -107
- data/src/core/lib/iomgr/resource_quota.h +8 -25
- data/src/core/lib/iomgr/sockaddr_utils.cc +1 -1
- data/src/core/lib/iomgr/sockaddr_utils.h +0 -8
- data/src/core/lib/iomgr/socket_factory_posix.cc +1 -1
- data/src/core/lib/iomgr/socket_factory_posix.h +0 -8
- data/src/core/lib/iomgr/socket_mutator.cc +1 -1
- data/src/core/lib/iomgr/socket_mutator.h +1 -9
- data/src/core/lib/iomgr/socket_utils.h +0 -8
- data/src/core/lib/iomgr/socket_utils_common_posix.cc +1 -1
- data/src/core/lib/iomgr/socket_utils_posix.h +0 -8
- data/src/core/lib/iomgr/socket_windows.cc +8 -11
- data/src/core/lib/iomgr/socket_windows.h +3 -14
- data/src/core/lib/iomgr/tcp_client.h +1 -10
- data/src/core/lib/iomgr/tcp_client_posix.cc +94 -78
- data/src/core/lib/iomgr/tcp_client_posix.h +36 -8
- data/src/core/lib/iomgr/tcp_client_uv.cc +16 -23
- data/src/core/lib/iomgr/tcp_client_windows.cc +22 -25
- data/src/core/lib/iomgr/tcp_posix.cc +131 -153
- data/src/core/lib/iomgr/tcp_posix.h +3 -12
- data/src/core/lib/iomgr/tcp_server.h +6 -17
- data/src/core/lib/iomgr/tcp_server_posix.cc +31 -35
- data/src/core/lib/iomgr/tcp_server_utils_posix.h +0 -8
- data/src/core/lib/iomgr/tcp_server_utils_posix_common.cc +1 -1
- data/src/core/lib/iomgr/tcp_server_uv.cc +23 -34
- data/src/core/lib/iomgr/tcp_server_windows.cc +24 -34
- data/src/core/lib/iomgr/tcp_uv.cc +42 -56
- data/src/core/lib/iomgr/tcp_uv.h +0 -8
- data/src/core/lib/iomgr/tcp_windows.cc +43 -50
- data/src/core/lib/iomgr/tcp_windows.h +1 -9
- data/src/core/lib/iomgr/time_averaged_stats.h +0 -8
- data/src/core/lib/iomgr/timer.h +6 -15
- data/src/core/lib/iomgr/timer_generic.cc +22 -27
- data/src/core/lib/iomgr/timer_heap.h +0 -8
- data/src/core/lib/iomgr/timer_manager.cc +17 -19
- data/src/core/lib/iomgr/timer_manager.h +0 -8
- data/src/core/lib/iomgr/timer_uv.cc +12 -14
- data/src/core/lib/iomgr/udp_server.cc +148 -54
- data/src/core/lib/iomgr/udp_server.h +16 -21
- data/src/core/lib/iomgr/unix_sockets_posix.h +0 -8
- data/src/core/lib/iomgr/wakeup_fd_cv.cc +4 -4
- data/src/core/lib/iomgr/wakeup_fd_cv.h +12 -20
- data/src/core/lib/iomgr/wakeup_fd_nospecial.cc +1 -1
- data/src/core/lib/iomgr/wakeup_fd_pipe.h +0 -8
- data/src/core/lib/iomgr/wakeup_fd_posix.h +0 -8
- data/src/core/lib/json/json.h +0 -8
- data/src/core/lib/json/json_reader.h +0 -8
- data/src/core/lib/json/json_writer.h +0 -8
- data/src/core/lib/profiling/basic_timers.cc +3 -2
- data/src/core/lib/profiling/timers.h +0 -8
- data/src/core/lib/security/context/security_context.cc +9 -10
- data/src/core/lib/security/context/security_context.h +0 -8
- data/src/core/lib/security/credentials/composite/composite_credentials.cc +23 -28
- data/src/core/lib/security/credentials/composite/composite_credentials.h +0 -8
- data/src/core/lib/security/credentials/credentials.cc +33 -42
- data/src/core/lib/security/credentials/credentials.h +24 -43
- data/src/core/lib/security/credentials/credentials_metadata.cc +2 -2
- data/src/core/lib/security/credentials/fake/fake_credentials.cc +16 -22
- data/src/core/lib/security/credentials/fake/fake_credentials.h +0 -8
- data/src/core/lib/security/credentials/google_default/credentials_generic.cc +3 -3
- data/src/core/lib/security/credentials/google_default/google_default_credentials.cc +28 -34
- data/src/core/lib/security/credentials/google_default/google_default_credentials.h +0 -8
- data/src/core/lib/security/credentials/iam/iam_credentials.cc +9 -13
- data/src/core/lib/security/credentials/jwt/json_token.cc +1 -1
- data/src/core/lib/security/credentials/jwt/json_token.h +0 -8
- data/src/core/lib/security/credentials/jwt/jwt_credentials.cc +14 -20
- data/src/core/lib/security/credentials/jwt/jwt_credentials.h +1 -10
- data/src/core/lib/security/credentials/jwt/jwt_verifier.cc +56 -72
- data/src/core/lib/security/credentials/jwt/jwt_verifier.h +5 -17
- data/src/core/lib/security/credentials/oauth2/oauth2_credentials.cc +47 -55
- data/src/core/lib/security/credentials/oauth2/oauth2_credentials.h +3 -12
- data/src/core/lib/security/credentials/plugin/plugin_credentials.cc +23 -28
- data/src/core/lib/security/credentials/ssl/ssl_credentials.cc +8 -13
- data/src/core/lib/security/credentials/ssl/ssl_credentials.h +0 -8
- data/src/core/lib/security/transport/auth_filters.h +0 -8
- data/src/core/lib/security/transport/client_auth_filter.cc +45 -54
- data/src/core/lib/security/transport/lb_targets_info.cc +2 -2
- data/src/core/lib/security/transport/lb_targets_info.h +0 -8
- data/src/core/lib/security/transport/secure_endpoint.cc +54 -68
- data/src/core/lib/security/transport/secure_endpoint.h +0 -8
- data/src/core/lib/security/transport/security_connector.cc +62 -86
- data/src/core/lib/security/transport/security_connector.h +22 -39
- data/src/core/lib/security/transport/security_handshaker.cc +83 -106
- data/src/core/lib/security/transport/security_handshaker.h +1 -10
- data/src/core/lib/security/transport/server_auth_filter.cc +31 -38
- data/src/core/lib/security/transport/tsi_error.h +0 -8
- data/src/core/lib/security/util/json_util.h +0 -8
- data/src/core/lib/slice/b64.cc +5 -6
- data/src/core/lib/slice/b64.h +3 -12
- data/src/core/lib/slice/percent_encoding.h +0 -8
- data/src/core/lib/slice/slice.cc +8 -9
- data/src/core/lib/slice/slice_buffer.cc +11 -16
- data/src/core/lib/slice/slice_hash_table.cc +5 -7
- data/src/core/lib/slice/slice_hash_table.h +2 -12
- data/src/core/lib/slice/slice_intern.cc +4 -5
- data/src/core/lib/slice/slice_internal.h +4 -15
- data/src/core/lib/slice/slice_string_helpers.cc +1 -1
- data/src/core/lib/slice/slice_string_helpers.h +1 -9
- data/src/core/lib/surface/alarm.cc +11 -14
- data/src/core/lib/surface/alarm_internal.h +0 -8
- data/src/core/lib/surface/byte_buffer.cc +2 -3
- data/src/core/lib/surface/byte_buffer_reader.cc +7 -9
- data/src/core/lib/surface/call.cc +198 -241
- data/src/core/lib/surface/call.h +9 -23
- data/src/core/lib/surface/call_details.cc +3 -4
- data/src/core/lib/surface/call_log_batch.cc +1 -1
- data/src/core/lib/surface/call_test_only.h +0 -8
- data/src/core/lib/surface/channel.cc +53 -64
- data/src/core/lib/surface/channel.h +12 -23
- data/src/core/lib/surface/channel_init.cc +2 -3
- data/src/core/lib/surface/channel_init.h +2 -12
- data/src/core/lib/surface/channel_ping.cc +7 -9
- data/src/core/lib/surface/channel_stack_type.h +0 -8
- data/src/core/lib/surface/completion_queue.cc +158 -176
- data/src/core/lib/surface/completion_queue.h +9 -20
- data/src/core/lib/surface/completion_queue_factory.h +0 -8
- data/src/core/lib/surface/event_string.cc +1 -1
- data/src/core/lib/surface/event_string.h +0 -8
- data/src/core/lib/surface/init.cc +27 -25
- data/src/core/lib/surface/init.h +0 -8
- data/src/core/lib/surface/init_secure.cc +2 -2
- data/src/core/lib/surface/lame_client.cc +30 -33
- data/src/core/lib/surface/lame_client.h +0 -8
- data/src/core/lib/surface/server.cc +151 -203
- data/src/core/lib/surface/server.h +7 -16
- data/src/core/lib/surface/validate_metadata.h +0 -8
- data/src/core/lib/surface/version.cc +2 -2
- data/src/core/lib/transport/bdp_estimator.cc +2 -2
- data/src/core/lib/transport/bdp_estimator.h +1 -1
- data/src/core/lib/transport/byte_stream.cc +24 -38
- data/src/core/lib/transport/byte_stream.h +10 -25
- data/src/core/lib/transport/connectivity_state.cc +9 -13
- data/src/core/lib/transport/connectivity_state.h +4 -14
- data/src/core/lib/transport/error_utils.cc +6 -6
- data/src/core/lib/transport/error_utils.h +2 -11
- data/src/core/lib/transport/metadata.cc +21 -23
- data/src/core/lib/transport/metadata.h +8 -20
- data/src/core/lib/transport/metadata_batch.cc +34 -45
- data/src/core/lib/transport/metadata_batch.h +18 -32
- data/src/core/lib/transport/service_config.cc +11 -15
- data/src/core/lib/transport/service_config.h +3 -13
- data/src/core/lib/transport/static_metadata.cc +1 -1
- data/src/core/lib/transport/static_metadata.h +1 -7
- data/src/core/lib/transport/status_conversion.cc +2 -3
- data/src/core/lib/transport/status_conversion.h +1 -10
- data/src/core/lib/transport/timeout_encoding.cc +1 -1
- data/src/core/lib/transport/timeout_encoding.h +1 -9
- data/src/core/lib/transport/transport.cc +36 -50
- data/src/core/lib/transport/transport.h +28 -30
- data/src/core/lib/transport/transport_impl.h +12 -23
- data/src/core/lib/transport/transport_op_string.cc +2 -2
- data/src/core/plugin_registry/grpc_plugin_registry.cc +34 -34
- data/src/core/tsi/fake_transport_security.cc +7 -10
- data/src/core/tsi/fake_transport_security.h +0 -8
- data/src/core/tsi/gts_transport_security.cc +2 -2
- data/src/core/tsi/gts_transport_security.h +0 -8
- data/src/core/tsi/ssl_transport_security.cc +3 -0
- data/src/core/tsi/ssl_transport_security.h +0 -8
- data/src/core/tsi/ssl_types.h +0 -8
- data/src/core/tsi/transport_security.h +1 -9
- data/src/core/tsi/transport_security_adapter.h +0 -8
- data/src/core/tsi/transport_security_grpc.cc +11 -18
- data/src/core/tsi/transport_security_grpc.h +9 -21
- data/src/core/tsi/transport_security_interface.h +0 -8
- data/src/ruby/ext/grpc/rb_grpc_imports.generated.c +0 -30
- data/src/ruby/ext/grpc/rb_grpc_imports.generated.h +2 -48
- data/src/ruby/lib/grpc/version.rb +1 -1
- data/src/ruby/spec/channel_connection_spec.rb +2 -1
- data/src/ruby/spec/client_auth_spec.rb +1 -1
- data/src/ruby/spec/client_server_spec.rb +2 -2
- data/src/ruby/spec/generic/active_call_spec.rb +1 -1
- data/src/ruby/spec/generic/client_stub_spec.rb +4 -4
- data/src/ruby/spec/generic/interceptor_registry_spec.rb +1 -1
- data/src/ruby/spec/generic/rpc_server_spec.rb +12 -12
- data/src/ruby/spec/google_rpc_status_utils_spec.rb +3 -2
- data/src/ruby/spec/pb/health/checker_spec.rb +1 -1
- data/src/ruby/spec/server_spec.rb +9 -9
- data/src/ruby/spec/support/helpers.rb +35 -1
- metadata +68 -66
- data/include/grpc/impl/codegen/exec_ctx_fwd.h +0 -26
- data/include/grpc/support/histogram.h +0 -64
- data/src/core/lib/support/histogram.cc +0 -227
@@ -89,8 +89,7 @@ void grpc_channel_init_shutdown(void) {
|
|
89
89
|
}
|
90
90
|
}
|
91
91
|
|
92
|
-
bool grpc_channel_init_create_stack(
|
93
|
-
grpc_channel_stack_builder* builder,
|
92
|
+
bool grpc_channel_init_create_stack(grpc_channel_stack_builder* builder,
|
94
93
|
grpc_channel_stack_type type) {
|
95
94
|
GPR_ASSERT(g_finalized);
|
96
95
|
|
@@ -99,7 +98,7 @@ bool grpc_channel_init_create_stack(grpc_exec_ctx* exec_ctx,
|
|
99
98
|
|
100
99
|
for (size_t i = 0; i < g_slots[type].num_slots; i++) {
|
101
100
|
const stage_slot* slot = &g_slots[type].slots[i];
|
102
|
-
if (!slot->fn(
|
101
|
+
if (!slot->fn(builder, slot->arg)) {
|
103
102
|
return false;
|
104
103
|
}
|
105
104
|
}
|
@@ -25,10 +25,6 @@
|
|
25
25
|
|
26
26
|
#define GRPC_CHANNEL_INIT_BUILTIN_PRIORITY 10000
|
27
27
|
|
28
|
-
#ifdef __cplusplus
|
29
|
-
extern "C" {
|
30
|
-
#endif
|
31
|
-
|
32
28
|
/// This module provides a way for plugins (and the grpc core library itself)
|
33
29
|
/// to register mutators for channel stacks.
|
34
30
|
/// It also provides a universal entry path to run those mutators to build
|
@@ -36,8 +32,7 @@ extern "C" {
|
|
36
32
|
|
37
33
|
/// One stage of mutation: call functions against \a builder to influence the
|
38
34
|
/// finally constructed channel stack
|
39
|
-
typedef bool (*grpc_channel_init_stage)(
|
40
|
-
grpc_channel_stack_builder* builder,
|
35
|
+
typedef bool (*grpc_channel_init_stage)(grpc_channel_stack_builder* builder,
|
41
36
|
void* arg);
|
42
37
|
|
43
38
|
/// Global initialization of the system
|
@@ -70,12 +65,7 @@ void grpc_channel_init_shutdown(void);
|
|
70
65
|
/// \a optional_transport is either NULL or a constructed transport object
|
71
66
|
/// Returns a pointer to the base of the memory allocated (the actual channel
|
72
67
|
/// stack object will be prefix_bytes past that pointer)
|
73
|
-
bool grpc_channel_init_create_stack(
|
74
|
-
grpc_channel_stack_builder* builder,
|
68
|
+
bool grpc_channel_init_create_stack(grpc_channel_stack_builder* builder,
|
75
69
|
grpc_channel_stack_type type);
|
76
70
|
|
77
|
-
#ifdef __cplusplus
|
78
|
-
}
|
79
|
-
#endif
|
80
|
-
|
81
71
|
#endif /* GRPC_CORE_LIB_SURFACE_CHANNEL_INIT_H */
|
@@ -33,15 +33,14 @@ typedef struct {
|
|
33
33
|
grpc_cq_completion completion_storage;
|
34
34
|
} ping_result;
|
35
35
|
|
36
|
-
static void ping_destroy(
|
37
|
-
grpc_cq_completion* storage) {
|
36
|
+
static void ping_destroy(void* arg, grpc_cq_completion* storage) {
|
38
37
|
gpr_free(arg);
|
39
38
|
}
|
40
39
|
|
41
|
-
static void ping_done(
|
40
|
+
static void ping_done(void* arg, grpc_error* error) {
|
42
41
|
ping_result* pr = (ping_result*)arg;
|
43
|
-
grpc_cq_end_op(
|
44
|
-
|
42
|
+
grpc_cq_end_op(pr->cq, pr->tag, GRPC_ERROR_REF(error), ping_destroy, pr,
|
43
|
+
&pr->completion_storage);
|
45
44
|
}
|
46
45
|
|
47
46
|
void grpc_channel_ping(grpc_channel* channel, grpc_completion_queue* cq,
|
@@ -52,14 +51,13 @@ void grpc_channel_ping(grpc_channel* channel, grpc_completion_queue* cq,
|
|
52
51
|
ping_result* pr = (ping_result*)gpr_malloc(sizeof(*pr));
|
53
52
|
grpc_channel_element* top_elem =
|
54
53
|
grpc_channel_stack_element(grpc_channel_get_channel_stack(channel), 0);
|
55
|
-
|
54
|
+
grpc_core::ExecCtx exec_ctx;
|
56
55
|
GPR_ASSERT(reserved == nullptr);
|
57
56
|
pr->tag = tag;
|
58
57
|
pr->cq = cq;
|
59
58
|
GRPC_CLOSURE_INIT(&pr->closure, ping_done, pr, grpc_schedule_on_exec_ctx);
|
60
|
-
op->send_ping = &pr->closure;
|
59
|
+
op->send_ping.on_ack = &pr->closure;
|
61
60
|
op->bind_pollset = grpc_cq_pollset(cq);
|
62
61
|
GPR_ASSERT(grpc_cq_begin_op(cq, tag));
|
63
|
-
top_elem->filter->start_transport_op(
|
64
|
-
grpc_exec_ctx_finish(&exec_ctx);
|
62
|
+
top_elem->filter->start_transport_op(top_elem, op);
|
65
63
|
}
|
@@ -21,10 +21,6 @@
|
|
21
21
|
|
22
22
|
#include <stdbool.h>
|
23
23
|
|
24
|
-
#ifdef __cplusplus
|
25
|
-
extern "C" {
|
26
|
-
#endif
|
27
|
-
|
28
24
|
typedef enum {
|
29
25
|
// normal top-half client channel with load-balancing, connection management
|
30
26
|
GRPC_CLIENT_CHANNEL,
|
@@ -46,8 +42,4 @@ bool grpc_channel_stack_type_is_client(grpc_channel_stack_type type);
|
|
46
42
|
|
47
43
|
const char* grpc_channel_stack_type_string(grpc_channel_stack_type type);
|
48
44
|
|
49
|
-
#ifdef __cplusplus
|
50
|
-
}
|
51
|
-
#endif
|
52
|
-
|
53
45
|
#endif /* GRPC_CORE_LIB_SURFACE_CHANNEL_STACK_TYPE_H */
|
@@ -31,11 +31,11 @@
|
|
31
31
|
#include <grpc/support/tls.h>
|
32
32
|
|
33
33
|
#include "src/core/lib/debug/stats.h"
|
34
|
+
#include "src/core/lib/gpr/spinlock.h"
|
35
|
+
#include "src/core/lib/gpr/string.h"
|
34
36
|
#include "src/core/lib/iomgr/pollset.h"
|
35
37
|
#include "src/core/lib/iomgr/timer.h"
|
36
38
|
#include "src/core/lib/profiling/timers.h"
|
37
|
-
#include "src/core/lib/support/spinlock.h"
|
38
|
-
#include "src/core/lib/support/string.h"
|
39
39
|
#include "src/core/lib/surface/api_trace.h"
|
40
40
|
#include "src/core/lib/surface/call.h"
|
41
41
|
#include "src/core/lib/surface/event_string.h"
|
@@ -62,13 +62,12 @@ typedef struct {
|
|
62
62
|
bool can_listen;
|
63
63
|
size_t (*size)(void);
|
64
64
|
void (*init)(grpc_pollset* pollset, gpr_mu** mu);
|
65
|
-
grpc_error* (*kick)(
|
65
|
+
grpc_error* (*kick)(grpc_pollset* pollset,
|
66
66
|
grpc_pollset_worker* specific_worker);
|
67
|
-
grpc_error* (*work)(
|
68
|
-
|
69
|
-
void (*shutdown)(
|
70
|
-
|
71
|
-
void (*destroy)(grpc_exec_ctx* exec_ctx, grpc_pollset* pollset);
|
67
|
+
grpc_error* (*work)(grpc_pollset* pollset, grpc_pollset_worker** worker,
|
68
|
+
grpc_millis deadline);
|
69
|
+
void (*shutdown)(grpc_pollset* pollset, grpc_closure* closure);
|
70
|
+
void (*destroy)(grpc_pollset* pollset);
|
72
71
|
} cq_poller_vtable;
|
73
72
|
|
74
73
|
typedef struct non_polling_worker {
|
@@ -94,14 +93,12 @@ static void non_polling_poller_init(grpc_pollset* pollset, gpr_mu** mu) {
|
|
94
93
|
*mu = &npp->mu;
|
95
94
|
}
|
96
95
|
|
97
|
-
static void non_polling_poller_destroy(
|
98
|
-
grpc_pollset* pollset) {
|
96
|
+
static void non_polling_poller_destroy(grpc_pollset* pollset) {
|
99
97
|
non_polling_poller* npp = (non_polling_poller*)pollset;
|
100
98
|
gpr_mu_destroy(&npp->mu);
|
101
99
|
}
|
102
100
|
|
103
|
-
static grpc_error* non_polling_poller_work(
|
104
|
-
grpc_pollset* pollset,
|
101
|
+
static grpc_error* non_polling_poller_work(grpc_pollset* pollset,
|
105
102
|
grpc_pollset_worker** worker,
|
106
103
|
grpc_millis deadline) {
|
107
104
|
non_polling_poller* npp = (non_polling_poller*)pollset;
|
@@ -118,16 +115,16 @@ static grpc_error* non_polling_poller_work(grpc_exec_ctx* exec_ctx,
|
|
118
115
|
}
|
119
116
|
w.kicked = false;
|
120
117
|
gpr_timespec deadline_ts =
|
121
|
-
grpc_millis_to_timespec(deadline,
|
118
|
+
grpc_millis_to_timespec(deadline, GPR_CLOCK_MONOTONIC);
|
122
119
|
while (!npp->shutdown && !w.kicked &&
|
123
120
|
!gpr_cv_wait(&w.cv, &npp->mu, deadline_ts))
|
124
121
|
;
|
125
|
-
|
122
|
+
grpc_core::ExecCtx::Get()->InvalidateNow();
|
126
123
|
if (&w == npp->root) {
|
127
124
|
npp->root = w.next;
|
128
125
|
if (&w == npp->root) {
|
129
126
|
if (npp->shutdown) {
|
130
|
-
GRPC_CLOSURE_SCHED(
|
127
|
+
GRPC_CLOSURE_SCHED(npp->shutdown, GRPC_ERROR_NONE);
|
131
128
|
}
|
132
129
|
npp->root = nullptr;
|
133
130
|
}
|
@@ -140,8 +137,7 @@ static grpc_error* non_polling_poller_work(grpc_exec_ctx* exec_ctx,
|
|
140
137
|
}
|
141
138
|
|
142
139
|
static grpc_error* non_polling_poller_kick(
|
143
|
-
|
144
|
-
grpc_pollset_worker* specific_worker) {
|
140
|
+
grpc_pollset* pollset, grpc_pollset_worker* specific_worker) {
|
145
141
|
non_polling_poller* p = (non_polling_poller*)pollset;
|
146
142
|
if (specific_worker == nullptr)
|
147
143
|
specific_worker = (grpc_pollset_worker*)p->root;
|
@@ -155,14 +151,13 @@ static grpc_error* non_polling_poller_kick(
|
|
155
151
|
return GRPC_ERROR_NONE;
|
156
152
|
}
|
157
153
|
|
158
|
-
static void non_polling_poller_shutdown(
|
159
|
-
grpc_pollset* pollset,
|
154
|
+
static void non_polling_poller_shutdown(grpc_pollset* pollset,
|
160
155
|
grpc_closure* closure) {
|
161
156
|
non_polling_poller* p = (non_polling_poller*)pollset;
|
162
157
|
GPR_ASSERT(closure != nullptr);
|
163
158
|
p->shutdown = closure;
|
164
159
|
if (p->root == nullptr) {
|
165
|
-
GRPC_CLOSURE_SCHED(
|
160
|
+
GRPC_CLOSURE_SCHED(closure, GRPC_ERROR_NONE);
|
166
161
|
} else {
|
167
162
|
non_polling_worker* w = p->root;
|
168
163
|
do {
|
@@ -189,13 +184,11 @@ typedef struct cq_vtable {
|
|
189
184
|
grpc_cq_completion_type cq_completion_type;
|
190
185
|
size_t data_size;
|
191
186
|
void (*init)(void* data);
|
192
|
-
void (*shutdown)(
|
187
|
+
void (*shutdown)(grpc_completion_queue* cq);
|
193
188
|
void (*destroy)(void* data);
|
194
189
|
bool (*begin_op)(grpc_completion_queue* cq, void* tag);
|
195
|
-
void (*end_op)(
|
196
|
-
|
197
|
-
void (*done)(grpc_exec_ctx* exec_ctx, void* done_arg,
|
198
|
-
grpc_cq_completion* storage),
|
190
|
+
void (*end_op)(grpc_completion_queue* cq, void* tag, grpc_error* error,
|
191
|
+
void (*done)(void* done_arg, grpc_cq_completion* storage),
|
199
192
|
void* done_arg, grpc_cq_completion* storage);
|
200
193
|
grpc_event (*next)(grpc_completion_queue* cq, gpr_timespec deadline,
|
201
194
|
void* reserved);
|
@@ -280,31 +273,23 @@ struct grpc_completion_queue {
|
|
280
273
|
};
|
281
274
|
|
282
275
|
/* Forward declarations */
|
283
|
-
static void cq_finish_shutdown_next(
|
284
|
-
|
285
|
-
static void
|
286
|
-
|
287
|
-
static void cq_shutdown_next(grpc_exec_ctx* exec_ctx,
|
288
|
-
grpc_completion_queue* cq);
|
289
|
-
static void cq_shutdown_pluck(grpc_exec_ctx* exec_ctx,
|
290
|
-
grpc_completion_queue* cq);
|
276
|
+
static void cq_finish_shutdown_next(grpc_completion_queue* cq);
|
277
|
+
static void cq_finish_shutdown_pluck(grpc_completion_queue* cq);
|
278
|
+
static void cq_shutdown_next(grpc_completion_queue* cq);
|
279
|
+
static void cq_shutdown_pluck(grpc_completion_queue* cq);
|
291
280
|
|
292
281
|
static bool cq_begin_op_for_next(grpc_completion_queue* cq, void* tag);
|
293
282
|
static bool cq_begin_op_for_pluck(grpc_completion_queue* cq, void* tag);
|
294
283
|
|
295
|
-
static void cq_end_op_for_next(
|
296
|
-
grpc_completion_queue* cq, void* tag,
|
284
|
+
static void cq_end_op_for_next(grpc_completion_queue* cq, void* tag,
|
297
285
|
grpc_error* error,
|
298
|
-
void (*done)(
|
299
|
-
void* done_arg,
|
286
|
+
void (*done)(void* done_arg,
|
300
287
|
grpc_cq_completion* storage),
|
301
288
|
void* done_arg, grpc_cq_completion* storage);
|
302
289
|
|
303
|
-
static void cq_end_op_for_pluck(
|
304
|
-
grpc_completion_queue* cq, void* tag,
|
290
|
+
static void cq_end_op_for_pluck(grpc_completion_queue* cq, void* tag,
|
305
291
|
grpc_error* error,
|
306
|
-
void (*done)(
|
307
|
-
void* done_arg,
|
292
|
+
void (*done)(void* done_arg,
|
308
293
|
grpc_cq_completion* storage),
|
309
294
|
void* done_arg, grpc_cq_completion* storage);
|
310
295
|
|
@@ -346,8 +331,7 @@ grpc_core::TraceFlag grpc_cq_event_timeout_trace(true, "queue_timeout");
|
|
346
331
|
gpr_free(_ev); \
|
347
332
|
}
|
348
333
|
|
349
|
-
static void on_pollset_shutdown_done(
|
350
|
-
grpc_error* error);
|
334
|
+
static void on_pollset_shutdown_done(void* cq, grpc_error* error);
|
351
335
|
|
352
336
|
void grpc_cq_global_init() {
|
353
337
|
gpr_tls_init(&g_cached_event);
|
@@ -369,19 +353,18 @@ int grpc_completion_queue_thread_local_cache_flush(grpc_completion_queue* cq,
|
|
369
353
|
if (storage != nullptr &&
|
370
354
|
(grpc_completion_queue*)gpr_tls_get(&g_cached_cq) == cq) {
|
371
355
|
*tag = storage->tag;
|
372
|
-
|
356
|
+
grpc_core::ExecCtx exec_ctx;
|
373
357
|
*ok = (storage->next & (uintptr_t)(1)) == 1;
|
374
|
-
storage->done(
|
358
|
+
storage->done(storage->done_arg, storage);
|
375
359
|
ret = 1;
|
376
360
|
cq_next_data* cqd = (cq_next_data*)DATA_FROM_CQ(cq);
|
377
361
|
if (gpr_atm_full_fetch_add(&cqd->pending_events, -1) == 1) {
|
378
362
|
GRPC_CQ_INTERNAL_REF(cq, "shutting_down");
|
379
363
|
gpr_mu_lock(cq->mu);
|
380
|
-
cq_finish_shutdown_next(
|
364
|
+
cq_finish_shutdown_next(cq);
|
381
365
|
gpr_mu_unlock(cq->mu);
|
382
|
-
GRPC_CQ_INTERNAL_UNREF(
|
366
|
+
GRPC_CQ_INTERNAL_UNREF(cq, "shutting_down");
|
383
367
|
}
|
384
|
-
grpc_exec_ctx_finish(&exec_ctx);
|
385
368
|
}
|
386
369
|
gpr_tls_set(&g_cached_event, (intptr_t)0);
|
387
370
|
gpr_tls_set(&g_cached_cq, (intptr_t)0);
|
@@ -406,24 +389,22 @@ static bool cq_event_queue_push(grpc_cq_event_queue* q, grpc_cq_completion* c) {
|
|
406
389
|
|
407
390
|
static grpc_cq_completion* cq_event_queue_pop(grpc_cq_event_queue* q) {
|
408
391
|
grpc_cq_completion* c = nullptr;
|
409
|
-
|
392
|
+
grpc_core::ExecCtx exec_ctx;
|
410
393
|
|
411
394
|
if (gpr_spinlock_trylock(&q->queue_lock)) {
|
412
|
-
GRPC_STATS_INC_CQ_EV_QUEUE_TRYLOCK_SUCCESSES(
|
395
|
+
GRPC_STATS_INC_CQ_EV_QUEUE_TRYLOCK_SUCCESSES();
|
413
396
|
|
414
397
|
bool is_empty = false;
|
415
398
|
c = (grpc_cq_completion*)gpr_mpscq_pop_and_check_end(&q->queue, &is_empty);
|
416
399
|
gpr_spinlock_unlock(&q->queue_lock);
|
417
400
|
|
418
401
|
if (c == nullptr && !is_empty) {
|
419
|
-
GRPC_STATS_INC_CQ_EV_QUEUE_TRANSIENT_POP_FAILURES(
|
402
|
+
GRPC_STATS_INC_CQ_EV_QUEUE_TRANSIENT_POP_FAILURES();
|
420
403
|
}
|
421
404
|
} else {
|
422
|
-
GRPC_STATS_INC_CQ_EV_QUEUE_TRYLOCK_FAILURES(
|
405
|
+
GRPC_STATS_INC_CQ_EV_QUEUE_TRYLOCK_FAILURES();
|
423
406
|
}
|
424
407
|
|
425
|
-
grpc_exec_ctx_finish(&exec_ctx);
|
426
|
-
|
427
408
|
if (c) {
|
428
409
|
gpr_atm_no_barrier_fetch_add(&q->num_queue_items, -1);
|
429
410
|
}
|
@@ -453,9 +434,8 @@ grpc_completion_queue* grpc_completion_queue_create_internal(
|
|
453
434
|
const cq_poller_vtable* poller_vtable =
|
454
435
|
&g_poller_vtable_by_poller_type[polling_type];
|
455
436
|
|
456
|
-
|
457
|
-
GRPC_STATS_INC_CQS_CREATED(
|
458
|
-
grpc_exec_ctx_finish(&exec_ctx);
|
437
|
+
grpc_core::ExecCtx exec_ctx;
|
438
|
+
GRPC_STATS_INC_CQS_CREATED();
|
459
439
|
|
460
440
|
cq = (grpc_completion_queue*)gpr_zalloc(sizeof(grpc_completion_queue) +
|
461
441
|
vtable->data_size +
|
@@ -537,15 +517,14 @@ void grpc_cq_internal_ref(grpc_completion_queue* cq) {
|
|
537
517
|
gpr_ref(&cq->owning_refs);
|
538
518
|
}
|
539
519
|
|
540
|
-
static void on_pollset_shutdown_done(
|
541
|
-
grpc_error* error) {
|
520
|
+
static void on_pollset_shutdown_done(void* arg, grpc_error* error) {
|
542
521
|
grpc_completion_queue* cq = (grpc_completion_queue*)arg;
|
543
|
-
GRPC_CQ_INTERNAL_UNREF(
|
522
|
+
GRPC_CQ_INTERNAL_UNREF(cq, "pollset_destroy");
|
544
523
|
}
|
545
524
|
|
546
525
|
#ifndef NDEBUG
|
547
|
-
void grpc_cq_internal_unref(
|
548
|
-
const char*
|
526
|
+
void grpc_cq_internal_unref(grpc_completion_queue* cq, const char* reason,
|
527
|
+
const char* file, int line) {
|
549
528
|
if (grpc_trace_cq_refcount.enabled()) {
|
550
529
|
gpr_atm val = gpr_atm_no_barrier_load(&cq->owning_refs.count);
|
551
530
|
gpr_log(file, line, GPR_LOG_SEVERITY_DEBUG,
|
@@ -553,12 +532,11 @@ void grpc_cq_internal_unref(grpc_exec_ctx* exec_ctx, grpc_completion_queue* cq,
|
|
553
532
|
reason);
|
554
533
|
}
|
555
534
|
#else
|
556
|
-
void grpc_cq_internal_unref(
|
557
|
-
grpc_completion_queue* cq) {
|
535
|
+
void grpc_cq_internal_unref(grpc_completion_queue* cq) {
|
558
536
|
#endif
|
559
537
|
if (gpr_unref(&cq->owning_refs)) {
|
560
538
|
cq->vtable->destroy(DATA_FROM_CQ(cq));
|
561
|
-
cq->poller_vtable->destroy(
|
539
|
+
cq->poller_vtable->destroy(POLLSET_FROM_CQ(cq));
|
562
540
|
#ifndef NDEBUG
|
563
541
|
gpr_free(cq->outstanding_tags);
|
564
542
|
#endif
|
@@ -639,11 +617,9 @@ bool grpc_cq_begin_op(grpc_completion_queue* cq, void* tag) {
|
|
639
617
|
/* Queue a GRPC_OP_COMPLETED operation to a completion queue (with a
|
640
618
|
* completion
|
641
619
|
* type of GRPC_CQ_NEXT) */
|
642
|
-
static void cq_end_op_for_next(
|
643
|
-
grpc_completion_queue* cq, void* tag,
|
620
|
+
static void cq_end_op_for_next(grpc_completion_queue* cq, void* tag,
|
644
621
|
grpc_error* error,
|
645
|
-
void (*done)(
|
646
|
-
void* done_arg,
|
622
|
+
void (*done)(void* done_arg,
|
647
623
|
grpc_cq_completion* storage),
|
648
624
|
void* done_arg, grpc_cq_completion* storage) {
|
649
625
|
GPR_TIMER_BEGIN("cq_end_op_for_next", 0);
|
@@ -652,9 +628,9 @@ static void cq_end_op_for_next(grpc_exec_ctx* exec_ctx,
|
|
652
628
|
(grpc_trace_operation_failures.enabled() && error != GRPC_ERROR_NONE)) {
|
653
629
|
const char* errmsg = grpc_error_string(error);
|
654
630
|
GRPC_API_TRACE(
|
655
|
-
"cq_end_op_for_next(
|
631
|
+
"cq_end_op_for_next(cq=%p, tag=%p, error=%s, "
|
656
632
|
"done=%p, done_arg=%p, storage=%p)",
|
657
|
-
|
633
|
+
6, (cq, tag, errmsg, done, done_arg, storage));
|
658
634
|
if (grpc_trace_operation_failures.enabled() && error != GRPC_ERROR_NONE) {
|
659
635
|
gpr_log(GPR_ERROR, "Operation failed: tag=%p, error=%s", tag, errmsg);
|
660
636
|
}
|
@@ -689,7 +665,7 @@ static void cq_end_op_for_next(grpc_exec_ctx* exec_ctx,
|
|
689
665
|
if (is_first) {
|
690
666
|
gpr_mu_lock(cq->mu);
|
691
667
|
grpc_error* kick_error =
|
692
|
-
cq->poller_vtable->kick(
|
668
|
+
cq->poller_vtable->kick(POLLSET_FROM_CQ(cq), nullptr);
|
693
669
|
gpr_mu_unlock(cq->mu);
|
694
670
|
|
695
671
|
if (kick_error != GRPC_ERROR_NONE) {
|
@@ -701,17 +677,17 @@ static void cq_end_op_for_next(grpc_exec_ctx* exec_ctx,
|
|
701
677
|
if (gpr_atm_full_fetch_add(&cqd->pending_events, -1) == 1) {
|
702
678
|
GRPC_CQ_INTERNAL_REF(cq, "shutting_down");
|
703
679
|
gpr_mu_lock(cq->mu);
|
704
|
-
cq_finish_shutdown_next(
|
680
|
+
cq_finish_shutdown_next(cq);
|
705
681
|
gpr_mu_unlock(cq->mu);
|
706
|
-
GRPC_CQ_INTERNAL_UNREF(
|
682
|
+
GRPC_CQ_INTERNAL_UNREF(cq, "shutting_down");
|
707
683
|
}
|
708
684
|
} else {
|
709
685
|
GRPC_CQ_INTERNAL_REF(cq, "shutting_down");
|
710
686
|
gpr_atm_rel_store(&cqd->pending_events, 0);
|
711
687
|
gpr_mu_lock(cq->mu);
|
712
|
-
cq_finish_shutdown_next(
|
688
|
+
cq_finish_shutdown_next(cq);
|
713
689
|
gpr_mu_unlock(cq->mu);
|
714
|
-
GRPC_CQ_INTERNAL_UNREF(
|
690
|
+
GRPC_CQ_INTERNAL_UNREF(cq, "shutting_down");
|
715
691
|
}
|
716
692
|
}
|
717
693
|
|
@@ -723,11 +699,9 @@ static void cq_end_op_for_next(grpc_exec_ctx* exec_ctx,
|
|
723
699
|
/* Queue a GRPC_OP_COMPLETED operation to a completion queue (with a
|
724
700
|
* completion
|
725
701
|
* type of GRPC_CQ_PLUCK) */
|
726
|
-
static void cq_end_op_for_pluck(
|
727
|
-
grpc_completion_queue* cq, void* tag,
|
702
|
+
static void cq_end_op_for_pluck(grpc_completion_queue* cq, void* tag,
|
728
703
|
grpc_error* error,
|
729
|
-
void (*done)(
|
730
|
-
void* done_arg,
|
704
|
+
void (*done)(void* done_arg,
|
731
705
|
grpc_cq_completion* storage),
|
732
706
|
void* done_arg, grpc_cq_completion* storage) {
|
733
707
|
cq_pluck_data* cqd = (cq_pluck_data*)DATA_FROM_CQ(cq);
|
@@ -739,9 +713,9 @@ static void cq_end_op_for_pluck(grpc_exec_ctx* exec_ctx,
|
|
739
713
|
(grpc_trace_operation_failures.enabled() && error != GRPC_ERROR_NONE)) {
|
740
714
|
const char* errmsg = grpc_error_string(error);
|
741
715
|
GRPC_API_TRACE(
|
742
|
-
"cq_end_op_for_pluck(
|
716
|
+
"cq_end_op_for_pluck(cq=%p, tag=%p, error=%s, "
|
743
717
|
"done=%p, done_arg=%p, storage=%p)",
|
744
|
-
|
718
|
+
6, (cq, tag, errmsg, done, done_arg, storage));
|
745
719
|
if (grpc_trace_operation_failures.enabled() && error != GRPC_ERROR_NONE) {
|
746
720
|
gpr_log(GPR_ERROR, "Operation failed: tag=%p, error=%s", tag, errmsg);
|
747
721
|
}
|
@@ -762,7 +736,7 @@ static void cq_end_op_for_pluck(grpc_exec_ctx* exec_ctx,
|
|
762
736
|
cqd->completed_tail = storage;
|
763
737
|
|
764
738
|
if (gpr_atm_full_fetch_add(&cqd->pending_events, -1) == 1) {
|
765
|
-
cq_finish_shutdown_pluck(
|
739
|
+
cq_finish_shutdown_pluck(cq);
|
766
740
|
gpr_mu_unlock(cq->mu);
|
767
741
|
} else {
|
768
742
|
grpc_pollset_worker* pluck_worker = nullptr;
|
@@ -774,7 +748,7 @@ static void cq_end_op_for_pluck(grpc_exec_ctx* exec_ctx,
|
|
774
748
|
}
|
775
749
|
|
776
750
|
grpc_error* kick_error =
|
777
|
-
cq->poller_vtable->kick(
|
751
|
+
cq->poller_vtable->kick(POLLSET_FROM_CQ(cq), pluck_worker);
|
778
752
|
|
779
753
|
gpr_mu_unlock(cq->mu);
|
780
754
|
|
@@ -791,12 +765,10 @@ static void cq_end_op_for_pluck(grpc_exec_ctx* exec_ctx,
|
|
791
765
|
GRPC_ERROR_UNREF(error);
|
792
766
|
}
|
793
767
|
|
794
|
-
void grpc_cq_end_op(
|
795
|
-
void*
|
796
|
-
void (*done)(grpc_exec_ctx* exec_ctx, void* done_arg,
|
797
|
-
grpc_cq_completion* storage),
|
768
|
+
void grpc_cq_end_op(grpc_completion_queue* cq, void* tag, grpc_error* error,
|
769
|
+
void (*done)(void* done_arg, grpc_cq_completion* storage),
|
798
770
|
void* done_arg, grpc_cq_completion* storage) {
|
799
|
-
cq->vtable->end_op(
|
771
|
+
cq->vtable->end_op(cq, tag, error, done, done_arg, storage);
|
800
772
|
}
|
801
773
|
|
802
774
|
typedef struct {
|
@@ -808,31 +780,40 @@ typedef struct {
|
|
808
780
|
bool first_loop;
|
809
781
|
} cq_is_finished_arg;
|
810
782
|
|
811
|
-
|
812
|
-
|
813
|
-
|
814
|
-
cq_next_data* cqd = (cq_next_data*)DATA_FROM_CQ(cq);
|
815
|
-
GPR_ASSERT(a->stolen_completion == nullptr);
|
783
|
+
class ExecCtxNext : public grpc_core::ExecCtx {
|
784
|
+
public:
|
785
|
+
ExecCtxNext(void* arg) : ExecCtx(0), check_ready_to_finish_arg_(arg) {}
|
816
786
|
|
817
|
-
|
818
|
-
|
787
|
+
bool CheckReadyToFinish() override {
|
788
|
+
cq_is_finished_arg* a = (cq_is_finished_arg*)check_ready_to_finish_arg_;
|
789
|
+
grpc_completion_queue* cq = a->cq;
|
790
|
+
cq_next_data* cqd = (cq_next_data*)DATA_FROM_CQ(cq);
|
791
|
+
GPR_ASSERT(a->stolen_completion == nullptr);
|
819
792
|
|
820
|
-
|
821
|
-
a->last_seen_things_queued_ever =
|
793
|
+
gpr_atm current_last_seen_things_queued_ever =
|
822
794
|
gpr_atm_no_barrier_load(&cqd->things_queued_ever);
|
823
795
|
|
824
|
-
|
825
|
-
|
826
|
-
|
827
|
-
|
828
|
-
|
829
|
-
|
830
|
-
|
831
|
-
|
796
|
+
if (current_last_seen_things_queued_ever !=
|
797
|
+
a->last_seen_things_queued_ever) {
|
798
|
+
a->last_seen_things_queued_ever =
|
799
|
+
gpr_atm_no_barrier_load(&cqd->things_queued_ever);
|
800
|
+
|
801
|
+
/* Pop a cq_completion from the queue. Returns NULL if the queue is empty
|
802
|
+
* might return NULL in some cases even if the queue is not empty; but
|
803
|
+
* that
|
804
|
+
* is ok and doesn't affect correctness. Might effect the tail latencies a
|
805
|
+
* bit) */
|
806
|
+
a->stolen_completion = cq_event_queue_pop(&cqd->queue);
|
807
|
+
if (a->stolen_completion != nullptr) {
|
808
|
+
return true;
|
809
|
+
}
|
832
810
|
}
|
811
|
+
return !a->first_loop && a->deadline < grpc_core::ExecCtx::Get()->Now();
|
833
812
|
}
|
834
|
-
|
835
|
-
|
813
|
+
|
814
|
+
private:
|
815
|
+
void* check_ready_to_finish_arg_;
|
816
|
+
};
|
836
817
|
|
837
818
|
#ifndef NDEBUG
|
838
819
|
static void dump_pending_tags(grpc_completion_queue* cq) {
|
@@ -887,8 +868,7 @@ static grpc_event cq_next(grpc_completion_queue* cq, gpr_timespec deadline,
|
|
887
868
|
nullptr,
|
888
869
|
nullptr,
|
889
870
|
true};
|
890
|
-
|
891
|
-
GRPC_EXEC_CTX_INITIALIZER(0, cq_is_next_finished, &is_finished_arg);
|
871
|
+
ExecCtxNext exec_ctx(&is_finished_arg);
|
892
872
|
for (;;) {
|
893
873
|
grpc_millis iteration_deadline = deadline_millis;
|
894
874
|
|
@@ -898,7 +878,7 @@ static grpc_event cq_next(grpc_completion_queue* cq, gpr_timespec deadline,
|
|
898
878
|
ret.type = GRPC_OP_COMPLETE;
|
899
879
|
ret.success = c->next & 1u;
|
900
880
|
ret.tag = c->tag;
|
901
|
-
c->done(
|
881
|
+
c->done(c->done_arg, c);
|
902
882
|
break;
|
903
883
|
}
|
904
884
|
|
@@ -908,7 +888,7 @@ static grpc_event cq_next(grpc_completion_queue* cq, gpr_timespec deadline,
|
|
908
888
|
ret.type = GRPC_OP_COMPLETE;
|
909
889
|
ret.success = c->next & 1u;
|
910
890
|
ret.tag = c->tag;
|
911
|
-
c->done(
|
891
|
+
c->done(c->done_arg, c);
|
912
892
|
break;
|
913
893
|
} else {
|
914
894
|
/* If c == NULL it means either the queue is empty OR in an transient
|
@@ -939,7 +919,7 @@ static grpc_event cq_next(grpc_completion_queue* cq, gpr_timespec deadline,
|
|
939
919
|
}
|
940
920
|
|
941
921
|
if (!is_finished_arg.first_loop &&
|
942
|
-
|
922
|
+
grpc_core::ExecCtx::Get()->Now() >= deadline_millis) {
|
943
923
|
memset(&ret, 0, sizeof(ret));
|
944
924
|
ret.type = GRPC_QUEUE_TIMEOUT;
|
945
925
|
dump_pending_tags(cq);
|
@@ -949,8 +929,8 @@ static grpc_event cq_next(grpc_completion_queue* cq, gpr_timespec deadline,
|
|
949
929
|
/* The main polling work happens in grpc_pollset_work */
|
950
930
|
gpr_mu_lock(cq->mu);
|
951
931
|
cq->num_polls++;
|
952
|
-
grpc_error* err = cq->poller_vtable->work(
|
953
|
-
|
932
|
+
grpc_error* err = cq->poller_vtable->work(POLLSET_FROM_CQ(cq), nullptr,
|
933
|
+
iteration_deadline);
|
954
934
|
gpr_mu_unlock(cq->mu);
|
955
935
|
|
956
936
|
if (err != GRPC_ERROR_NONE) {
|
@@ -969,13 +949,13 @@ static grpc_event cq_next(grpc_completion_queue* cq, gpr_timespec deadline,
|
|
969
949
|
if (cq_event_queue_num_items(&cqd->queue) > 0 &&
|
970
950
|
gpr_atm_acq_load(&cqd->pending_events) > 0) {
|
971
951
|
gpr_mu_lock(cq->mu);
|
972
|
-
cq->poller_vtable->kick(
|
952
|
+
cq->poller_vtable->kick(POLLSET_FROM_CQ(cq), nullptr);
|
973
953
|
gpr_mu_unlock(cq->mu);
|
974
954
|
}
|
975
955
|
|
976
956
|
GRPC_SURFACE_TRACE_RETURNED_EVENT(cq, &ret);
|
977
|
-
GRPC_CQ_INTERNAL_UNREF(
|
978
|
-
|
957
|
+
GRPC_CQ_INTERNAL_UNREF(cq, "next");
|
958
|
+
|
979
959
|
GPR_ASSERT(is_finished_arg.stolen_completion == nullptr);
|
980
960
|
|
981
961
|
GPR_TIMER_END("grpc_completion_queue_next", 0);
|
@@ -989,19 +969,16 @@ static grpc_event cq_next(grpc_completion_queue* cq, gpr_timespec deadline,
|
|
989
969
|
- Must be called only once in completion queue's lifetime
|
990
970
|
- grpc_completion_queue_shutdown() MUST have been called before calling
|
991
971
|
this function */
|
992
|
-
static void cq_finish_shutdown_next(
|
993
|
-
grpc_completion_queue* cq) {
|
972
|
+
static void cq_finish_shutdown_next(grpc_completion_queue* cq) {
|
994
973
|
cq_next_data* cqd = (cq_next_data*)DATA_FROM_CQ(cq);
|
995
974
|
|
996
975
|
GPR_ASSERT(cqd->shutdown_called);
|
997
976
|
GPR_ASSERT(gpr_atm_no_barrier_load(&cqd->pending_events) == 0);
|
998
977
|
|
999
|
-
cq->poller_vtable->shutdown(
|
1000
|
-
&cq->pollset_shutdown_done);
|
978
|
+
cq->poller_vtable->shutdown(POLLSET_FROM_CQ(cq), &cq->pollset_shutdown_done);
|
1001
979
|
}
|
1002
980
|
|
1003
|
-
static void cq_shutdown_next(
|
1004
|
-
grpc_completion_queue* cq) {
|
981
|
+
static void cq_shutdown_next(grpc_completion_queue* cq) {
|
1005
982
|
cq_next_data* cqd = (cq_next_data*)DATA_FROM_CQ(cq);
|
1006
983
|
|
1007
984
|
/* Need an extra ref for cq here because:
|
@@ -1014,7 +991,7 @@ static void cq_shutdown_next(grpc_exec_ctx* exec_ctx,
|
|
1014
991
|
gpr_mu_lock(cq->mu);
|
1015
992
|
if (cqd->shutdown_called) {
|
1016
993
|
gpr_mu_unlock(cq->mu);
|
1017
|
-
GRPC_CQ_INTERNAL_UNREF(
|
994
|
+
GRPC_CQ_INTERNAL_UNREF(cq, "shutting_down");
|
1018
995
|
return;
|
1019
996
|
}
|
1020
997
|
cqd->shutdown_called = true;
|
@@ -1022,10 +999,10 @@ static void cq_shutdown_next(grpc_exec_ctx* exec_ctx,
|
|
1022
999
|
* cq_begin_op_for_next and and cq_end_op_for_next functions which read/write
|
1023
1000
|
* on this counter without necessarily holding a lock on cq */
|
1024
1001
|
if (gpr_atm_full_fetch_add(&cqd->pending_events, -1) == 1) {
|
1025
|
-
cq_finish_shutdown_next(
|
1002
|
+
cq_finish_shutdown_next(cq);
|
1026
1003
|
}
|
1027
1004
|
gpr_mu_unlock(cq->mu);
|
1028
|
-
GRPC_CQ_INTERNAL_UNREF(
|
1005
|
+
GRPC_CQ_INTERNAL_UNREF(cq, "shutting_down");
|
1029
1006
|
}
|
1030
1007
|
|
1031
1008
|
grpc_event grpc_completion_queue_next(grpc_completion_queue* cq,
|
@@ -1058,37 +1035,46 @@ static void del_plucker(grpc_completion_queue* cq, void* tag,
|
|
1058
1035
|
GPR_UNREACHABLE_CODE(return );
|
1059
1036
|
}
|
1060
1037
|
|
1061
|
-
|
1062
|
-
|
1063
|
-
|
1064
|
-
cq_pluck_data* cqd = (cq_pluck_data*)DATA_FROM_CQ(cq);
|
1038
|
+
class ExecCtxPluck : public grpc_core::ExecCtx {
|
1039
|
+
public:
|
1040
|
+
ExecCtxPluck(void* arg) : ExecCtx(0), check_ready_to_finish_arg_(arg) {}
|
1065
1041
|
|
1066
|
-
|
1067
|
-
|
1068
|
-
|
1069
|
-
|
1070
|
-
|
1071
|
-
a->
|
1042
|
+
bool CheckReadyToFinish() override {
|
1043
|
+
cq_is_finished_arg* a = (cq_is_finished_arg*)check_ready_to_finish_arg_;
|
1044
|
+
grpc_completion_queue* cq = a->cq;
|
1045
|
+
cq_pluck_data* cqd = (cq_pluck_data*)DATA_FROM_CQ(cq);
|
1046
|
+
|
1047
|
+
GPR_ASSERT(a->stolen_completion == nullptr);
|
1048
|
+
gpr_atm current_last_seen_things_queued_ever =
|
1072
1049
|
gpr_atm_no_barrier_load(&cqd->things_queued_ever);
|
1073
|
-
|
1074
|
-
|
1075
|
-
|
1076
|
-
|
1077
|
-
|
1078
|
-
|
1079
|
-
|
1080
|
-
|
1050
|
+
if (current_last_seen_things_queued_ever !=
|
1051
|
+
a->last_seen_things_queued_ever) {
|
1052
|
+
gpr_mu_lock(cq->mu);
|
1053
|
+
a->last_seen_things_queued_ever =
|
1054
|
+
gpr_atm_no_barrier_load(&cqd->things_queued_ever);
|
1055
|
+
grpc_cq_completion* c;
|
1056
|
+
grpc_cq_completion* prev = &cqd->completed_head;
|
1057
|
+
while ((c = (grpc_cq_completion*)(prev->next & ~(uintptr_t)1)) !=
|
1058
|
+
&cqd->completed_head) {
|
1059
|
+
if (c->tag == a->tag) {
|
1060
|
+
prev->next = (prev->next & (uintptr_t)1) | (c->next & ~(uintptr_t)1);
|
1061
|
+
if (c == cqd->completed_tail) {
|
1062
|
+
cqd->completed_tail = prev;
|
1063
|
+
}
|
1064
|
+
gpr_mu_unlock(cq->mu);
|
1065
|
+
a->stolen_completion = c;
|
1066
|
+
return true;
|
1081
1067
|
}
|
1082
|
-
|
1083
|
-
a->stolen_completion = c;
|
1084
|
-
return true;
|
1068
|
+
prev = c;
|
1085
1069
|
}
|
1086
|
-
|
1070
|
+
gpr_mu_unlock(cq->mu);
|
1087
1071
|
}
|
1088
|
-
|
1072
|
+
return !a->first_loop && a->deadline < grpc_core::ExecCtx::Get()->Now();
|
1089
1073
|
}
|
1090
|
-
|
1091
|
-
|
1074
|
+
|
1075
|
+
private:
|
1076
|
+
void* check_ready_to_finish_arg_;
|
1077
|
+
};
|
1092
1078
|
|
1093
1079
|
static grpc_event cq_pluck(grpc_completion_queue* cq, void* tag,
|
1094
1080
|
gpr_timespec deadline, void* reserved) {
|
@@ -1125,8 +1111,7 @@ static grpc_event cq_pluck(grpc_completion_queue* cq, void* tag,
|
|
1125
1111
|
nullptr,
|
1126
1112
|
tag,
|
1127
1113
|
true};
|
1128
|
-
|
1129
|
-
GRPC_EXEC_CTX_INITIALIZER(0, cq_is_pluck_finished, &is_finished_arg);
|
1114
|
+
ExecCtxPluck exec_ctx(&is_finished_arg);
|
1130
1115
|
for (;;) {
|
1131
1116
|
if (is_finished_arg.stolen_completion != nullptr) {
|
1132
1117
|
gpr_mu_unlock(cq->mu);
|
@@ -1135,7 +1120,7 @@ static grpc_event cq_pluck(grpc_completion_queue* cq, void* tag,
|
|
1135
1120
|
ret.type = GRPC_OP_COMPLETE;
|
1136
1121
|
ret.success = c->next & 1u;
|
1137
1122
|
ret.tag = c->tag;
|
1138
|
-
c->done(
|
1123
|
+
c->done(c->done_arg, c);
|
1139
1124
|
break;
|
1140
1125
|
}
|
1141
1126
|
prev = &cqd->completed_head;
|
@@ -1150,7 +1135,7 @@ static grpc_event cq_pluck(grpc_completion_queue* cq, void* tag,
|
|
1150
1135
|
ret.type = GRPC_OP_COMPLETE;
|
1151
1136
|
ret.success = c->next & 1u;
|
1152
1137
|
ret.tag = c->tag;
|
1153
|
-
c->done(
|
1138
|
+
c->done(c->done_arg, c);
|
1154
1139
|
goto done;
|
1155
1140
|
}
|
1156
1141
|
prev = c;
|
@@ -1174,7 +1159,7 @@ static grpc_event cq_pluck(grpc_completion_queue* cq, void* tag,
|
|
1174
1159
|
break;
|
1175
1160
|
}
|
1176
1161
|
if (!is_finished_arg.first_loop &&
|
1177
|
-
|
1162
|
+
grpc_core::ExecCtx::Get()->Now() >= deadline_millis) {
|
1178
1163
|
del_plucker(cq, tag, &worker);
|
1179
1164
|
gpr_mu_unlock(cq->mu);
|
1180
1165
|
memset(&ret, 0, sizeof(ret));
|
@@ -1183,8 +1168,8 @@ static grpc_event cq_pluck(grpc_completion_queue* cq, void* tag,
|
|
1183
1168
|
break;
|
1184
1169
|
}
|
1185
1170
|
cq->num_polls++;
|
1186
|
-
grpc_error* err =
|
1187
|
-
|
1171
|
+
grpc_error* err =
|
1172
|
+
cq->poller_vtable->work(POLLSET_FROM_CQ(cq), &worker, deadline_millis);
|
1188
1173
|
if (err != GRPC_ERROR_NONE) {
|
1189
1174
|
del_plucker(cq, tag, &worker);
|
1190
1175
|
gpr_mu_unlock(cq->mu);
|
@@ -1202,8 +1187,8 @@ static grpc_event cq_pluck(grpc_completion_queue* cq, void* tag,
|
|
1202
1187
|
}
|
1203
1188
|
done:
|
1204
1189
|
GRPC_SURFACE_TRACE_RETURNED_EVENT(cq, &ret);
|
1205
|
-
GRPC_CQ_INTERNAL_UNREF(
|
1206
|
-
|
1190
|
+
GRPC_CQ_INTERNAL_UNREF(cq, "pluck");
|
1191
|
+
|
1207
1192
|
GPR_ASSERT(is_finished_arg.stolen_completion == nullptr);
|
1208
1193
|
|
1209
1194
|
GPR_TIMER_END("grpc_completion_queue_pluck", 0);
|
@@ -1216,22 +1201,19 @@ grpc_event grpc_completion_queue_pluck(grpc_completion_queue* cq, void* tag,
|
|
1216
1201
|
return cq->vtable->pluck(cq, tag, deadline, reserved);
|
1217
1202
|
}
|
1218
1203
|
|
1219
|
-
static void cq_finish_shutdown_pluck(
|
1220
|
-
grpc_completion_queue* cq) {
|
1204
|
+
static void cq_finish_shutdown_pluck(grpc_completion_queue* cq) {
|
1221
1205
|
cq_pluck_data* cqd = (cq_pluck_data*)DATA_FROM_CQ(cq);
|
1222
1206
|
|
1223
1207
|
GPR_ASSERT(cqd->shutdown_called);
|
1224
1208
|
GPR_ASSERT(!gpr_atm_no_barrier_load(&cqd->shutdown));
|
1225
1209
|
gpr_atm_no_barrier_store(&cqd->shutdown, 1);
|
1226
1210
|
|
1227
|
-
cq->poller_vtable->shutdown(
|
1228
|
-
&cq->pollset_shutdown_done);
|
1211
|
+
cq->poller_vtable->shutdown(POLLSET_FROM_CQ(cq), &cq->pollset_shutdown_done);
|
1229
1212
|
}
|
1230
1213
|
|
1231
1214
|
/* NOTE: This function is almost exactly identical to cq_shutdown_next() but
|
1232
1215
|
* merging them is a bit tricky and probably not worth it */
|
1233
|
-
static void cq_shutdown_pluck(
|
1234
|
-
grpc_completion_queue* cq) {
|
1216
|
+
static void cq_shutdown_pluck(grpc_completion_queue* cq) {
|
1235
1217
|
cq_pluck_data* cqd = (cq_pluck_data*)DATA_FROM_CQ(cq);
|
1236
1218
|
|
1237
1219
|
/* Need an extra ref for cq here because:
|
@@ -1244,25 +1226,25 @@ static void cq_shutdown_pluck(grpc_exec_ctx* exec_ctx,
|
|
1244
1226
|
gpr_mu_lock(cq->mu);
|
1245
1227
|
if (cqd->shutdown_called) {
|
1246
1228
|
gpr_mu_unlock(cq->mu);
|
1247
|
-
GRPC_CQ_INTERNAL_UNREF(
|
1229
|
+
GRPC_CQ_INTERNAL_UNREF(cq, "shutting_down (pluck cq)");
|
1248
1230
|
return;
|
1249
1231
|
}
|
1250
1232
|
cqd->shutdown_called = true;
|
1251
1233
|
if (gpr_atm_full_fetch_add(&cqd->pending_events, -1) == 1) {
|
1252
|
-
cq_finish_shutdown_pluck(
|
1234
|
+
cq_finish_shutdown_pluck(cq);
|
1253
1235
|
}
|
1254
1236
|
gpr_mu_unlock(cq->mu);
|
1255
|
-
GRPC_CQ_INTERNAL_UNREF(
|
1237
|
+
GRPC_CQ_INTERNAL_UNREF(cq, "shutting_down (pluck cq)");
|
1256
1238
|
}
|
1257
1239
|
|
1258
1240
|
/* Shutdown simply drops a ref that we reserved at creation time; if we drop
|
1259
1241
|
to zero here, then enter shutdown mode and wake up any waiters */
|
1260
1242
|
void grpc_completion_queue_shutdown(grpc_completion_queue* cq) {
|
1261
|
-
|
1243
|
+
grpc_core::ExecCtx exec_ctx;
|
1262
1244
|
GPR_TIMER_BEGIN("grpc_completion_queue_shutdown", 0);
|
1263
1245
|
GRPC_API_TRACE("grpc_completion_queue_shutdown(cq=%p)", 1, (cq));
|
1264
|
-
cq->vtable->shutdown(
|
1265
|
-
|
1246
|
+
cq->vtable->shutdown(cq);
|
1247
|
+
|
1266
1248
|
GPR_TIMER_END("grpc_completion_queue_shutdown", 0);
|
1267
1249
|
}
|
1268
1250
|
|
@@ -1271,9 +1253,9 @@ void grpc_completion_queue_destroy(grpc_completion_queue* cq) {
|
|
1271
1253
|
GPR_TIMER_BEGIN("grpc_completion_queue_destroy", 0);
|
1272
1254
|
grpc_completion_queue_shutdown(cq);
|
1273
1255
|
|
1274
|
-
|
1275
|
-
GRPC_CQ_INTERNAL_UNREF(
|
1276
|
-
|
1256
|
+
grpc_core::ExecCtx exec_ctx;
|
1257
|
+
GRPC_CQ_INTERNAL_UNREF(cq, "destroy");
|
1258
|
+
|
1277
1259
|
GPR_TIMER_END("grpc_completion_queue_destroy", 0);
|
1278
1260
|
}
|
1279
1261
|
|