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
@@ -23,13 +23,17 @@
|
|
23
23
|
#include "src/core/lib/channel/channel_stack_builder.h"
|
24
24
|
#include "src/core/lib/surface/channel_stack_type.h"
|
25
25
|
|
26
|
-
|
27
|
-
|
26
|
+
#ifdef __cplusplus
|
27
|
+
extern "C" {
|
28
|
+
#endif
|
29
|
+
|
30
|
+
grpc_channel* grpc_channel_create(grpc_exec_ctx* exec_ctx, const char* target,
|
31
|
+
const grpc_channel_args* args,
|
28
32
|
grpc_channel_stack_type channel_stack_type,
|
29
|
-
grpc_transport
|
33
|
+
grpc_transport* optional_transport);
|
30
34
|
|
31
|
-
grpc_channel
|
32
|
-
grpc_exec_ctx
|
35
|
+
grpc_channel* grpc_channel_create_with_builder(
|
36
|
+
grpc_exec_ctx* exec_ctx, grpc_channel_stack_builder* builder,
|
33
37
|
grpc_channel_stack_type channel_stack_type);
|
34
38
|
|
35
39
|
/** Create a call given a grpc_channel, in order to call \a method.
|
@@ -40,37 +44,37 @@ grpc_channel *grpc_channel_create_with_builder(
|
|
40
44
|
non-NULL, it must be a server-side call. It will be used to propagate
|
41
45
|
properties from the server call to this new client call, depending on the
|
42
46
|
value of \a propagation_mask (see propagation_bits.h for possible values) */
|
43
|
-
grpc_call
|
44
|
-
grpc_exec_ctx
|
45
|
-
uint32_t propagation_mask, grpc_pollset_set
|
46
|
-
const grpc_slice
|
47
|
+
grpc_call* grpc_channel_create_pollset_set_call(
|
48
|
+
grpc_exec_ctx* exec_ctx, grpc_channel* channel, grpc_call* parent_call,
|
49
|
+
uint32_t propagation_mask, grpc_pollset_set* pollset_set, grpc_slice method,
|
50
|
+
const grpc_slice* host, grpc_millis deadline, void* reserved);
|
47
51
|
|
48
52
|
/** Get a (borrowed) pointer to this channels underlying channel stack */
|
49
|
-
grpc_channel_stack
|
53
|
+
grpc_channel_stack* grpc_channel_get_channel_stack(grpc_channel* channel);
|
50
54
|
|
51
55
|
/** Get a grpc_mdelem of grpc-status: X where X is the numeric value of
|
52
56
|
status_code.
|
53
57
|
|
54
58
|
The returned elem is owned by the caller. */
|
55
|
-
grpc_mdelem grpc_channel_get_reffed_status_elem(grpc_exec_ctx
|
56
|
-
grpc_channel
|
59
|
+
grpc_mdelem grpc_channel_get_reffed_status_elem(grpc_exec_ctx* exec_ctx,
|
60
|
+
grpc_channel* channel,
|
57
61
|
int status_code);
|
58
62
|
|
59
|
-
size_t grpc_channel_get_call_size_estimate(grpc_channel
|
60
|
-
void grpc_channel_update_call_size_estimate(grpc_channel
|
63
|
+
size_t grpc_channel_get_call_size_estimate(grpc_channel* channel);
|
64
|
+
void grpc_channel_update_call_size_estimate(grpc_channel* channel, size_t size);
|
61
65
|
|
62
66
|
#ifndef NDEBUG
|
63
|
-
void grpc_channel_internal_ref(grpc_channel
|
64
|
-
void grpc_channel_internal_unref(grpc_exec_ctx
|
65
|
-
const char
|
67
|
+
void grpc_channel_internal_ref(grpc_channel* channel, const char* reason);
|
68
|
+
void grpc_channel_internal_unref(grpc_exec_ctx* exec_ctx, grpc_channel* channel,
|
69
|
+
const char* reason);
|
66
70
|
#define GRPC_CHANNEL_INTERNAL_REF(channel, reason) \
|
67
71
|
grpc_channel_internal_ref(channel, reason)
|
68
72
|
#define GRPC_CHANNEL_INTERNAL_UNREF(exec_ctx, channel, reason) \
|
69
73
|
grpc_channel_internal_unref(exec_ctx, channel, reason)
|
70
74
|
#else
|
71
|
-
void grpc_channel_internal_ref(grpc_channel
|
72
|
-
void grpc_channel_internal_unref(grpc_exec_ctx
|
73
|
-
grpc_channel
|
75
|
+
void grpc_channel_internal_ref(grpc_channel* channel);
|
76
|
+
void grpc_channel_internal_unref(grpc_exec_ctx* exec_ctx,
|
77
|
+
grpc_channel* channel);
|
74
78
|
#define GRPC_CHANNEL_INTERNAL_REF(channel, reason) \
|
75
79
|
grpc_channel_internal_ref(channel)
|
76
80
|
#define GRPC_CHANNEL_INTERNAL_UNREF(exec_ctx, channel, reason) \
|
@@ -79,6 +83,10 @@ void grpc_channel_internal_unref(grpc_exec_ctx *exec_ctx,
|
|
79
83
|
|
80
84
|
/** Return the channel's compression options. */
|
81
85
|
grpc_compression_options grpc_channel_compression_options(
|
82
|
-
const grpc_channel
|
86
|
+
const grpc_channel* channel);
|
87
|
+
|
88
|
+
#ifdef __cplusplus
|
89
|
+
}
|
90
|
+
#endif
|
83
91
|
|
84
92
|
#endif /* GRPC_CORE_LIB_SURFACE_CHANNEL_H */
|
@@ -23,13 +23,13 @@
|
|
23
23
|
|
24
24
|
typedef struct stage_slot {
|
25
25
|
grpc_channel_init_stage fn;
|
26
|
-
void
|
26
|
+
void* arg;
|
27
27
|
int priority;
|
28
28
|
size_t insertion_order;
|
29
29
|
} stage_slot;
|
30
30
|
|
31
31
|
typedef struct stage_slots {
|
32
|
-
stage_slot
|
32
|
+
stage_slot* slots;
|
33
33
|
size_t num_slots;
|
34
34
|
size_t cap_slots;
|
35
35
|
} stage_slots;
|
@@ -39,7 +39,7 @@ static bool g_finalized;
|
|
39
39
|
|
40
40
|
void grpc_channel_init_init(void) {
|
41
41
|
for (int i = 0; i < GRPC_NUM_CHANNEL_STACK_TYPES; i++) {
|
42
|
-
g_slots[i].slots =
|
42
|
+
g_slots[i].slots = nullptr;
|
43
43
|
g_slots[i].num_slots = 0;
|
44
44
|
g_slots[i].cap_slots = 0;
|
45
45
|
}
|
@@ -49,24 +49,24 @@ void grpc_channel_init_init(void) {
|
|
49
49
|
void grpc_channel_init_register_stage(grpc_channel_stack_type type,
|
50
50
|
int priority,
|
51
51
|
grpc_channel_init_stage stage,
|
52
|
-
void
|
52
|
+
void* stage_arg) {
|
53
53
|
GPR_ASSERT(!g_finalized);
|
54
54
|
if (g_slots[type].cap_slots == g_slots[type].num_slots) {
|
55
55
|
g_slots[type].cap_slots = GPR_MAX(8, 3 * g_slots[type].cap_slots / 2);
|
56
|
-
g_slots[type].slots = (stage_slot
|
56
|
+
g_slots[type].slots = (stage_slot*)gpr_realloc(
|
57
57
|
g_slots[type].slots,
|
58
58
|
g_slots[type].cap_slots * sizeof(*g_slots[type].slots));
|
59
59
|
}
|
60
|
-
stage_slot
|
60
|
+
stage_slot* s = &g_slots[type].slots[g_slots[type].num_slots++];
|
61
61
|
s->insertion_order = g_slots[type].num_slots;
|
62
62
|
s->priority = priority;
|
63
63
|
s->fn = stage;
|
64
64
|
s->arg = stage_arg;
|
65
65
|
}
|
66
66
|
|
67
|
-
static int compare_slots(const void
|
68
|
-
const stage_slot
|
69
|
-
const stage_slot
|
67
|
+
static int compare_slots(const void* a, const void* b) {
|
68
|
+
const stage_slot* sa = (const stage_slot*)a;
|
69
|
+
const stage_slot* sb = (const stage_slot*)b;
|
70
70
|
|
71
71
|
int c = GPR_ICMP(sa->priority, sb->priority);
|
72
72
|
if (c != 0) return c;
|
@@ -85,12 +85,12 @@ void grpc_channel_init_finalize(void) {
|
|
85
85
|
void grpc_channel_init_shutdown(void) {
|
86
86
|
for (int i = 0; i < GRPC_NUM_CHANNEL_STACK_TYPES; i++) {
|
87
87
|
gpr_free(g_slots[i].slots);
|
88
|
-
g_slots[i].slots = (stage_slot
|
88
|
+
g_slots[i].slots = (stage_slot*)(void*)(uintptr_t)0xdeadbeef;
|
89
89
|
}
|
90
90
|
}
|
91
91
|
|
92
|
-
bool grpc_channel_init_create_stack(grpc_exec_ctx
|
93
|
-
grpc_channel_stack_builder
|
92
|
+
bool grpc_channel_init_create_stack(grpc_exec_ctx* exec_ctx,
|
93
|
+
grpc_channel_stack_builder* builder,
|
94
94
|
grpc_channel_stack_type type) {
|
95
95
|
GPR_ASSERT(g_finalized);
|
96
96
|
|
@@ -98,7 +98,7 @@ bool grpc_channel_init_create_stack(grpc_exec_ctx *exec_ctx,
|
|
98
98
|
grpc_channel_stack_type_string(type));
|
99
99
|
|
100
100
|
for (size_t i = 0; i < g_slots[type].num_slots; i++) {
|
101
|
-
const stage_slot
|
101
|
+
const stage_slot* slot = &g_slots[type].slots[i];
|
102
102
|
if (!slot->fn(exec_ctx, builder, slot->arg)) {
|
103
103
|
return false;
|
104
104
|
}
|
@@ -36,9 +36,9 @@ extern "C" {
|
|
36
36
|
|
37
37
|
/// One stage of mutation: call functions against \a builder to influence the
|
38
38
|
/// finally constructed channel stack
|
39
|
-
typedef bool (*grpc_channel_init_stage)(grpc_exec_ctx
|
40
|
-
grpc_channel_stack_builder
|
41
|
-
void
|
39
|
+
typedef bool (*grpc_channel_init_stage)(grpc_exec_ctx* exec_ctx,
|
40
|
+
grpc_channel_stack_builder* builder,
|
41
|
+
void* arg);
|
42
42
|
|
43
43
|
/// Global initialization of the system
|
44
44
|
void grpc_channel_init_init(void);
|
@@ -51,7 +51,7 @@ void grpc_channel_init_init(void);
|
|
51
51
|
void grpc_channel_init_register_stage(grpc_channel_stack_type type,
|
52
52
|
int priority,
|
53
53
|
grpc_channel_init_stage stage_fn,
|
54
|
-
void
|
54
|
+
void* stage_arg);
|
55
55
|
|
56
56
|
/// Finalize registration. No more calls to grpc_channel_init_register_stage are
|
57
57
|
/// allowed.
|
@@ -70,8 +70,8 @@ void grpc_channel_init_shutdown(void);
|
|
70
70
|
/// \a optional_transport is either NULL or a constructed transport object
|
71
71
|
/// Returns a pointer to the base of the memory allocated (the actual channel
|
72
72
|
/// stack object will be prefix_bytes past that pointer)
|
73
|
-
bool grpc_channel_init_create_stack(grpc_exec_ctx
|
74
|
-
grpc_channel_stack_builder
|
73
|
+
bool grpc_channel_init_create_stack(grpc_exec_ctx* exec_ctx,
|
74
|
+
grpc_channel_stack_builder* builder,
|
75
75
|
grpc_channel_stack_type type);
|
76
76
|
|
77
77
|
#ifdef __cplusplus
|
@@ -28,32 +28,32 @@
|
|
28
28
|
|
29
29
|
typedef struct {
|
30
30
|
grpc_closure closure;
|
31
|
-
void
|
32
|
-
grpc_completion_queue
|
31
|
+
void* tag;
|
32
|
+
grpc_completion_queue* cq;
|
33
33
|
grpc_cq_completion completion_storage;
|
34
34
|
} ping_result;
|
35
35
|
|
36
|
-
static void ping_destroy(grpc_exec_ctx
|
37
|
-
grpc_cq_completion
|
36
|
+
static void ping_destroy(grpc_exec_ctx* exec_ctx, void* arg,
|
37
|
+
grpc_cq_completion* storage) {
|
38
38
|
gpr_free(arg);
|
39
39
|
}
|
40
40
|
|
41
|
-
static void ping_done(grpc_exec_ctx
|
42
|
-
ping_result
|
41
|
+
static void ping_done(grpc_exec_ctx* exec_ctx, void* arg, grpc_error* error) {
|
42
|
+
ping_result* pr = (ping_result*)arg;
|
43
43
|
grpc_cq_end_op(exec_ctx, pr->cq, pr->tag, GRPC_ERROR_REF(error), ping_destroy,
|
44
44
|
pr, &pr->completion_storage);
|
45
45
|
}
|
46
46
|
|
47
|
-
void grpc_channel_ping(grpc_channel
|
48
|
-
void
|
47
|
+
void grpc_channel_ping(grpc_channel* channel, grpc_completion_queue* cq,
|
48
|
+
void* tag, void* reserved) {
|
49
49
|
GRPC_API_TRACE("grpc_channel_ping(channel=%p, cq=%p, tag=%p, reserved=%p)", 4,
|
50
50
|
(channel, cq, tag, reserved));
|
51
|
-
grpc_transport_op
|
52
|
-
ping_result
|
53
|
-
grpc_channel_element
|
51
|
+
grpc_transport_op* op = grpc_make_transport_op(nullptr);
|
52
|
+
ping_result* pr = (ping_result*)gpr_malloc(sizeof(*pr));
|
53
|
+
grpc_channel_element* top_elem =
|
54
54
|
grpc_channel_stack_element(grpc_channel_get_channel_stack(channel), 0);
|
55
55
|
grpc_exec_ctx exec_ctx = GRPC_EXEC_CTX_INIT;
|
56
|
-
GPR_ASSERT(reserved ==
|
56
|
+
GPR_ASSERT(reserved == nullptr);
|
57
57
|
pr->tag = tag;
|
58
58
|
pr->cq = cq;
|
59
59
|
GRPC_CLOSURE_INIT(&pr->closure, ping_done, pr, grpc_schedule_on_exec_ctx);
|
@@ -38,7 +38,7 @@ bool grpc_channel_stack_type_is_client(grpc_channel_stack_type type) {
|
|
38
38
|
GPR_UNREACHABLE_CODE(return true;);
|
39
39
|
}
|
40
40
|
|
41
|
-
const char
|
41
|
+
const char* grpc_channel_stack_type_string(grpc_channel_stack_type type) {
|
42
42
|
switch (type) {
|
43
43
|
case GRPC_CLIENT_CHANNEL:
|
44
44
|
return "CLIENT_CHANNEL";
|
@@ -21,6 +21,10 @@
|
|
21
21
|
|
22
22
|
#include <stdbool.h>
|
23
23
|
|
24
|
+
#ifdef __cplusplus
|
25
|
+
extern "C" {
|
26
|
+
#endif
|
27
|
+
|
24
28
|
typedef enum {
|
25
29
|
// normal top-half client channel with load-balancing, connection management
|
26
30
|
GRPC_CLIENT_CHANNEL,
|
@@ -40,6 +44,10 @@ typedef enum {
|
|
40
44
|
|
41
45
|
bool grpc_channel_stack_type_is_client(grpc_channel_stack_type type);
|
42
46
|
|
43
|
-
const char
|
47
|
+
const char* grpc_channel_stack_type_string(grpc_channel_stack_type type);
|
48
|
+
|
49
|
+
#ifdef __cplusplus
|
50
|
+
}
|
51
|
+
#endif
|
44
52
|
|
45
53
|
#endif /* GRPC_CORE_LIB_SURFACE_CHANNEL_STACK_TYPE_H */
|
@@ -15,8 +15,11 @@
|
|
15
15
|
* limitations under the License.
|
16
16
|
*
|
17
17
|
*/
|
18
|
+
#include <grpc/support/port_platform.h>
|
19
|
+
|
18
20
|
#include "src/core/lib/surface/completion_queue.h"
|
19
21
|
|
22
|
+
#include <inttypes.h>
|
20
23
|
#include <stdio.h>
|
21
24
|
#include <string.h>
|
22
25
|
|
@@ -25,6 +28,7 @@
|
|
25
28
|
#include <grpc/support/log.h>
|
26
29
|
#include <grpc/support/string_util.h>
|
27
30
|
#include <grpc/support/time.h>
|
31
|
+
#include <grpc/support/tls.h>
|
28
32
|
|
29
33
|
#include "src/core/lib/debug/stats.h"
|
30
34
|
#include "src/core/lib/iomgr/pollset.h"
|
@@ -36,75 +40,76 @@
|
|
36
40
|
#include "src/core/lib/surface/call.h"
|
37
41
|
#include "src/core/lib/surface/event_string.h"
|
38
42
|
|
39
|
-
|
40
|
-
|
41
|
-
|
42
|
-
|
43
|
-
|
44
|
-
|
45
|
-
|
46
|
-
|
43
|
+
grpc_core::TraceFlag grpc_trace_operation_failures(false, "op_failure");
|
44
|
+
grpc_core::DebugOnlyTraceFlag grpc_trace_pending_tags(false, "pending_tags");
|
45
|
+
grpc_core::DebugOnlyTraceFlag grpc_trace_cq_refcount(false, "cq_refcount");
|
46
|
+
|
47
|
+
// Specifies a cq thread local cache.
|
48
|
+
// The first event that occurs on a thread
|
49
|
+
// with a cq cache will go into that cache, and
|
50
|
+
// will only be returned on the thread that initialized the cache.
|
51
|
+
// NOTE: Only one event will ever be cached.
|
52
|
+
GPR_TLS_DECL(g_cached_event);
|
53
|
+
GPR_TLS_DECL(g_cached_cq);
|
47
54
|
|
48
55
|
typedef struct {
|
49
|
-
grpc_pollset_worker
|
50
|
-
void
|
56
|
+
grpc_pollset_worker** worker;
|
57
|
+
void* tag;
|
51
58
|
} plucker;
|
52
59
|
|
53
60
|
typedef struct {
|
54
61
|
bool can_get_pollset;
|
55
62
|
bool can_listen;
|
56
63
|
size_t (*size)(void);
|
57
|
-
void (*init)(grpc_pollset
|
58
|
-
grpc_error
|
59
|
-
grpc_pollset_worker
|
60
|
-
grpc_error
|
61
|
-
grpc_pollset_worker
|
62
|
-
|
63
|
-
|
64
|
-
|
65
|
-
void (*destroy)(grpc_exec_ctx *exec_ctx, grpc_pollset *pollset);
|
64
|
+
void (*init)(grpc_pollset* pollset, gpr_mu** mu);
|
65
|
+
grpc_error* (*kick)(grpc_exec_ctx* exec_ctx, grpc_pollset* pollset,
|
66
|
+
grpc_pollset_worker* specific_worker);
|
67
|
+
grpc_error* (*work)(grpc_exec_ctx* exec_ctx, grpc_pollset* pollset,
|
68
|
+
grpc_pollset_worker** worker, grpc_millis deadline);
|
69
|
+
void (*shutdown)(grpc_exec_ctx* exec_ctx, grpc_pollset* pollset,
|
70
|
+
grpc_closure* closure);
|
71
|
+
void (*destroy)(grpc_exec_ctx* exec_ctx, grpc_pollset* pollset);
|
66
72
|
} cq_poller_vtable;
|
67
73
|
|
68
74
|
typedef struct non_polling_worker {
|
69
75
|
gpr_cv cv;
|
70
76
|
bool kicked;
|
71
|
-
struct non_polling_worker
|
72
|
-
struct non_polling_worker
|
77
|
+
struct non_polling_worker* next;
|
78
|
+
struct non_polling_worker* prev;
|
73
79
|
} non_polling_worker;
|
74
80
|
|
75
81
|
typedef struct {
|
76
82
|
gpr_mu mu;
|
77
|
-
non_polling_worker
|
78
|
-
grpc_closure
|
83
|
+
non_polling_worker* root;
|
84
|
+
grpc_closure* shutdown;
|
79
85
|
} non_polling_poller;
|
80
86
|
|
81
87
|
static size_t non_polling_poller_size(void) {
|
82
88
|
return sizeof(non_polling_poller);
|
83
89
|
}
|
84
90
|
|
85
|
-
static void non_polling_poller_init(grpc_pollset
|
86
|
-
non_polling_poller
|
91
|
+
static void non_polling_poller_init(grpc_pollset* pollset, gpr_mu** mu) {
|
92
|
+
non_polling_poller* npp = (non_polling_poller*)pollset;
|
87
93
|
gpr_mu_init(&npp->mu);
|
88
94
|
*mu = &npp->mu;
|
89
95
|
}
|
90
96
|
|
91
|
-
static void non_polling_poller_destroy(grpc_exec_ctx
|
92
|
-
grpc_pollset
|
93
|
-
non_polling_poller
|
97
|
+
static void non_polling_poller_destroy(grpc_exec_ctx* exec_ctx,
|
98
|
+
grpc_pollset* pollset) {
|
99
|
+
non_polling_poller* npp = (non_polling_poller*)pollset;
|
94
100
|
gpr_mu_destroy(&npp->mu);
|
95
101
|
}
|
96
102
|
|
97
|
-
static grpc_error
|
98
|
-
grpc_pollset
|
99
|
-
grpc_pollset_worker
|
100
|
-
|
101
|
-
|
102
|
-
non_polling_poller *npp = (non_polling_poller *)pollset;
|
103
|
+
static grpc_error* non_polling_poller_work(grpc_exec_ctx* exec_ctx,
|
104
|
+
grpc_pollset* pollset,
|
105
|
+
grpc_pollset_worker** worker,
|
106
|
+
grpc_millis deadline) {
|
107
|
+
non_polling_poller* npp = (non_polling_poller*)pollset;
|
103
108
|
if (npp->shutdown) return GRPC_ERROR_NONE;
|
104
109
|
non_polling_worker w;
|
105
110
|
gpr_cv_init(&w.cv);
|
106
|
-
if (worker !=
|
107
|
-
if (npp->root ==
|
111
|
+
if (worker != nullptr) *worker = (grpc_pollset_worker*)&w;
|
112
|
+
if (npp->root == nullptr) {
|
108
113
|
npp->root = w.next = w.prev = &w;
|
109
114
|
} else {
|
110
115
|
w.next = npp->root;
|
@@ -112,31 +117,36 @@ static grpc_error *non_polling_poller_work(grpc_exec_ctx *exec_ctx,
|
|
112
117
|
w.next->prev = w.prev->next = &w;
|
113
118
|
}
|
114
119
|
w.kicked = false;
|
115
|
-
|
120
|
+
gpr_timespec deadline_ts =
|
121
|
+
grpc_millis_to_timespec(deadline, GPR_CLOCK_REALTIME);
|
122
|
+
while (!npp->shutdown && !w.kicked &&
|
123
|
+
!gpr_cv_wait(&w.cv, &npp->mu, deadline_ts))
|
116
124
|
;
|
125
|
+
grpc_exec_ctx_invalidate_now(exec_ctx);
|
117
126
|
if (&w == npp->root) {
|
118
127
|
npp->root = w.next;
|
119
128
|
if (&w == npp->root) {
|
120
129
|
if (npp->shutdown) {
|
121
130
|
GRPC_CLOSURE_SCHED(exec_ctx, npp->shutdown, GRPC_ERROR_NONE);
|
122
131
|
}
|
123
|
-
npp->root =
|
132
|
+
npp->root = nullptr;
|
124
133
|
}
|
125
134
|
}
|
126
135
|
w.next->prev = w.prev;
|
127
136
|
w.prev->next = w.next;
|
128
137
|
gpr_cv_destroy(&w.cv);
|
129
|
-
if (worker !=
|
138
|
+
if (worker != nullptr) *worker = nullptr;
|
130
139
|
return GRPC_ERROR_NONE;
|
131
140
|
}
|
132
141
|
|
133
|
-
static grpc_error
|
134
|
-
grpc_exec_ctx
|
135
|
-
grpc_pollset_worker
|
136
|
-
non_polling_poller
|
137
|
-
if (specific_worker ==
|
138
|
-
|
139
|
-
|
142
|
+
static grpc_error* non_polling_poller_kick(
|
143
|
+
grpc_exec_ctx* exec_ctx, grpc_pollset* pollset,
|
144
|
+
grpc_pollset_worker* specific_worker) {
|
145
|
+
non_polling_poller* p = (non_polling_poller*)pollset;
|
146
|
+
if (specific_worker == nullptr)
|
147
|
+
specific_worker = (grpc_pollset_worker*)p->root;
|
148
|
+
if (specific_worker != nullptr) {
|
149
|
+
non_polling_worker* w = (non_polling_worker*)specific_worker;
|
140
150
|
if (!w->kicked) {
|
141
151
|
w->kicked = true;
|
142
152
|
gpr_cv_signal(&w->cv);
|
@@ -145,16 +155,16 @@ static grpc_error *non_polling_poller_kick(
|
|
145
155
|
return GRPC_ERROR_NONE;
|
146
156
|
}
|
147
157
|
|
148
|
-
static void non_polling_poller_shutdown(grpc_exec_ctx
|
149
|
-
grpc_pollset
|
150
|
-
grpc_closure
|
151
|
-
non_polling_poller
|
152
|
-
GPR_ASSERT(closure !=
|
158
|
+
static void non_polling_poller_shutdown(grpc_exec_ctx* exec_ctx,
|
159
|
+
grpc_pollset* pollset,
|
160
|
+
grpc_closure* closure) {
|
161
|
+
non_polling_poller* p = (non_polling_poller*)pollset;
|
162
|
+
GPR_ASSERT(closure != nullptr);
|
153
163
|
p->shutdown = closure;
|
154
|
-
if (p->root ==
|
164
|
+
if (p->root == nullptr) {
|
155
165
|
GRPC_CLOSURE_SCHED(exec_ctx, closure, GRPC_ERROR_NONE);
|
156
166
|
} else {
|
157
|
-
non_polling_worker
|
167
|
+
non_polling_worker* w = p->root;
|
158
168
|
do {
|
159
169
|
gpr_cv_signal(&w->cv);
|
160
170
|
w = w->next;
|
@@ -164,50 +174,33 @@ static void non_polling_poller_shutdown(grpc_exec_ctx *exec_ctx,
|
|
164
174
|
|
165
175
|
static const cq_poller_vtable g_poller_vtable_by_poller_type[] = {
|
166
176
|
/* GRPC_CQ_DEFAULT_POLLING */
|
167
|
-
{
|
168
|
-
|
169
|
-
.size = grpc_pollset_size,
|
170
|
-
.init = grpc_pollset_init,
|
171
|
-
.kick = grpc_pollset_kick,
|
172
|
-
.work = grpc_pollset_work,
|
173
|
-
.shutdown = grpc_pollset_shutdown,
|
174
|
-
.destroy = grpc_pollset_destroy},
|
177
|
+
{true, true, grpc_pollset_size, grpc_pollset_init, grpc_pollset_kick,
|
178
|
+
grpc_pollset_work, grpc_pollset_shutdown, grpc_pollset_destroy},
|
175
179
|
/* GRPC_CQ_NON_LISTENING */
|
176
|
-
{
|
177
|
-
|
178
|
-
.size = grpc_pollset_size,
|
179
|
-
.init = grpc_pollset_init,
|
180
|
-
.kick = grpc_pollset_kick,
|
181
|
-
.work = grpc_pollset_work,
|
182
|
-
.shutdown = grpc_pollset_shutdown,
|
183
|
-
.destroy = grpc_pollset_destroy},
|
180
|
+
{true, false, grpc_pollset_size, grpc_pollset_init, grpc_pollset_kick,
|
181
|
+
grpc_pollset_work, grpc_pollset_shutdown, grpc_pollset_destroy},
|
184
182
|
/* GRPC_CQ_NON_POLLING */
|
185
|
-
{
|
186
|
-
|
187
|
-
|
188
|
-
.init = non_polling_poller_init,
|
189
|
-
.kick = non_polling_poller_kick,
|
190
|
-
.work = non_polling_poller_work,
|
191
|
-
.shutdown = non_polling_poller_shutdown,
|
192
|
-
.destroy = non_polling_poller_destroy},
|
183
|
+
{false, false, non_polling_poller_size, non_polling_poller_init,
|
184
|
+
non_polling_poller_kick, non_polling_poller_work,
|
185
|
+
non_polling_poller_shutdown, non_polling_poller_destroy},
|
193
186
|
};
|
194
187
|
|
195
188
|
typedef struct cq_vtable {
|
196
189
|
grpc_cq_completion_type cq_completion_type;
|
197
190
|
size_t data_size;
|
198
|
-
void (*init)(void
|
199
|
-
void (*shutdown)(grpc_exec_ctx
|
200
|
-
void (*destroy)(void
|
201
|
-
bool (*begin_op)(grpc_completion_queue
|
202
|
-
void (*end_op)(grpc_exec_ctx
|
203
|
-
grpc_error
|
204
|
-
void (*done)(grpc_exec_ctx
|
205
|
-
grpc_cq_completion
|
206
|
-
void
|
207
|
-
grpc_event (*next)(grpc_completion_queue
|
208
|
-
void
|
209
|
-
grpc_event (*pluck)(grpc_completion_queue
|
210
|
-
gpr_timespec deadline, void
|
191
|
+
void (*init)(void* data);
|
192
|
+
void (*shutdown)(grpc_exec_ctx* exec_ctx, grpc_completion_queue* cq);
|
193
|
+
void (*destroy)(void* data);
|
194
|
+
bool (*begin_op)(grpc_completion_queue* cq, void* tag);
|
195
|
+
void (*end_op)(grpc_exec_ctx* exec_ctx, grpc_completion_queue* cq, void* tag,
|
196
|
+
grpc_error* error,
|
197
|
+
void (*done)(grpc_exec_ctx* exec_ctx, void* done_arg,
|
198
|
+
grpc_cq_completion* storage),
|
199
|
+
void* done_arg, grpc_cq_completion* storage);
|
200
|
+
grpc_event (*next)(grpc_completion_queue* cq, gpr_timespec deadline,
|
201
|
+
void* reserved);
|
202
|
+
grpc_event (*pluck)(grpc_completion_queue* cq, void* tag,
|
203
|
+
gpr_timespec deadline, void* reserved);
|
211
204
|
} cq_vtable;
|
212
205
|
|
213
206
|
/* Queue that holds the cq_completion_events. Internally uses gpr_mpscq queue
|
@@ -244,7 +237,7 @@ typedef struct cq_next_data {
|
|
244
237
|
typedef struct cq_pluck_data {
|
245
238
|
/** Completed events for completion-queues of type GRPC_CQ_PLUCK */
|
246
239
|
grpc_cq_completion completed_head;
|
247
|
-
grpc_cq_completion
|
240
|
+
grpc_cq_completion* completed_tail;
|
248
241
|
|
249
242
|
/** Number of pending events (+1 if we're not shutdown) */
|
250
243
|
gpr_atm pending_events;
|
@@ -271,13 +264,13 @@ struct grpc_completion_queue {
|
|
271
264
|
/** Once owning_refs drops to zero, we will destroy the cq */
|
272
265
|
gpr_refcount owning_refs;
|
273
266
|
|
274
|
-
gpr_mu
|
267
|
+
gpr_mu* mu;
|
275
268
|
|
276
|
-
const cq_vtable
|
277
|
-
const cq_poller_vtable
|
269
|
+
const cq_vtable* vtable;
|
270
|
+
const cq_poller_vtable* poller_vtable;
|
278
271
|
|
279
272
|
#ifndef NDEBUG
|
280
|
-
void
|
273
|
+
void** outstanding_tags;
|
281
274
|
size_t outstanding_tag_count;
|
282
275
|
size_t outstanding_tag_capacity;
|
283
276
|
#endif
|
@@ -287,99 +280,150 @@ struct grpc_completion_queue {
|
|
287
280
|
};
|
288
281
|
|
289
282
|
/* Forward declarations */
|
290
|
-
static void cq_finish_shutdown_next(grpc_exec_ctx
|
291
|
-
grpc_completion_queue
|
292
|
-
static void cq_finish_shutdown_pluck(grpc_exec_ctx
|
293
|
-
grpc_completion_queue
|
294
|
-
static void cq_shutdown_next(grpc_exec_ctx
|
295
|
-
grpc_completion_queue
|
296
|
-
static void cq_shutdown_pluck(grpc_exec_ctx
|
297
|
-
grpc_completion_queue
|
298
|
-
|
299
|
-
static bool cq_begin_op_for_next(grpc_completion_queue
|
300
|
-
static bool cq_begin_op_for_pluck(grpc_completion_queue
|
301
|
-
|
302
|
-
static void cq_end_op_for_next(grpc_exec_ctx
|
303
|
-
grpc_completion_queue
|
304
|
-
grpc_error
|
305
|
-
void (*done)(grpc_exec_ctx
|
306
|
-
void
|
307
|
-
grpc_cq_completion
|
308
|
-
void
|
309
|
-
|
310
|
-
static void cq_end_op_for_pluck(grpc_exec_ctx
|
311
|
-
grpc_completion_queue
|
312
|
-
grpc_error
|
313
|
-
void (*done)(grpc_exec_ctx
|
314
|
-
void
|
315
|
-
grpc_cq_completion
|
316
|
-
void
|
317
|
-
|
318
|
-
static grpc_event cq_next(grpc_completion_queue
|
319
|
-
void
|
320
|
-
|
321
|
-
static grpc_event cq_pluck(grpc_completion_queue
|
322
|
-
gpr_timespec deadline, void
|
323
|
-
|
324
|
-
static void cq_init_next(void
|
325
|
-
static void cq_init_pluck(void
|
326
|
-
static void cq_destroy_next(void
|
327
|
-
static void cq_destroy_pluck(void
|
283
|
+
static void cq_finish_shutdown_next(grpc_exec_ctx* exec_ctx,
|
284
|
+
grpc_completion_queue* cq);
|
285
|
+
static void cq_finish_shutdown_pluck(grpc_exec_ctx* exec_ctx,
|
286
|
+
grpc_completion_queue* cq);
|
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);
|
291
|
+
|
292
|
+
static bool cq_begin_op_for_next(grpc_completion_queue* cq, void* tag);
|
293
|
+
static bool cq_begin_op_for_pluck(grpc_completion_queue* cq, void* tag);
|
294
|
+
|
295
|
+
static void cq_end_op_for_next(grpc_exec_ctx* exec_ctx,
|
296
|
+
grpc_completion_queue* cq, void* tag,
|
297
|
+
grpc_error* error,
|
298
|
+
void (*done)(grpc_exec_ctx* exec_ctx,
|
299
|
+
void* done_arg,
|
300
|
+
grpc_cq_completion* storage),
|
301
|
+
void* done_arg, grpc_cq_completion* storage);
|
302
|
+
|
303
|
+
static void cq_end_op_for_pluck(grpc_exec_ctx* exec_ctx,
|
304
|
+
grpc_completion_queue* cq, void* tag,
|
305
|
+
grpc_error* error,
|
306
|
+
void (*done)(grpc_exec_ctx* exec_ctx,
|
307
|
+
void* done_arg,
|
308
|
+
grpc_cq_completion* storage),
|
309
|
+
void* done_arg, grpc_cq_completion* storage);
|
310
|
+
|
311
|
+
static grpc_event cq_next(grpc_completion_queue* cq, gpr_timespec deadline,
|
312
|
+
void* reserved);
|
313
|
+
|
314
|
+
static grpc_event cq_pluck(grpc_completion_queue* cq, void* tag,
|
315
|
+
gpr_timespec deadline, void* reserved);
|
316
|
+
|
317
|
+
static void cq_init_next(void* data);
|
318
|
+
static void cq_init_pluck(void* data);
|
319
|
+
static void cq_destroy_next(void* data);
|
320
|
+
static void cq_destroy_pluck(void* data);
|
328
321
|
|
329
322
|
/* Completion queue vtables based on the completion-type */
|
330
323
|
static const cq_vtable g_cq_vtable[] = {
|
331
324
|
/* GRPC_CQ_NEXT */
|
332
325
|
{GRPC_CQ_NEXT, sizeof(cq_next_data), cq_init_next, cq_shutdown_next,
|
333
|
-
cq_destroy_next, cq_begin_op_for_next, cq_end_op_for_next, cq_next,
|
326
|
+
cq_destroy_next, cq_begin_op_for_next, cq_end_op_for_next, cq_next,
|
327
|
+
nullptr},
|
334
328
|
/* GRPC_CQ_PLUCK */
|
335
329
|
{GRPC_CQ_PLUCK, sizeof(cq_pluck_data), cq_init_pluck, cq_shutdown_pluck,
|
336
|
-
cq_destroy_pluck, cq_begin_op_for_pluck, cq_end_op_for_pluck,
|
330
|
+
cq_destroy_pluck, cq_begin_op_for_pluck, cq_end_op_for_pluck, nullptr,
|
337
331
|
cq_pluck},
|
338
332
|
};
|
339
333
|
|
340
|
-
#define DATA_FROM_CQ(cq) ((void
|
334
|
+
#define DATA_FROM_CQ(cq) ((void*)(cq + 1))
|
341
335
|
#define POLLSET_FROM_CQ(cq) \
|
342
|
-
((grpc_pollset
|
343
|
-
|
344
|
-
|
345
|
-
|
346
|
-
|
347
|
-
|
348
|
-
|
349
|
-
|
350
|
-
|
351
|
-
|
352
|
-
|
353
|
-
|
354
|
-
|
355
|
-
|
336
|
+
((grpc_pollset*)(cq->vtable->data_size + (char*)DATA_FROM_CQ(cq)))
|
337
|
+
|
338
|
+
grpc_core::TraceFlag grpc_cq_pluck_trace(true, "queue_pluck");
|
339
|
+
grpc_core::TraceFlag grpc_cq_event_timeout_trace(true, "queue_timeout");
|
340
|
+
|
341
|
+
#define GRPC_SURFACE_TRACE_RETURNED_EVENT(cq, event) \
|
342
|
+
if (grpc_api_trace.enabled() && (grpc_cq_pluck_trace.enabled() || \
|
343
|
+
(event)->type != GRPC_QUEUE_TIMEOUT)) { \
|
344
|
+
char* _ev = grpc_event_string(event); \
|
345
|
+
gpr_log(GPR_INFO, "RETURN_EVENT[%p]: %s", cq, _ev); \
|
346
|
+
gpr_free(_ev); \
|
347
|
+
}
|
348
|
+
|
349
|
+
static void on_pollset_shutdown_done(grpc_exec_ctx* exec_ctx, void* cq,
|
350
|
+
grpc_error* error);
|
351
|
+
|
352
|
+
void grpc_cq_global_init() {
|
353
|
+
gpr_tls_init(&g_cached_event);
|
354
|
+
gpr_tls_init(&g_cached_cq);
|
355
|
+
}
|
356
|
+
|
357
|
+
void grpc_completion_queue_thread_local_cache_init(grpc_completion_queue* cq) {
|
358
|
+
if ((grpc_completion_queue*)gpr_tls_get(&g_cached_cq) == nullptr) {
|
359
|
+
gpr_tls_set(&g_cached_event, (intptr_t)0);
|
360
|
+
gpr_tls_set(&g_cached_cq, (intptr_t)cq);
|
361
|
+
}
|
362
|
+
}
|
363
|
+
|
364
|
+
int grpc_completion_queue_thread_local_cache_flush(grpc_completion_queue* cq,
|
365
|
+
void** tag, int* ok) {
|
366
|
+
grpc_cq_completion* storage =
|
367
|
+
(grpc_cq_completion*)gpr_tls_get(&g_cached_event);
|
368
|
+
int ret = 0;
|
369
|
+
if (storage != nullptr &&
|
370
|
+
(grpc_completion_queue*)gpr_tls_get(&g_cached_cq) == cq) {
|
371
|
+
*tag = storage->tag;
|
372
|
+
grpc_exec_ctx exec_ctx = GRPC_EXEC_CTX_INIT;
|
373
|
+
*ok = (storage->next & (uintptr_t)(1)) == 1;
|
374
|
+
storage->done(&exec_ctx, storage->done_arg, storage);
|
375
|
+
ret = 1;
|
376
|
+
cq_next_data* cqd = (cq_next_data*)DATA_FROM_CQ(cq);
|
377
|
+
if (gpr_atm_full_fetch_add(&cqd->pending_events, -1) == 1) {
|
378
|
+
GRPC_CQ_INTERNAL_REF(cq, "shutting_down");
|
379
|
+
gpr_mu_lock(cq->mu);
|
380
|
+
cq_finish_shutdown_next(&exec_ctx, cq);
|
381
|
+
gpr_mu_unlock(cq->mu);
|
382
|
+
GRPC_CQ_INTERNAL_UNREF(&exec_ctx, cq, "shutting_down");
|
383
|
+
}
|
384
|
+
grpc_exec_ctx_finish(&exec_ctx);
|
356
385
|
}
|
386
|
+
gpr_tls_set(&g_cached_event, (intptr_t)0);
|
387
|
+
gpr_tls_set(&g_cached_cq, (intptr_t)0);
|
357
388
|
|
358
|
-
|
359
|
-
|
389
|
+
return ret;
|
390
|
+
}
|
360
391
|
|
361
|
-
static void cq_event_queue_init(grpc_cq_event_queue
|
392
|
+
static void cq_event_queue_init(grpc_cq_event_queue* q) {
|
362
393
|
gpr_mpscq_init(&q->queue);
|
363
394
|
q->queue_lock = GPR_SPINLOCK_INITIALIZER;
|
364
395
|
gpr_atm_no_barrier_store(&q->num_queue_items, 0);
|
365
396
|
}
|
366
397
|
|
367
|
-
static void cq_event_queue_destroy(grpc_cq_event_queue
|
398
|
+
static void cq_event_queue_destroy(grpc_cq_event_queue* q) {
|
368
399
|
gpr_mpscq_destroy(&q->queue);
|
369
400
|
}
|
370
401
|
|
371
|
-
static bool cq_event_queue_push(grpc_cq_event_queue
|
372
|
-
gpr_mpscq_push(&q->queue, (gpr_mpscq_node
|
402
|
+
static bool cq_event_queue_push(grpc_cq_event_queue* q, grpc_cq_completion* c) {
|
403
|
+
gpr_mpscq_push(&q->queue, (gpr_mpscq_node*)c);
|
373
404
|
return gpr_atm_no_barrier_fetch_add(&q->num_queue_items, 1) == 0;
|
374
405
|
}
|
375
406
|
|
376
|
-
static grpc_cq_completion
|
377
|
-
grpc_cq_completion
|
407
|
+
static grpc_cq_completion* cq_event_queue_pop(grpc_cq_event_queue* q) {
|
408
|
+
grpc_cq_completion* c = nullptr;
|
409
|
+
grpc_exec_ctx exec_ctx = GRPC_EXEC_CTX_INIT;
|
410
|
+
|
378
411
|
if (gpr_spinlock_trylock(&q->queue_lock)) {
|
379
|
-
|
412
|
+
GRPC_STATS_INC_CQ_EV_QUEUE_TRYLOCK_SUCCESSES(&exec_ctx);
|
413
|
+
|
414
|
+
bool is_empty = false;
|
415
|
+
c = (grpc_cq_completion*)gpr_mpscq_pop_and_check_end(&q->queue, &is_empty);
|
380
416
|
gpr_spinlock_unlock(&q->queue_lock);
|
417
|
+
|
418
|
+
if (c == nullptr && !is_empty) {
|
419
|
+
GRPC_STATS_INC_CQ_EV_QUEUE_TRANSIENT_POP_FAILURES(&exec_ctx);
|
420
|
+
}
|
421
|
+
} else {
|
422
|
+
GRPC_STATS_INC_CQ_EV_QUEUE_TRYLOCK_FAILURES(&exec_ctx);
|
381
423
|
}
|
382
424
|
|
425
|
+
grpc_exec_ctx_finish(&exec_ctx);
|
426
|
+
|
383
427
|
if (c) {
|
384
428
|
gpr_atm_no_barrier_fetch_add(&q->num_queue_items, -1);
|
385
429
|
}
|
@@ -389,14 +433,14 @@ static grpc_cq_completion *cq_event_queue_pop(grpc_cq_event_queue *q) {
|
|
389
433
|
|
390
434
|
/* Note: The counter is not incremented/decremented atomically with push/pop.
|
391
435
|
* The count is only eventually consistent */
|
392
|
-
static long cq_event_queue_num_items(grpc_cq_event_queue
|
436
|
+
static long cq_event_queue_num_items(grpc_cq_event_queue* q) {
|
393
437
|
return (long)gpr_atm_no_barrier_load(&q->num_queue_items);
|
394
438
|
}
|
395
439
|
|
396
|
-
grpc_completion_queue
|
440
|
+
grpc_completion_queue* grpc_completion_queue_create_internal(
|
397
441
|
grpc_cq_completion_type completion_type,
|
398
442
|
grpc_cq_polling_type polling_type) {
|
399
|
-
grpc_completion_queue
|
443
|
+
grpc_completion_queue* cq;
|
400
444
|
|
401
445
|
GPR_TIMER_BEGIN("grpc_completion_queue_create_internal", 0);
|
402
446
|
|
@@ -405,17 +449,17 @@ grpc_completion_queue *grpc_completion_queue_create_internal(
|
|
405
449
|
"polling_type=%d)",
|
406
450
|
2, (completion_type, polling_type));
|
407
451
|
|
408
|
-
const cq_vtable
|
409
|
-
const cq_poller_vtable
|
452
|
+
const cq_vtable* vtable = &g_cq_vtable[completion_type];
|
453
|
+
const cq_poller_vtable* poller_vtable =
|
410
454
|
&g_poller_vtable_by_poller_type[polling_type];
|
411
455
|
|
412
456
|
grpc_exec_ctx exec_ctx = GRPC_EXEC_CTX_INIT;
|
413
457
|
GRPC_STATS_INC_CQS_CREATED(&exec_ctx);
|
414
458
|
grpc_exec_ctx_finish(&exec_ctx);
|
415
459
|
|
416
|
-
cq = (grpc_completion_queue
|
417
|
-
|
418
|
-
|
460
|
+
cq = (grpc_completion_queue*)gpr_zalloc(sizeof(grpc_completion_queue) +
|
461
|
+
vtable->data_size +
|
462
|
+
poller_vtable->size());
|
419
463
|
|
420
464
|
cq->vtable = vtable;
|
421
465
|
cq->poller_vtable = poller_vtable;
|
@@ -434,8 +478,8 @@ grpc_completion_queue *grpc_completion_queue_create_internal(
|
|
434
478
|
return cq;
|
435
479
|
}
|
436
480
|
|
437
|
-
static void cq_init_next(void
|
438
|
-
cq_next_data
|
481
|
+
static void cq_init_next(void* ptr) {
|
482
|
+
cq_next_data* cqd = (cq_next_data*)ptr;
|
439
483
|
/* Initial count is dropped by grpc_completion_queue_shutdown */
|
440
484
|
gpr_atm_no_barrier_store(&cqd->pending_events, 1);
|
441
485
|
cqd->shutdown_called = false;
|
@@ -443,14 +487,14 @@ static void cq_init_next(void *ptr) {
|
|
443
487
|
cq_event_queue_init(&cqd->queue);
|
444
488
|
}
|
445
489
|
|
446
|
-
static void cq_destroy_next(void
|
447
|
-
cq_next_data
|
490
|
+
static void cq_destroy_next(void* ptr) {
|
491
|
+
cq_next_data* cqd = (cq_next_data*)ptr;
|
448
492
|
GPR_ASSERT(cq_event_queue_num_items(&cqd->queue) == 0);
|
449
493
|
cq_event_queue_destroy(&cqd->queue);
|
450
494
|
}
|
451
495
|
|
452
|
-
static void cq_init_pluck(void
|
453
|
-
cq_pluck_data
|
496
|
+
static void cq_init_pluck(void* ptr) {
|
497
|
+
cq_pluck_data* cqd = (cq_pluck_data*)ptr;
|
454
498
|
/* Initial count is dropped by grpc_completion_queue_shutdown */
|
455
499
|
gpr_atm_no_barrier_store(&cqd->pending_events, 1);
|
456
500
|
cqd->completed_tail = &cqd->completed_head;
|
@@ -461,16 +505,16 @@ static void cq_init_pluck(void *ptr) {
|
|
461
505
|
gpr_atm_no_barrier_store(&cqd->things_queued_ever, 0);
|
462
506
|
}
|
463
507
|
|
464
|
-
static void cq_destroy_pluck(void
|
465
|
-
cq_pluck_data
|
508
|
+
static void cq_destroy_pluck(void* ptr) {
|
509
|
+
cq_pluck_data* cqd = (cq_pluck_data*)ptr;
|
466
510
|
GPR_ASSERT(cqd->completed_head.next == (uintptr_t)&cqd->completed_head);
|
467
511
|
}
|
468
512
|
|
469
|
-
grpc_cq_completion_type grpc_get_cq_completion_type(grpc_completion_queue
|
513
|
+
grpc_cq_completion_type grpc_get_cq_completion_type(grpc_completion_queue* cq) {
|
470
514
|
return cq->vtable->cq_completion_type;
|
471
515
|
}
|
472
516
|
|
473
|
-
int grpc_get_cq_poll_num(grpc_completion_queue
|
517
|
+
int grpc_get_cq_poll_num(grpc_completion_queue* cq) {
|
474
518
|
int cur_num_polls;
|
475
519
|
gpr_mu_lock(cq->mu);
|
476
520
|
cur_num_polls = cq->num_polls;
|
@@ -479,38 +523,38 @@ int grpc_get_cq_poll_num(grpc_completion_queue *cq) {
|
|
479
523
|
}
|
480
524
|
|
481
525
|
#ifndef NDEBUG
|
482
|
-
void grpc_cq_internal_ref(grpc_completion_queue
|
483
|
-
const char
|
484
|
-
if (
|
526
|
+
void grpc_cq_internal_ref(grpc_completion_queue* cq, const char* reason,
|
527
|
+
const char* file, int line) {
|
528
|
+
if (grpc_trace_cq_refcount.enabled()) {
|
485
529
|
gpr_atm val = gpr_atm_no_barrier_load(&cq->owning_refs.count);
|
486
530
|
gpr_log(file, line, GPR_LOG_SEVERITY_DEBUG,
|
487
531
|
"CQ:%p ref %" PRIdPTR " -> %" PRIdPTR " %s", cq, val, val + 1,
|
488
532
|
reason);
|
489
533
|
}
|
490
534
|
#else
|
491
|
-
void grpc_cq_internal_ref(grpc_completion_queue
|
535
|
+
void grpc_cq_internal_ref(grpc_completion_queue* cq) {
|
492
536
|
#endif
|
493
537
|
gpr_ref(&cq->owning_refs);
|
494
538
|
}
|
495
539
|
|
496
|
-
static void on_pollset_shutdown_done(grpc_exec_ctx
|
497
|
-
grpc_error
|
498
|
-
grpc_completion_queue
|
540
|
+
static void on_pollset_shutdown_done(grpc_exec_ctx* exec_ctx, void* arg,
|
541
|
+
grpc_error* error) {
|
542
|
+
grpc_completion_queue* cq = (grpc_completion_queue*)arg;
|
499
543
|
GRPC_CQ_INTERNAL_UNREF(exec_ctx, cq, "pollset_destroy");
|
500
544
|
}
|
501
545
|
|
502
546
|
#ifndef NDEBUG
|
503
|
-
void grpc_cq_internal_unref(grpc_exec_ctx
|
504
|
-
const char
|
505
|
-
if (
|
547
|
+
void grpc_cq_internal_unref(grpc_exec_ctx* exec_ctx, grpc_completion_queue* cq,
|
548
|
+
const char* reason, const char* file, int line) {
|
549
|
+
if (grpc_trace_cq_refcount.enabled()) {
|
506
550
|
gpr_atm val = gpr_atm_no_barrier_load(&cq->owning_refs.count);
|
507
551
|
gpr_log(file, line, GPR_LOG_SEVERITY_DEBUG,
|
508
552
|
"CQ:%p unref %" PRIdPTR " -> %" PRIdPTR " %s", cq, val, val - 1,
|
509
553
|
reason);
|
510
554
|
}
|
511
555
|
#else
|
512
|
-
void grpc_cq_internal_unref(grpc_exec_ctx
|
513
|
-
grpc_completion_queue
|
556
|
+
void grpc_cq_internal_unref(grpc_exec_ctx* exec_ctx,
|
557
|
+
grpc_completion_queue* cq) {
|
514
558
|
#endif
|
515
559
|
if (gpr_unref(&cq->owning_refs)) {
|
516
560
|
cq->vtable->destroy(DATA_FROM_CQ(cq));
|
@@ -523,7 +567,7 @@ void grpc_cq_internal_unref(grpc_exec_ctx *exec_ctx,
|
|
523
567
|
}
|
524
568
|
|
525
569
|
#ifndef NDEBUG
|
526
|
-
static void cq_check_tag(grpc_completion_queue
|
570
|
+
static void cq_check_tag(grpc_completion_queue* cq, void* tag, bool lock_cq) {
|
527
571
|
int found = 0;
|
528
572
|
if (lock_cq) {
|
529
573
|
gpr_mu_lock(cq->mu);
|
@@ -532,7 +576,7 @@ static void cq_check_tag(grpc_completion_queue *cq, void *tag, bool lock_cq) {
|
|
532
576
|
for (int i = 0; i < (int)cq->outstanding_tag_count; i++) {
|
533
577
|
if (cq->outstanding_tags[i] == tag) {
|
534
578
|
cq->outstanding_tag_count--;
|
535
|
-
GPR_SWAP(void
|
579
|
+
GPR_SWAP(void*, cq->outstanding_tags[i],
|
536
580
|
cq->outstanding_tags[cq->outstanding_tag_count]);
|
537
581
|
found = 1;
|
538
582
|
break;
|
@@ -546,12 +590,12 @@ static void cq_check_tag(grpc_completion_queue *cq, void *tag, bool lock_cq) {
|
|
546
590
|
GPR_ASSERT(found);
|
547
591
|
}
|
548
592
|
#else
|
549
|
-
static void cq_check_tag(grpc_completion_queue
|
593
|
+
static void cq_check_tag(grpc_completion_queue* cq, void* tag, bool lock_cq) {}
|
550
594
|
#endif
|
551
595
|
|
552
596
|
/* Atomically increments a counter only if the counter is not zero. Returns
|
553
597
|
* true if the increment was successful; false if the counter is zero */
|
554
|
-
static bool atm_inc_if_nonzero(gpr_atm
|
598
|
+
static bool atm_inc_if_nonzero(gpr_atm* counter) {
|
555
599
|
while (true) {
|
556
600
|
gpr_atm count = gpr_atm_acq_load(counter);
|
557
601
|
/* If zero, we are done. If not, we must to a CAS (instead of an atomic
|
@@ -567,22 +611,22 @@ static bool atm_inc_if_nonzero(gpr_atm *counter) {
|
|
567
611
|
return true;
|
568
612
|
}
|
569
613
|
|
570
|
-
static bool cq_begin_op_for_next(grpc_completion_queue
|
571
|
-
cq_next_data
|
614
|
+
static bool cq_begin_op_for_next(grpc_completion_queue* cq, void* tag) {
|
615
|
+
cq_next_data* cqd = (cq_next_data*)DATA_FROM_CQ(cq);
|
572
616
|
return atm_inc_if_nonzero(&cqd->pending_events);
|
573
617
|
}
|
574
618
|
|
575
|
-
static bool cq_begin_op_for_pluck(grpc_completion_queue
|
576
|
-
cq_pluck_data
|
619
|
+
static bool cq_begin_op_for_pluck(grpc_completion_queue* cq, void* tag) {
|
620
|
+
cq_pluck_data* cqd = (cq_pluck_data*)DATA_FROM_CQ(cq);
|
577
621
|
return atm_inc_if_nonzero(&cqd->pending_events);
|
578
622
|
}
|
579
623
|
|
580
|
-
bool grpc_cq_begin_op(grpc_completion_queue
|
624
|
+
bool grpc_cq_begin_op(grpc_completion_queue* cq, void* tag) {
|
581
625
|
#ifndef NDEBUG
|
582
626
|
gpr_mu_lock(cq->mu);
|
583
627
|
if (cq->outstanding_tag_count == cq->outstanding_tag_capacity) {
|
584
628
|
cq->outstanding_tag_capacity = GPR_MAX(4, 2 * cq->outstanding_tag_capacity);
|
585
|
-
cq->outstanding_tags = (void
|
629
|
+
cq->outstanding_tags = (void**)gpr_realloc(
|
586
630
|
cq->outstanding_tags,
|
587
631
|
sizeof(*cq->outstanding_tags) * cq->outstanding_tag_capacity);
|
588
632
|
}
|
@@ -595,30 +639,27 @@ bool grpc_cq_begin_op(grpc_completion_queue *cq, void *tag) {
|
|
595
639
|
/* Queue a GRPC_OP_COMPLETED operation to a completion queue (with a
|
596
640
|
* completion
|
597
641
|
* type of GRPC_CQ_NEXT) */
|
598
|
-
static void cq_end_op_for_next(grpc_exec_ctx
|
599
|
-
grpc_completion_queue
|
600
|
-
grpc_error
|
601
|
-
void (*done)(grpc_exec_ctx
|
602
|
-
void
|
603
|
-
grpc_cq_completion
|
604
|
-
void
|
642
|
+
static void cq_end_op_for_next(grpc_exec_ctx* exec_ctx,
|
643
|
+
grpc_completion_queue* cq, void* tag,
|
644
|
+
grpc_error* error,
|
645
|
+
void (*done)(grpc_exec_ctx* exec_ctx,
|
646
|
+
void* done_arg,
|
647
|
+
grpc_cq_completion* storage),
|
648
|
+
void* done_arg, grpc_cq_completion* storage) {
|
605
649
|
GPR_TIMER_BEGIN("cq_end_op_for_next", 0);
|
606
650
|
|
607
|
-
if (
|
608
|
-
(
|
609
|
-
|
610
|
-
const char *errmsg = grpc_error_string(error);
|
651
|
+
if (grpc_api_trace.enabled() ||
|
652
|
+
(grpc_trace_operation_failures.enabled() && error != GRPC_ERROR_NONE)) {
|
653
|
+
const char* errmsg = grpc_error_string(error);
|
611
654
|
GRPC_API_TRACE(
|
612
655
|
"cq_end_op_for_next(exec_ctx=%p, cq=%p, tag=%p, error=%s, "
|
613
656
|
"done=%p, done_arg=%p, storage=%p)",
|
614
657
|
7, (exec_ctx, cq, tag, errmsg, done, done_arg, storage));
|
615
|
-
if (
|
616
|
-
error != GRPC_ERROR_NONE) {
|
658
|
+
if (grpc_trace_operation_failures.enabled() && error != GRPC_ERROR_NONE) {
|
617
659
|
gpr_log(GPR_ERROR, "Operation failed: tag=%p, error=%s", tag, errmsg);
|
618
660
|
}
|
619
661
|
}
|
620
|
-
|
621
|
-
cq_next_data *cqd = (cq_next_data *)DATA_FROM_CQ(cq);
|
662
|
+
cq_next_data* cqd = (cq_next_data*)DATA_FROM_CQ(cq);
|
622
663
|
int is_success = (error == GRPC_ERROR_NONE);
|
623
664
|
|
624
665
|
storage->tag = tag;
|
@@ -628,44 +669,50 @@ static void cq_end_op_for_next(grpc_exec_ctx *exec_ctx,
|
|
628
669
|
|
629
670
|
cq_check_tag(cq, tag, true); /* Used in debug builds only */
|
630
671
|
|
631
|
-
|
632
|
-
|
633
|
-
|
634
|
-
|
635
|
-
|
636
|
-
|
637
|
-
|
638
|
-
|
639
|
-
|
640
|
-
|
641
|
-
|
642
|
-
|
643
|
-
|
644
|
-
|
645
|
-
|
646
|
-
|
647
|
-
|
672
|
+
if ((grpc_completion_queue*)gpr_tls_get(&g_cached_cq) == cq &&
|
673
|
+
(grpc_cq_completion*)gpr_tls_get(&g_cached_event) == nullptr) {
|
674
|
+
gpr_tls_set(&g_cached_event, (intptr_t)storage);
|
675
|
+
} else {
|
676
|
+
/* Add the completion to the queue */
|
677
|
+
bool is_first = cq_event_queue_push(&cqd->queue, storage);
|
678
|
+
gpr_atm_no_barrier_fetch_add(&cqd->things_queued_ever, 1);
|
679
|
+
|
680
|
+
/* Since we do not hold the cq lock here, it is important to do an 'acquire'
|
681
|
+
load here (instead of a 'no_barrier' load) to match with the release
|
682
|
+
store
|
683
|
+
(done via gpr_atm_full_fetch_add(pending_events, -1)) in cq_shutdown_next
|
684
|
+
*/
|
685
|
+
bool will_definitely_shutdown = gpr_atm_acq_load(&cqd->pending_events) == 1;
|
686
|
+
|
687
|
+
if (!will_definitely_shutdown) {
|
688
|
+
/* Only kick if this is the first item queued */
|
689
|
+
if (is_first) {
|
690
|
+
gpr_mu_lock(cq->mu);
|
691
|
+
grpc_error* kick_error =
|
692
|
+
cq->poller_vtable->kick(exec_ctx, POLLSET_FROM_CQ(cq), nullptr);
|
693
|
+
gpr_mu_unlock(cq->mu);
|
648
694
|
|
649
|
-
|
650
|
-
|
651
|
-
|
652
|
-
|
695
|
+
if (kick_error != GRPC_ERROR_NONE) {
|
696
|
+
const char* msg = grpc_error_string(kick_error);
|
697
|
+
gpr_log(GPR_ERROR, "Kick failed: %s", msg);
|
698
|
+
GRPC_ERROR_UNREF(kick_error);
|
699
|
+
}
|
653
700
|
}
|
654
|
-
|
655
|
-
|
701
|
+
if (gpr_atm_full_fetch_add(&cqd->pending_events, -1) == 1) {
|
702
|
+
GRPC_CQ_INTERNAL_REF(cq, "shutting_down");
|
703
|
+
gpr_mu_lock(cq->mu);
|
704
|
+
cq_finish_shutdown_next(exec_ctx, cq);
|
705
|
+
gpr_mu_unlock(cq->mu);
|
706
|
+
GRPC_CQ_INTERNAL_UNREF(exec_ctx, cq, "shutting_down");
|
707
|
+
}
|
708
|
+
} else {
|
656
709
|
GRPC_CQ_INTERNAL_REF(cq, "shutting_down");
|
710
|
+
gpr_atm_rel_store(&cqd->pending_events, 0);
|
657
711
|
gpr_mu_lock(cq->mu);
|
658
712
|
cq_finish_shutdown_next(exec_ctx, cq);
|
659
713
|
gpr_mu_unlock(cq->mu);
|
660
714
|
GRPC_CQ_INTERNAL_UNREF(exec_ctx, cq, "shutting_down");
|
661
715
|
}
|
662
|
-
} else {
|
663
|
-
GRPC_CQ_INTERNAL_REF(cq, "shutting_down");
|
664
|
-
gpr_atm_rel_store(&cqd->pending_events, 0);
|
665
|
-
gpr_mu_lock(cq->mu);
|
666
|
-
cq_finish_shutdown_next(exec_ctx, cq);
|
667
|
-
gpr_mu_unlock(cq->mu);
|
668
|
-
GRPC_CQ_INTERNAL_UNREF(exec_ctx, cq, "shutting_down");
|
669
716
|
}
|
670
717
|
|
671
718
|
GPR_TIMER_END("cq_end_op_for_next", 0);
|
@@ -676,28 +723,26 @@ static void cq_end_op_for_next(grpc_exec_ctx *exec_ctx,
|
|
676
723
|
/* Queue a GRPC_OP_COMPLETED operation to a completion queue (with a
|
677
724
|
* completion
|
678
725
|
* type of GRPC_CQ_PLUCK) */
|
679
|
-
static void cq_end_op_for_pluck(grpc_exec_ctx
|
680
|
-
grpc_completion_queue
|
681
|
-
grpc_error
|
682
|
-
void (*done)(grpc_exec_ctx
|
683
|
-
void
|
684
|
-
grpc_cq_completion
|
685
|
-
void
|
686
|
-
cq_pluck_data
|
726
|
+
static void cq_end_op_for_pluck(grpc_exec_ctx* exec_ctx,
|
727
|
+
grpc_completion_queue* cq, void* tag,
|
728
|
+
grpc_error* error,
|
729
|
+
void (*done)(grpc_exec_ctx* exec_ctx,
|
730
|
+
void* done_arg,
|
731
|
+
grpc_cq_completion* storage),
|
732
|
+
void* done_arg, grpc_cq_completion* storage) {
|
733
|
+
cq_pluck_data* cqd = (cq_pluck_data*)DATA_FROM_CQ(cq);
|
687
734
|
int is_success = (error == GRPC_ERROR_NONE);
|
688
735
|
|
689
736
|
GPR_TIMER_BEGIN("cq_end_op_for_pluck", 0);
|
690
737
|
|
691
|
-
if (
|
692
|
-
(
|
693
|
-
|
694
|
-
const char *errmsg = grpc_error_string(error);
|
738
|
+
if (grpc_api_trace.enabled() ||
|
739
|
+
(grpc_trace_operation_failures.enabled() && error != GRPC_ERROR_NONE)) {
|
740
|
+
const char* errmsg = grpc_error_string(error);
|
695
741
|
GRPC_API_TRACE(
|
696
742
|
"cq_end_op_for_pluck(exec_ctx=%p, cq=%p, tag=%p, error=%s, "
|
697
743
|
"done=%p, done_arg=%p, storage=%p)",
|
698
744
|
7, (exec_ctx, cq, tag, errmsg, done, done_arg, storage));
|
699
|
-
if (
|
700
|
-
error != GRPC_ERROR_NONE) {
|
745
|
+
if (grpc_trace_operation_failures.enabled() && error != GRPC_ERROR_NONE) {
|
701
746
|
gpr_log(GPR_ERROR, "Operation failed: tag=%p, error=%s", tag, errmsg);
|
702
747
|
}
|
703
748
|
}
|
@@ -720,7 +765,7 @@ static void cq_end_op_for_pluck(grpc_exec_ctx *exec_ctx,
|
|
720
765
|
cq_finish_shutdown_pluck(exec_ctx, cq);
|
721
766
|
gpr_mu_unlock(cq->mu);
|
722
767
|
} else {
|
723
|
-
grpc_pollset_worker
|
768
|
+
grpc_pollset_worker* pluck_worker = nullptr;
|
724
769
|
for (int i = 0; i < cqd->num_pluckers; i++) {
|
725
770
|
if (cqd->pluckers[i].tag == tag) {
|
726
771
|
pluck_worker = *cqd->pluckers[i].worker;
|
@@ -728,13 +773,13 @@ static void cq_end_op_for_pluck(grpc_exec_ctx *exec_ctx,
|
|
728
773
|
}
|
729
774
|
}
|
730
775
|
|
731
|
-
grpc_error
|
776
|
+
grpc_error* kick_error =
|
732
777
|
cq->poller_vtable->kick(exec_ctx, POLLSET_FROM_CQ(cq), pluck_worker);
|
733
778
|
|
734
779
|
gpr_mu_unlock(cq->mu);
|
735
780
|
|
736
781
|
if (kick_error != GRPC_ERROR_NONE) {
|
737
|
-
const char
|
782
|
+
const char* msg = grpc_error_string(kick_error);
|
738
783
|
gpr_log(GPR_ERROR, "Kick failed: %s", msg);
|
739
784
|
|
740
785
|
GRPC_ERROR_UNREF(kick_error);
|
@@ -746,28 +791,28 @@ static void cq_end_op_for_pluck(grpc_exec_ctx *exec_ctx,
|
|
746
791
|
GRPC_ERROR_UNREF(error);
|
747
792
|
}
|
748
793
|
|
749
|
-
void grpc_cq_end_op(grpc_exec_ctx
|
750
|
-
void
|
751
|
-
void (*done)(grpc_exec_ctx
|
752
|
-
grpc_cq_completion
|
753
|
-
void
|
794
|
+
void grpc_cq_end_op(grpc_exec_ctx* exec_ctx, grpc_completion_queue* cq,
|
795
|
+
void* tag, grpc_error* error,
|
796
|
+
void (*done)(grpc_exec_ctx* exec_ctx, void* done_arg,
|
797
|
+
grpc_cq_completion* storage),
|
798
|
+
void* done_arg, grpc_cq_completion* storage) {
|
754
799
|
cq->vtable->end_op(exec_ctx, cq, tag, error, done, done_arg, storage);
|
755
800
|
}
|
756
801
|
|
757
802
|
typedef struct {
|
758
803
|
gpr_atm last_seen_things_queued_ever;
|
759
|
-
grpc_completion_queue
|
760
|
-
|
761
|
-
grpc_cq_completion
|
762
|
-
void
|
804
|
+
grpc_completion_queue* cq;
|
805
|
+
grpc_millis deadline;
|
806
|
+
grpc_cq_completion* stolen_completion;
|
807
|
+
void* tag; /* for pluck */
|
763
808
|
bool first_loop;
|
764
809
|
} cq_is_finished_arg;
|
765
810
|
|
766
|
-
static bool cq_is_next_finished(grpc_exec_ctx
|
767
|
-
cq_is_finished_arg
|
768
|
-
grpc_completion_queue
|
769
|
-
cq_next_data
|
770
|
-
GPR_ASSERT(a->stolen_completion ==
|
811
|
+
static bool cq_is_next_finished(grpc_exec_ctx* exec_ctx, void* arg) {
|
812
|
+
cq_is_finished_arg* a = (cq_is_finished_arg*)arg;
|
813
|
+
grpc_completion_queue* cq = a->cq;
|
814
|
+
cq_next_data* cqd = (cq_next_data*)DATA_FROM_CQ(cq);
|
815
|
+
GPR_ASSERT(a->stolen_completion == nullptr);
|
771
816
|
|
772
817
|
gpr_atm current_last_seen_things_queued_ever =
|
773
818
|
gpr_atm_no_barrier_load(&cqd->things_queued_ever);
|
@@ -782,42 +827,40 @@ static bool cq_is_next_finished(grpc_exec_ctx *exec_ctx, void *arg) {
|
|
782
827
|
* is ok and doesn't affect correctness. Might effect the tail latencies a
|
783
828
|
* bit) */
|
784
829
|
a->stolen_completion = cq_event_queue_pop(&cqd->queue);
|
785
|
-
if (a->stolen_completion !=
|
830
|
+
if (a->stolen_completion != nullptr) {
|
786
831
|
return true;
|
787
832
|
}
|
788
833
|
}
|
789
|
-
return !a->first_loop &&
|
790
|
-
gpr_time_cmp(a->deadline, gpr_now(a->deadline.clock_type)) < 0;
|
834
|
+
return !a->first_loop && a->deadline < grpc_exec_ctx_now(exec_ctx);
|
791
835
|
}
|
792
836
|
|
793
837
|
#ifndef NDEBUG
|
794
|
-
static void dump_pending_tags(grpc_completion_queue
|
795
|
-
if (!
|
838
|
+
static void dump_pending_tags(grpc_completion_queue* cq) {
|
839
|
+
if (!grpc_trace_pending_tags.enabled()) return;
|
796
840
|
|
797
841
|
gpr_strvec v;
|
798
842
|
gpr_strvec_init(&v);
|
799
843
|
gpr_strvec_add(&v, gpr_strdup("PENDING TAGS:"));
|
800
844
|
gpr_mu_lock(cq->mu);
|
801
845
|
for (size_t i = 0; i < cq->outstanding_tag_count; i++) {
|
802
|
-
char
|
846
|
+
char* s;
|
803
847
|
gpr_asprintf(&s, " %p", cq->outstanding_tags[i]);
|
804
848
|
gpr_strvec_add(&v, s);
|
805
849
|
}
|
806
850
|
gpr_mu_unlock(cq->mu);
|
807
|
-
char
|
851
|
+
char* out = gpr_strvec_flatten(&v, nullptr);
|
808
852
|
gpr_strvec_destroy(&v);
|
809
853
|
gpr_log(GPR_DEBUG, "%s", out);
|
810
854
|
gpr_free(out);
|
811
855
|
}
|
812
856
|
#else
|
813
|
-
static void dump_pending_tags(grpc_completion_queue
|
857
|
+
static void dump_pending_tags(grpc_completion_queue* cq) {}
|
814
858
|
#endif
|
815
859
|
|
816
|
-
static grpc_event cq_next(grpc_completion_queue
|
817
|
-
void
|
860
|
+
static grpc_event cq_next(grpc_completion_queue* cq, gpr_timespec deadline,
|
861
|
+
void* reserved) {
|
818
862
|
grpc_event ret;
|
819
|
-
|
820
|
-
cq_next_data *cqd = (cq_next_data *)DATA_FROM_CQ(cq);
|
863
|
+
cq_next_data* cqd = (cq_next_data*)DATA_FROM_CQ(cq);
|
821
864
|
|
822
865
|
GPR_TIMER_BEGIN("grpc_completion_queue_next", 0);
|
823
866
|
|
@@ -827,33 +870,31 @@ static grpc_event cq_next(grpc_completion_queue *cq, gpr_timespec deadline,
|
|
827
870
|
"deadline=gpr_timespec { tv_sec: %" PRId64
|
828
871
|
", tv_nsec: %d, clock_type: %d }, "
|
829
872
|
"reserved=%p)",
|
830
|
-
5,
|
831
|
-
|
873
|
+
5,
|
874
|
+
(cq, deadline.tv_sec, deadline.tv_nsec, (int)deadline.clock_type,
|
875
|
+
reserved));
|
832
876
|
GPR_ASSERT(!reserved);
|
833
877
|
|
834
878
|
dump_pending_tags(cq);
|
835
879
|
|
836
|
-
deadline = gpr_convert_clock_type(deadline, GPR_CLOCK_MONOTONIC);
|
837
|
-
|
838
880
|
GRPC_CQ_INTERNAL_REF(cq, "next");
|
839
881
|
|
882
|
+
grpc_millis deadline_millis = grpc_timespec_to_millis_round_up(deadline);
|
840
883
|
cq_is_finished_arg is_finished_arg = {
|
841
|
-
|
842
|
-
|
843
|
-
|
844
|
-
|
845
|
-
|
846
|
-
|
847
|
-
.first_loop = true};
|
884
|
+
gpr_atm_no_barrier_load(&cqd->things_queued_ever),
|
885
|
+
cq,
|
886
|
+
deadline_millis,
|
887
|
+
nullptr,
|
888
|
+
nullptr,
|
889
|
+
true};
|
848
890
|
grpc_exec_ctx exec_ctx =
|
849
891
|
GRPC_EXEC_CTX_INITIALIZER(0, cq_is_next_finished, &is_finished_arg);
|
850
|
-
|
851
892
|
for (;;) {
|
852
|
-
|
893
|
+
grpc_millis iteration_deadline = deadline_millis;
|
853
894
|
|
854
|
-
if (is_finished_arg.stolen_completion !=
|
855
|
-
grpc_cq_completion
|
856
|
-
is_finished_arg.stolen_completion =
|
895
|
+
if (is_finished_arg.stolen_completion != nullptr) {
|
896
|
+
grpc_cq_completion* c = is_finished_arg.stolen_completion;
|
897
|
+
is_finished_arg.stolen_completion = nullptr;
|
857
898
|
ret.type = GRPC_OP_COMPLETE;
|
858
899
|
ret.success = c->next & 1u;
|
859
900
|
ret.tag = c->tag;
|
@@ -861,9 +902,9 @@ static grpc_event cq_next(grpc_completion_queue *cq, gpr_timespec deadline,
|
|
861
902
|
break;
|
862
903
|
}
|
863
904
|
|
864
|
-
grpc_cq_completion
|
905
|
+
grpc_cq_completion* c = cq_event_queue_pop(&cqd->queue);
|
865
906
|
|
866
|
-
if (c !=
|
907
|
+
if (c != nullptr) {
|
867
908
|
ret.type = GRPC_OP_COMPLETE;
|
868
909
|
ret.success = c->next & 1u;
|
869
910
|
ret.tag = c->tag;
|
@@ -876,7 +917,7 @@ static grpc_event cq_next(grpc_completion_queue *cq, gpr_timespec deadline,
|
|
876
917
|
attempt at popping. Not doing this can potentially deadlock this
|
877
918
|
thread forever (if the deadline is infinity) */
|
878
919
|
if (cq_event_queue_num_items(&cqd->queue) > 0) {
|
879
|
-
iteration_deadline =
|
920
|
+
iteration_deadline = 0;
|
880
921
|
}
|
881
922
|
}
|
882
923
|
|
@@ -897,8 +938,8 @@ static grpc_event cq_next(grpc_completion_queue *cq, gpr_timespec deadline,
|
|
897
938
|
break;
|
898
939
|
}
|
899
940
|
|
900
|
-
|
901
|
-
|
941
|
+
if (!is_finished_arg.first_loop &&
|
942
|
+
grpc_exec_ctx_now(&exec_ctx) >= deadline_millis) {
|
902
943
|
memset(&ret, 0, sizeof(ret));
|
903
944
|
ret.type = GRPC_QUEUE_TIMEOUT;
|
904
945
|
dump_pending_tags(cq);
|
@@ -908,12 +949,12 @@ static grpc_event cq_next(grpc_completion_queue *cq, gpr_timespec deadline,
|
|
908
949
|
/* The main polling work happens in grpc_pollset_work */
|
909
950
|
gpr_mu_lock(cq->mu);
|
910
951
|
cq->num_polls++;
|
911
|
-
grpc_error
|
912
|
-
|
952
|
+
grpc_error* err = cq->poller_vtable->work(&exec_ctx, POLLSET_FROM_CQ(cq),
|
953
|
+
nullptr, iteration_deadline);
|
913
954
|
gpr_mu_unlock(cq->mu);
|
914
955
|
|
915
956
|
if (err != GRPC_ERROR_NONE) {
|
916
|
-
const char
|
957
|
+
const char* msg = grpc_error_string(err);
|
917
958
|
gpr_log(GPR_ERROR, "Completion queue next failed: %s", msg);
|
918
959
|
|
919
960
|
GRPC_ERROR_UNREF(err);
|
@@ -928,14 +969,14 @@ static grpc_event cq_next(grpc_completion_queue *cq, gpr_timespec deadline,
|
|
928
969
|
if (cq_event_queue_num_items(&cqd->queue) > 0 &&
|
929
970
|
gpr_atm_acq_load(&cqd->pending_events) > 0) {
|
930
971
|
gpr_mu_lock(cq->mu);
|
931
|
-
cq->poller_vtable->kick(&exec_ctx, POLLSET_FROM_CQ(cq),
|
972
|
+
cq->poller_vtable->kick(&exec_ctx, POLLSET_FROM_CQ(cq), nullptr);
|
932
973
|
gpr_mu_unlock(cq->mu);
|
933
974
|
}
|
934
975
|
|
935
976
|
GRPC_SURFACE_TRACE_RETURNED_EVENT(cq, &ret);
|
936
977
|
GRPC_CQ_INTERNAL_UNREF(&exec_ctx, cq, "next");
|
937
978
|
grpc_exec_ctx_finish(&exec_ctx);
|
938
|
-
GPR_ASSERT(is_finished_arg.stolen_completion ==
|
979
|
+
GPR_ASSERT(is_finished_arg.stolen_completion == nullptr);
|
939
980
|
|
940
981
|
GPR_TIMER_END("grpc_completion_queue_next", 0);
|
941
982
|
|
@@ -948,9 +989,9 @@ static grpc_event cq_next(grpc_completion_queue *cq, gpr_timespec deadline,
|
|
948
989
|
- Must be called only once in completion queue's lifetime
|
949
990
|
- grpc_completion_queue_shutdown() MUST have been called before calling
|
950
991
|
this function */
|
951
|
-
static void cq_finish_shutdown_next(grpc_exec_ctx
|
952
|
-
grpc_completion_queue
|
953
|
-
cq_next_data
|
992
|
+
static void cq_finish_shutdown_next(grpc_exec_ctx* exec_ctx,
|
993
|
+
grpc_completion_queue* cq) {
|
994
|
+
cq_next_data* cqd = (cq_next_data*)DATA_FROM_CQ(cq);
|
954
995
|
|
955
996
|
GPR_ASSERT(cqd->shutdown_called);
|
956
997
|
GPR_ASSERT(gpr_atm_no_barrier_load(&cqd->pending_events) == 0);
|
@@ -959,9 +1000,9 @@ static void cq_finish_shutdown_next(grpc_exec_ctx *exec_ctx,
|
|
959
1000
|
&cq->pollset_shutdown_done);
|
960
1001
|
}
|
961
1002
|
|
962
|
-
static void cq_shutdown_next(grpc_exec_ctx
|
963
|
-
grpc_completion_queue
|
964
|
-
cq_next_data
|
1003
|
+
static void cq_shutdown_next(grpc_exec_ctx* exec_ctx,
|
1004
|
+
grpc_completion_queue* cq) {
|
1005
|
+
cq_next_data* cqd = (cq_next_data*)DATA_FROM_CQ(cq);
|
965
1006
|
|
966
1007
|
/* Need an extra ref for cq here because:
|
967
1008
|
* We call cq_finish_shutdown_next() below, that would call pollset shutdown.
|
@@ -987,14 +1028,14 @@ static void cq_shutdown_next(grpc_exec_ctx *exec_ctx,
|
|
987
1028
|
GRPC_CQ_INTERNAL_UNREF(exec_ctx, cq, "shutting_down");
|
988
1029
|
}
|
989
1030
|
|
990
|
-
grpc_event grpc_completion_queue_next(grpc_completion_queue
|
991
|
-
gpr_timespec deadline, void
|
1031
|
+
grpc_event grpc_completion_queue_next(grpc_completion_queue* cq,
|
1032
|
+
gpr_timespec deadline, void* reserved) {
|
992
1033
|
return cq->vtable->next(cq, deadline, reserved);
|
993
1034
|
}
|
994
1035
|
|
995
|
-
static int add_plucker(grpc_completion_queue
|
996
|
-
grpc_pollset_worker
|
997
|
-
cq_pluck_data
|
1036
|
+
static int add_plucker(grpc_completion_queue* cq, void* tag,
|
1037
|
+
grpc_pollset_worker** worker) {
|
1038
|
+
cq_pluck_data* cqd = (cq_pluck_data*)DATA_FROM_CQ(cq);
|
998
1039
|
if (cqd->num_pluckers == GRPC_MAX_COMPLETION_QUEUE_PLUCKERS) {
|
999
1040
|
return 0;
|
1000
1041
|
}
|
@@ -1004,9 +1045,9 @@ static int add_plucker(grpc_completion_queue *cq, void *tag,
|
|
1004
1045
|
return 1;
|
1005
1046
|
}
|
1006
1047
|
|
1007
|
-
static void del_plucker(grpc_completion_queue
|
1008
|
-
grpc_pollset_worker
|
1009
|
-
cq_pluck_data
|
1048
|
+
static void del_plucker(grpc_completion_queue* cq, void* tag,
|
1049
|
+
grpc_pollset_worker** worker) {
|
1050
|
+
cq_pluck_data* cqd = (cq_pluck_data*)DATA_FROM_CQ(cq);
|
1010
1051
|
for (int i = 0; i < cqd->num_pluckers; i++) {
|
1011
1052
|
if (cqd->pluckers[i].tag == tag && cqd->pluckers[i].worker == worker) {
|
1012
1053
|
cqd->num_pluckers--;
|
@@ -1017,21 +1058,21 @@ static void del_plucker(grpc_completion_queue *cq, void *tag,
|
|
1017
1058
|
GPR_UNREACHABLE_CODE(return );
|
1018
1059
|
}
|
1019
1060
|
|
1020
|
-
static bool cq_is_pluck_finished(grpc_exec_ctx
|
1021
|
-
cq_is_finished_arg
|
1022
|
-
grpc_completion_queue
|
1023
|
-
cq_pluck_data
|
1061
|
+
static bool cq_is_pluck_finished(grpc_exec_ctx* exec_ctx, void* arg) {
|
1062
|
+
cq_is_finished_arg* a = (cq_is_finished_arg*)arg;
|
1063
|
+
grpc_completion_queue* cq = a->cq;
|
1064
|
+
cq_pluck_data* cqd = (cq_pluck_data*)DATA_FROM_CQ(cq);
|
1024
1065
|
|
1025
|
-
GPR_ASSERT(a->stolen_completion ==
|
1066
|
+
GPR_ASSERT(a->stolen_completion == nullptr);
|
1026
1067
|
gpr_atm current_last_seen_things_queued_ever =
|
1027
1068
|
gpr_atm_no_barrier_load(&cqd->things_queued_ever);
|
1028
1069
|
if (current_last_seen_things_queued_ever != a->last_seen_things_queued_ever) {
|
1029
1070
|
gpr_mu_lock(cq->mu);
|
1030
1071
|
a->last_seen_things_queued_ever =
|
1031
1072
|
gpr_atm_no_barrier_load(&cqd->things_queued_ever);
|
1032
|
-
grpc_cq_completion
|
1033
|
-
grpc_cq_completion
|
1034
|
-
while ((c = (grpc_cq_completion
|
1073
|
+
grpc_cq_completion* c;
|
1074
|
+
grpc_cq_completion* prev = &cqd->completed_head;
|
1075
|
+
while ((c = (grpc_cq_completion*)(prev->next & ~(uintptr_t)1)) !=
|
1035
1076
|
&cqd->completed_head) {
|
1036
1077
|
if (c->tag == a->tag) {
|
1037
1078
|
prev->next = (prev->next & (uintptr_t)1) | (c->next & ~(uintptr_t)1);
|
@@ -1046,54 +1087,51 @@ static bool cq_is_pluck_finished(grpc_exec_ctx *exec_ctx, void *arg) {
|
|
1046
1087
|
}
|
1047
1088
|
gpr_mu_unlock(cq->mu);
|
1048
1089
|
}
|
1049
|
-
return !a->first_loop &&
|
1050
|
-
gpr_time_cmp(a->deadline, gpr_now(a->deadline.clock_type)) < 0;
|
1090
|
+
return !a->first_loop && a->deadline < grpc_exec_ctx_now(exec_ctx);
|
1051
1091
|
}
|
1052
1092
|
|
1053
|
-
static grpc_event cq_pluck(grpc_completion_queue
|
1054
|
-
gpr_timespec deadline, void
|
1093
|
+
static grpc_event cq_pluck(grpc_completion_queue* cq, void* tag,
|
1094
|
+
gpr_timespec deadline, void* reserved) {
|
1055
1095
|
grpc_event ret;
|
1056
|
-
grpc_cq_completion
|
1057
|
-
grpc_cq_completion
|
1058
|
-
grpc_pollset_worker
|
1059
|
-
|
1060
|
-
cq_pluck_data *cqd = (cq_pluck_data *)DATA_FROM_CQ(cq);
|
1096
|
+
grpc_cq_completion* c;
|
1097
|
+
grpc_cq_completion* prev;
|
1098
|
+
grpc_pollset_worker* worker = nullptr;
|
1099
|
+
cq_pluck_data* cqd = (cq_pluck_data*)DATA_FROM_CQ(cq);
|
1061
1100
|
|
1062
1101
|
GPR_TIMER_BEGIN("grpc_completion_queue_pluck", 0);
|
1063
1102
|
|
1064
|
-
if (
|
1103
|
+
if (grpc_cq_pluck_trace.enabled()) {
|
1065
1104
|
GRPC_API_TRACE(
|
1066
1105
|
"grpc_completion_queue_pluck("
|
1067
1106
|
"cq=%p, tag=%p, "
|
1068
1107
|
"deadline=gpr_timespec { tv_sec: %" PRId64
|
1069
1108
|
", tv_nsec: %d, clock_type: %d }, "
|
1070
1109
|
"reserved=%p)",
|
1071
|
-
6,
|
1072
|
-
|
1110
|
+
6,
|
1111
|
+
(cq, tag, deadline.tv_sec, deadline.tv_nsec, (int)deadline.clock_type,
|
1112
|
+
reserved));
|
1073
1113
|
}
|
1074
1114
|
GPR_ASSERT(!reserved);
|
1075
1115
|
|
1076
1116
|
dump_pending_tags(cq);
|
1077
1117
|
|
1078
|
-
deadline = gpr_convert_clock_type(deadline, GPR_CLOCK_MONOTONIC);
|
1079
|
-
|
1080
1118
|
GRPC_CQ_INTERNAL_REF(cq, "pluck");
|
1081
1119
|
gpr_mu_lock(cq->mu);
|
1120
|
+
grpc_millis deadline_millis = grpc_timespec_to_millis_round_up(deadline);
|
1082
1121
|
cq_is_finished_arg is_finished_arg = {
|
1083
|
-
|
1084
|
-
|
1085
|
-
|
1086
|
-
|
1087
|
-
|
1088
|
-
|
1089
|
-
.first_loop = true};
|
1122
|
+
gpr_atm_no_barrier_load(&cqd->things_queued_ever),
|
1123
|
+
cq,
|
1124
|
+
deadline_millis,
|
1125
|
+
nullptr,
|
1126
|
+
tag,
|
1127
|
+
true};
|
1090
1128
|
grpc_exec_ctx exec_ctx =
|
1091
1129
|
GRPC_EXEC_CTX_INITIALIZER(0, cq_is_pluck_finished, &is_finished_arg);
|
1092
1130
|
for (;;) {
|
1093
|
-
if (is_finished_arg.stolen_completion !=
|
1131
|
+
if (is_finished_arg.stolen_completion != nullptr) {
|
1094
1132
|
gpr_mu_unlock(cq->mu);
|
1095
1133
|
c = is_finished_arg.stolen_completion;
|
1096
|
-
is_finished_arg.stolen_completion =
|
1134
|
+
is_finished_arg.stolen_completion = nullptr;
|
1097
1135
|
ret.type = GRPC_OP_COMPLETE;
|
1098
1136
|
ret.success = c->next & 1u;
|
1099
1137
|
ret.tag = c->tag;
|
@@ -1101,7 +1139,7 @@ static grpc_event cq_pluck(grpc_completion_queue *cq, void *tag,
|
|
1101
1139
|
break;
|
1102
1140
|
}
|
1103
1141
|
prev = &cqd->completed_head;
|
1104
|
-
while ((c = (grpc_cq_completion
|
1142
|
+
while ((c = (grpc_cq_completion*)(prev->next & ~(uintptr_t)1)) !=
|
1105
1143
|
&cqd->completed_head) {
|
1106
1144
|
if (c->tag == tag) {
|
1107
1145
|
prev->next = (prev->next & (uintptr_t)1) | (c->next & ~(uintptr_t)1);
|
@@ -1135,8 +1173,8 @@ static grpc_event cq_pluck(grpc_completion_queue *cq, void *tag,
|
|
1135
1173
|
dump_pending_tags(cq);
|
1136
1174
|
break;
|
1137
1175
|
}
|
1138
|
-
|
1139
|
-
|
1176
|
+
if (!is_finished_arg.first_loop &&
|
1177
|
+
grpc_exec_ctx_now(&exec_ctx) >= deadline_millis) {
|
1140
1178
|
del_plucker(cq, tag, &worker);
|
1141
1179
|
gpr_mu_unlock(cq->mu);
|
1142
1180
|
memset(&ret, 0, sizeof(ret));
|
@@ -1144,14 +1182,13 @@ static grpc_event cq_pluck(grpc_completion_queue *cq, void *tag,
|
|
1144
1182
|
dump_pending_tags(cq);
|
1145
1183
|
break;
|
1146
1184
|
}
|
1147
|
-
|
1148
1185
|
cq->num_polls++;
|
1149
|
-
grpc_error
|
1150
|
-
&worker,
|
1186
|
+
grpc_error* err = cq->poller_vtable->work(&exec_ctx, POLLSET_FROM_CQ(cq),
|
1187
|
+
&worker, deadline_millis);
|
1151
1188
|
if (err != GRPC_ERROR_NONE) {
|
1152
1189
|
del_plucker(cq, tag, &worker);
|
1153
1190
|
gpr_mu_unlock(cq->mu);
|
1154
|
-
const char
|
1191
|
+
const char* msg = grpc_error_string(err);
|
1155
1192
|
gpr_log(GPR_ERROR, "Completion queue pluck failed: %s", msg);
|
1156
1193
|
|
1157
1194
|
GRPC_ERROR_UNREF(err);
|
@@ -1167,21 +1204,21 @@ done:
|
|
1167
1204
|
GRPC_SURFACE_TRACE_RETURNED_EVENT(cq, &ret);
|
1168
1205
|
GRPC_CQ_INTERNAL_UNREF(&exec_ctx, cq, "pluck");
|
1169
1206
|
grpc_exec_ctx_finish(&exec_ctx);
|
1170
|
-
GPR_ASSERT(is_finished_arg.stolen_completion ==
|
1207
|
+
GPR_ASSERT(is_finished_arg.stolen_completion == nullptr);
|
1171
1208
|
|
1172
1209
|
GPR_TIMER_END("grpc_completion_queue_pluck", 0);
|
1173
1210
|
|
1174
1211
|
return ret;
|
1175
1212
|
}
|
1176
1213
|
|
1177
|
-
grpc_event grpc_completion_queue_pluck(grpc_completion_queue
|
1178
|
-
gpr_timespec deadline, void
|
1214
|
+
grpc_event grpc_completion_queue_pluck(grpc_completion_queue* cq, void* tag,
|
1215
|
+
gpr_timespec deadline, void* reserved) {
|
1179
1216
|
return cq->vtable->pluck(cq, tag, deadline, reserved);
|
1180
1217
|
}
|
1181
1218
|
|
1182
|
-
static void cq_finish_shutdown_pluck(grpc_exec_ctx
|
1183
|
-
grpc_completion_queue
|
1184
|
-
cq_pluck_data
|
1219
|
+
static void cq_finish_shutdown_pluck(grpc_exec_ctx* exec_ctx,
|
1220
|
+
grpc_completion_queue* cq) {
|
1221
|
+
cq_pluck_data* cqd = (cq_pluck_data*)DATA_FROM_CQ(cq);
|
1185
1222
|
|
1186
1223
|
GPR_ASSERT(cqd->shutdown_called);
|
1187
1224
|
GPR_ASSERT(!gpr_atm_no_barrier_load(&cqd->shutdown));
|
@@ -1193,9 +1230,9 @@ static void cq_finish_shutdown_pluck(grpc_exec_ctx *exec_ctx,
|
|
1193
1230
|
|
1194
1231
|
/* NOTE: This function is almost exactly identical to cq_shutdown_next() but
|
1195
1232
|
* merging them is a bit tricky and probably not worth it */
|
1196
|
-
static void cq_shutdown_pluck(grpc_exec_ctx
|
1197
|
-
grpc_completion_queue
|
1198
|
-
cq_pluck_data
|
1233
|
+
static void cq_shutdown_pluck(grpc_exec_ctx* exec_ctx,
|
1234
|
+
grpc_completion_queue* cq) {
|
1235
|
+
cq_pluck_data* cqd = (cq_pluck_data*)DATA_FROM_CQ(cq);
|
1199
1236
|
|
1200
1237
|
/* Need an extra ref for cq here because:
|
1201
1238
|
* We call cq_finish_shutdown_pluck() below, that would call pollset shutdown.
|
@@ -1220,7 +1257,7 @@ static void cq_shutdown_pluck(grpc_exec_ctx *exec_ctx,
|
|
1220
1257
|
|
1221
1258
|
/* Shutdown simply drops a ref that we reserved at creation time; if we drop
|
1222
1259
|
to zero here, then enter shutdown mode and wake up any waiters */
|
1223
|
-
void grpc_completion_queue_shutdown(grpc_completion_queue
|
1260
|
+
void grpc_completion_queue_shutdown(grpc_completion_queue* cq) {
|
1224
1261
|
grpc_exec_ctx exec_ctx = GRPC_EXEC_CTX_INIT;
|
1225
1262
|
GPR_TIMER_BEGIN("grpc_completion_queue_shutdown", 0);
|
1226
1263
|
GRPC_API_TRACE("grpc_completion_queue_shutdown(cq=%p)", 1, (cq));
|
@@ -1229,7 +1266,7 @@ void grpc_completion_queue_shutdown(grpc_completion_queue *cq) {
|
|
1229
1266
|
GPR_TIMER_END("grpc_completion_queue_shutdown", 0);
|
1230
1267
|
}
|
1231
1268
|
|
1232
|
-
void grpc_completion_queue_destroy(grpc_completion_queue
|
1269
|
+
void grpc_completion_queue_destroy(grpc_completion_queue* cq) {
|
1233
1270
|
GRPC_API_TRACE("grpc_completion_queue_destroy(cq=%p)", 1, (cq));
|
1234
1271
|
GPR_TIMER_BEGIN("grpc_completion_queue_destroy", 0);
|
1235
1272
|
grpc_completion_queue_shutdown(cq);
|
@@ -1240,10 +1277,10 @@ void grpc_completion_queue_destroy(grpc_completion_queue *cq) {
|
|
1240
1277
|
GPR_TIMER_END("grpc_completion_queue_destroy", 0);
|
1241
1278
|
}
|
1242
1279
|
|
1243
|
-
grpc_pollset
|
1244
|
-
return cq->poller_vtable->can_get_pollset ? POLLSET_FROM_CQ(cq) :
|
1280
|
+
grpc_pollset* grpc_cq_pollset(grpc_completion_queue* cq) {
|
1281
|
+
return cq->poller_vtable->can_get_pollset ? POLLSET_FROM_CQ(cq) : nullptr;
|
1245
1282
|
}
|
1246
1283
|
|
1247
|
-
bool grpc_cq_can_listen(grpc_completion_queue
|
1284
|
+
bool grpc_cq_can_listen(grpc_completion_queue* cq) {
|
1248
1285
|
return cq->poller_vtable->can_listen;
|
1249
1286
|
}
|