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
data/src/core/lib/iomgr/error.h
CHANGED
@@ -19,11 +19,12 @@
|
|
19
19
|
#ifndef GRPC_CORE_LIB_IOMGR_ERROR_H
|
20
20
|
#define GRPC_CORE_LIB_IOMGR_ERROR_H
|
21
21
|
|
22
|
+
#include <inttypes.h>
|
22
23
|
#include <stdbool.h>
|
23
|
-
#include <stdint.h>
|
24
24
|
|
25
25
|
#include <grpc/slice.h>
|
26
26
|
#include <grpc/status.h>
|
27
|
+
#include <grpc/support/log.h>
|
27
28
|
#include <grpc/support/time.h>
|
28
29
|
|
29
30
|
#include "src/core/lib/debug/trace.h"
|
@@ -38,9 +39,7 @@ extern "C" {
|
|
38
39
|
|
39
40
|
typedef struct grpc_error grpc_error;
|
40
41
|
|
41
|
-
|
42
|
-
extern grpc_tracer_flag grpc_trace_error_refcount;
|
43
|
-
#endif
|
42
|
+
extern grpc_core::DebugOnlyTraceFlag grpc_trace_error_refcount;
|
44
43
|
|
45
44
|
typedef enum {
|
46
45
|
/// 'errno' from the operating system
|
@@ -122,15 +121,15 @@ typedef enum {
|
|
122
121
|
/// They are always even so that other code (particularly combiner locks,
|
123
122
|
/// polling engines) can safely use the lower bit for themselves.
|
124
123
|
|
125
|
-
#define GRPC_ERROR_NONE ((grpc_error
|
126
|
-
#define GRPC_ERROR_OOM ((grpc_error
|
127
|
-
#define GRPC_ERROR_CANCELLED ((grpc_error
|
124
|
+
#define GRPC_ERROR_NONE ((grpc_error*)NULL)
|
125
|
+
#define GRPC_ERROR_OOM ((grpc_error*)2)
|
126
|
+
#define GRPC_ERROR_CANCELLED ((grpc_error*)4)
|
128
127
|
|
129
|
-
const char
|
128
|
+
const char* grpc_error_string(grpc_error* error);
|
130
129
|
|
131
130
|
/// Create an error - but use GRPC_ERROR_CREATE instead
|
132
|
-
grpc_error
|
133
|
-
grpc_error
|
131
|
+
grpc_error* grpc_error_create(const char* file, int line, grpc_slice desc,
|
132
|
+
grpc_error** referencing, size_t num_referencing);
|
134
133
|
/// Create an error (this is the preferred way of generating an error that is
|
135
134
|
/// not due to a system call - for system calls, use GRPC_OS_ERROR or
|
136
135
|
/// GRPC_WSA_ERROR as appropriate)
|
@@ -156,44 +155,50 @@ grpc_error *grpc_error_create(const char *file, int line, grpc_slice desc,
|
|
156
155
|
errs, count)
|
157
156
|
|
158
157
|
#ifndef NDEBUG
|
159
|
-
grpc_error
|
160
|
-
void grpc_error_unref(grpc_error
|
158
|
+
grpc_error* grpc_error_ref(grpc_error* err, const char* file, int line);
|
159
|
+
void grpc_error_unref(grpc_error* err, const char* file, int line);
|
161
160
|
#define GRPC_ERROR_REF(err) grpc_error_ref(err, __FILE__, __LINE__)
|
162
161
|
#define GRPC_ERROR_UNREF(err) grpc_error_unref(err, __FILE__, __LINE__)
|
163
162
|
#else
|
164
|
-
grpc_error
|
165
|
-
void grpc_error_unref(grpc_error
|
163
|
+
grpc_error* grpc_error_ref(grpc_error* err);
|
164
|
+
void grpc_error_unref(grpc_error* err);
|
166
165
|
#define GRPC_ERROR_REF(err) grpc_error_ref(err)
|
167
166
|
#define GRPC_ERROR_UNREF(err) grpc_error_unref(err)
|
168
167
|
#endif
|
169
168
|
|
170
|
-
grpc_error
|
169
|
+
grpc_error* grpc_error_set_int(grpc_error* src, grpc_error_ints which,
|
171
170
|
intptr_t value) GRPC_MUST_USE_RESULT;
|
172
|
-
bool grpc_error_get_int(grpc_error
|
173
|
-
grpc_error
|
171
|
+
bool grpc_error_get_int(grpc_error* error, grpc_error_ints which, intptr_t* p);
|
172
|
+
grpc_error* grpc_error_set_str(grpc_error* src, grpc_error_strs which,
|
174
173
|
grpc_slice str) GRPC_MUST_USE_RESULT;
|
175
174
|
/// Returns false if the specified string is not set.
|
176
175
|
/// Caller does NOT own the slice.
|
177
|
-
bool grpc_error_get_str(grpc_error
|
178
|
-
grpc_slice
|
176
|
+
bool grpc_error_get_str(grpc_error* error, grpc_error_strs which,
|
177
|
+
grpc_slice* s);
|
179
178
|
|
180
179
|
/// Add a child error: an error that is believed to have contributed to this
|
181
180
|
/// error occurring. Allows root causing high level errors from lower level
|
182
181
|
/// errors that contributed to them.
|
183
|
-
grpc_error
|
184
|
-
grpc_error
|
185
|
-
grpc_error
|
186
|
-
const char
|
182
|
+
grpc_error* grpc_error_add_child(grpc_error* src,
|
183
|
+
grpc_error* child) GRPC_MUST_USE_RESULT;
|
184
|
+
grpc_error* grpc_os_error(const char* file, int line, int err,
|
185
|
+
const char* call_name) GRPC_MUST_USE_RESULT;
|
186
|
+
|
187
|
+
inline grpc_error* grpc_assert_never_ok(grpc_error* error) {
|
188
|
+
GPR_ASSERT(error != GRPC_ERROR_NONE);
|
189
|
+
return error;
|
190
|
+
}
|
191
|
+
|
187
192
|
/// create an error associated with errno!=0 (an 'operating system' error)
|
188
193
|
#define GRPC_OS_ERROR(err, call_name) \
|
189
|
-
grpc_os_error(__FILE__, __LINE__, err, call_name)
|
190
|
-
grpc_error
|
191
|
-
const char
|
194
|
+
grpc_assert_never_ok(grpc_os_error(__FILE__, __LINE__, err, call_name))
|
195
|
+
grpc_error* grpc_wsa_error(const char* file, int line, int err,
|
196
|
+
const char* call_name) GRPC_MUST_USE_RESULT;
|
192
197
|
/// windows only: create an error associated with WSAGetLastError()!=0
|
193
198
|
#define GRPC_WSA_ERROR(err, call_name) \
|
194
199
|
grpc_wsa_error(__FILE__, __LINE__, err, call_name)
|
195
200
|
|
196
|
-
bool grpc_log_if_error(const char
|
201
|
+
bool grpc_log_if_error(const char* what, grpc_error* error, const char* file,
|
197
202
|
int line);
|
198
203
|
#define GRPC_LOG_IF_ERROR(what, error) \
|
199
204
|
grpc_log_if_error((what), (error), __FILE__, __LINE__)
|
@@ -23,11 +23,16 @@
|
|
23
23
|
#include <stdbool.h> // TODO, do we need this?
|
24
24
|
|
25
25
|
#include <grpc/support/sync.h>
|
26
|
+
#include "src/core/lib/iomgr/error.h"
|
27
|
+
|
28
|
+
#ifdef __cplusplus
|
29
|
+
extern "C" {
|
30
|
+
#endif
|
26
31
|
|
27
32
|
typedef struct grpc_linked_error grpc_linked_error;
|
28
33
|
|
29
34
|
struct grpc_linked_error {
|
30
|
-
grpc_error
|
35
|
+
grpc_error* err;
|
31
36
|
uint8_t next;
|
32
37
|
};
|
33
38
|
|
@@ -55,6 +60,10 @@ struct grpc_error {
|
|
55
60
|
intptr_t arena[0];
|
56
61
|
};
|
57
62
|
|
58
|
-
bool grpc_error_is_special(grpc_error
|
63
|
+
bool grpc_error_is_special(struct grpc_error* err);
|
64
|
+
|
65
|
+
#ifdef __cplusplus
|
66
|
+
}
|
67
|
+
#endif
|
59
68
|
|
60
69
|
#endif /* GRPC_CORE_LIB_IOMGR_ERROR_INTERNAL_H */
|
@@ -18,13 +18,15 @@
|
|
18
18
|
|
19
19
|
#include "src/core/lib/iomgr/port.h"
|
20
20
|
|
21
|
+
#include <grpc/support/log.h>
|
22
|
+
|
21
23
|
/* This polling engine is only relevant on linux kernels supporting epoll() */
|
22
24
|
#ifdef GRPC_LINUX_EPOLL
|
23
|
-
|
24
25
|
#include "src/core/lib/iomgr/ev_epoll1_linux.h"
|
25
26
|
|
26
27
|
#include <assert.h>
|
27
28
|
#include <errno.h>
|
29
|
+
#include <limits.h>
|
28
30
|
#include <poll.h>
|
29
31
|
#include <pthread.h>
|
30
32
|
#include <string.h>
|
@@ -34,18 +36,18 @@
|
|
34
36
|
|
35
37
|
#include <grpc/support/alloc.h>
|
36
38
|
#include <grpc/support/cpu.h>
|
37
|
-
#include <grpc/support/log.h>
|
38
39
|
#include <grpc/support/string_util.h>
|
39
40
|
#include <grpc/support/tls.h>
|
40
41
|
#include <grpc/support/useful.h>
|
41
42
|
|
42
43
|
#include "src/core/lib/debug/stats.h"
|
44
|
+
#include "src/core/lib/iomgr/block_annotate.h"
|
43
45
|
#include "src/core/lib/iomgr/ev_posix.h"
|
44
46
|
#include "src/core/lib/iomgr/iomgr_internal.h"
|
45
47
|
#include "src/core/lib/iomgr/lockfree_event.h"
|
46
48
|
#include "src/core/lib/iomgr/wakeup_fd_posix.h"
|
47
49
|
#include "src/core/lib/profiling/timers.h"
|
48
|
-
#include "src/core/lib/support/
|
50
|
+
#include "src/core/lib/support/manual_constructor.h"
|
49
51
|
#include "src/core/lib/support/string.h"
|
50
52
|
|
51
53
|
static grpc_wakeup_fd global_wakeup_fd;
|
@@ -111,10 +113,10 @@ static void epoll_set_shutdown() {
|
|
111
113
|
struct grpc_fd {
|
112
114
|
int fd;
|
113
115
|
|
114
|
-
|
115
|
-
|
116
|
+
grpc_core::ManualConstructor<grpc_core::LockfreeEvent> read_closure;
|
117
|
+
grpc_core::ManualConstructor<grpc_core::LockfreeEvent> write_closure;
|
116
118
|
|
117
|
-
struct grpc_fd
|
119
|
+
struct grpc_fd* freelist_next;
|
118
120
|
|
119
121
|
/* The pollset that last noticed that the fd is readable. The actual type
|
120
122
|
* stored in this is (grpc_pollset *) */
|
@@ -132,7 +134,7 @@ static void fd_global_shutdown(void);
|
|
132
134
|
|
133
135
|
typedef enum { UNKICKED, KICKED, DESIGNATED_POLLER } kick_state;
|
134
136
|
|
135
|
-
static const char
|
137
|
+
static const char* kick_state_string(kick_state st) {
|
136
138
|
switch (st) {
|
137
139
|
case UNKICKED:
|
138
140
|
return "UNKICKED";
|
@@ -148,8 +150,8 @@ struct grpc_pollset_worker {
|
|
148
150
|
kick_state state;
|
149
151
|
int kick_state_mutator; // which line of code last changed kick state
|
150
152
|
bool initialized_cv;
|
151
|
-
grpc_pollset_worker
|
152
|
-
grpc_pollset_worker
|
153
|
+
grpc_pollset_worker* next;
|
154
|
+
grpc_pollset_worker* prev;
|
153
155
|
gpr_cv cv;
|
154
156
|
grpc_closure_list schedule_on_end_work;
|
155
157
|
};
|
@@ -164,29 +166,29 @@ struct grpc_pollset_worker {
|
|
164
166
|
|
165
167
|
typedef struct pollset_neighborhood {
|
166
168
|
gpr_mu mu;
|
167
|
-
grpc_pollset
|
169
|
+
grpc_pollset* active_root;
|
168
170
|
char pad[GPR_CACHELINE_SIZE];
|
169
171
|
} pollset_neighborhood;
|
170
172
|
|
171
173
|
struct grpc_pollset {
|
172
174
|
gpr_mu mu;
|
173
|
-
pollset_neighborhood
|
175
|
+
pollset_neighborhood* neighborhood;
|
174
176
|
bool reassigning_neighborhood;
|
175
|
-
grpc_pollset_worker
|
177
|
+
grpc_pollset_worker* root_worker;
|
176
178
|
bool kicked_without_poller;
|
177
179
|
|
178
180
|
/* Set to true if the pollset is observed to have no workers available to
|
179
181
|
poll */
|
180
182
|
bool seen_inactive;
|
181
183
|
bool shutting_down; /* Is the pollset shutting down ? */
|
182
|
-
grpc_closure
|
184
|
+
grpc_closure* shutdown_closure; /* Called after after shutdown is complete */
|
183
185
|
|
184
186
|
/* Number of workers who are *about-to* attach themselves to the pollset
|
185
187
|
* worker list */
|
186
188
|
int begin_refs;
|
187
189
|
|
188
|
-
grpc_pollset
|
189
|
-
grpc_pollset
|
190
|
+
grpc_pollset* next;
|
191
|
+
grpc_pollset* prev;
|
190
192
|
};
|
191
193
|
|
192
194
|
/*******************************************************************************
|
@@ -201,8 +203,8 @@ struct grpc_pollset_set {
|
|
201
203
|
* Common helpers
|
202
204
|
*/
|
203
205
|
|
204
|
-
static bool append_error(grpc_error
|
205
|
-
const char
|
206
|
+
static bool append_error(grpc_error** composite, grpc_error* error,
|
207
|
+
const char* desc) {
|
206
208
|
if (error == GRPC_ERROR_NONE) return true;
|
207
209
|
if (*composite == GRPC_ERROR_NONE) {
|
208
210
|
*composite = GRPC_ERROR_CREATE_FROM_COPIED_STRING(desc);
|
@@ -233,7 +235,7 @@ static bool append_error(grpc_error **composite, grpc_error *error,
|
|
233
235
|
* alarm 'epoch'). This wakeup_fd gives us something to alert on when such a
|
234
236
|
* case occurs. */
|
235
237
|
|
236
|
-
static grpc_fd
|
238
|
+
static grpc_fd* fd_freelist = nullptr;
|
237
239
|
static gpr_mu fd_freelist_mu;
|
238
240
|
|
239
241
|
static void fd_global_init(void) { gpr_mu_init(&fd_freelist_mu); }
|
@@ -241,40 +243,42 @@ static void fd_global_init(void) { gpr_mu_init(&fd_freelist_mu); }
|
|
241
243
|
static void fd_global_shutdown(void) {
|
242
244
|
gpr_mu_lock(&fd_freelist_mu);
|
243
245
|
gpr_mu_unlock(&fd_freelist_mu);
|
244
|
-
while (fd_freelist !=
|
245
|
-
grpc_fd
|
246
|
+
while (fd_freelist != nullptr) {
|
247
|
+
grpc_fd* fd = fd_freelist;
|
246
248
|
fd_freelist = fd_freelist->freelist_next;
|
247
249
|
gpr_free(fd);
|
248
250
|
}
|
249
251
|
gpr_mu_destroy(&fd_freelist_mu);
|
250
252
|
}
|
251
253
|
|
252
|
-
static grpc_fd
|
253
|
-
grpc_fd
|
254
|
+
static grpc_fd* fd_create(int fd, const char* name) {
|
255
|
+
grpc_fd* new_fd = nullptr;
|
254
256
|
|
255
257
|
gpr_mu_lock(&fd_freelist_mu);
|
256
|
-
if (fd_freelist !=
|
258
|
+
if (fd_freelist != nullptr) {
|
257
259
|
new_fd = fd_freelist;
|
258
260
|
fd_freelist = fd_freelist->freelist_next;
|
259
261
|
}
|
260
262
|
gpr_mu_unlock(&fd_freelist_mu);
|
261
263
|
|
262
|
-
if (new_fd ==
|
263
|
-
new_fd = (grpc_fd
|
264
|
+
if (new_fd == nullptr) {
|
265
|
+
new_fd = (grpc_fd*)gpr_malloc(sizeof(grpc_fd));
|
266
|
+
new_fd->read_closure.Init();
|
267
|
+
new_fd->write_closure.Init();
|
264
268
|
}
|
265
269
|
|
266
270
|
new_fd->fd = fd;
|
267
|
-
|
268
|
-
|
271
|
+
new_fd->read_closure->InitEvent();
|
272
|
+
new_fd->write_closure->InitEvent();
|
269
273
|
gpr_atm_no_barrier_store(&new_fd->read_notifier_pollset, (gpr_atm)NULL);
|
270
274
|
|
271
|
-
new_fd->freelist_next =
|
275
|
+
new_fd->freelist_next = nullptr;
|
272
276
|
|
273
|
-
char
|
277
|
+
char* fd_name;
|
274
278
|
gpr_asprintf(&fd_name, "%s fd=%d", name, fd);
|
275
279
|
grpc_iomgr_register_object(&new_fd->iomgr_object, fd_name);
|
276
280
|
#ifndef NDEBUG
|
277
|
-
if (
|
281
|
+
if (grpc_trace_fd_refcount.enabled()) {
|
278
282
|
gpr_log(GPR_DEBUG, "FD %d %p create %s", fd, new_fd, fd_name);
|
279
283
|
}
|
280
284
|
#endif
|
@@ -290,35 +294,34 @@ static grpc_fd *fd_create(int fd, const char *name) {
|
|
290
294
|
return new_fd;
|
291
295
|
}
|
292
296
|
|
293
|
-
static int fd_wrapped_fd(grpc_fd
|
297
|
+
static int fd_wrapped_fd(grpc_fd* fd) { return fd->fd; }
|
294
298
|
|
295
299
|
/* if 'releasing_fd' is true, it means that we are going to detach the internal
|
296
300
|
* fd from grpc_fd structure (i.e which means we should not be calling
|
297
301
|
* shutdown() syscall on that fd) */
|
298
|
-
static void fd_shutdown_internal(grpc_exec_ctx
|
299
|
-
grpc_error
|
300
|
-
if (
|
301
|
-
GRPC_ERROR_REF(why))) {
|
302
|
+
static void fd_shutdown_internal(grpc_exec_ctx* exec_ctx, grpc_fd* fd,
|
303
|
+
grpc_error* why, bool releasing_fd) {
|
304
|
+
if (fd->read_closure->SetShutdown(exec_ctx, GRPC_ERROR_REF(why))) {
|
302
305
|
if (!releasing_fd) {
|
303
306
|
shutdown(fd->fd, SHUT_RDWR);
|
304
307
|
}
|
305
|
-
|
308
|
+
fd->write_closure->SetShutdown(exec_ctx, GRPC_ERROR_REF(why));
|
306
309
|
}
|
307
310
|
GRPC_ERROR_UNREF(why);
|
308
311
|
}
|
309
312
|
|
310
313
|
/* Might be called multiple times */
|
311
|
-
static void fd_shutdown(grpc_exec_ctx
|
314
|
+
static void fd_shutdown(grpc_exec_ctx* exec_ctx, grpc_fd* fd, grpc_error* why) {
|
312
315
|
fd_shutdown_internal(exec_ctx, fd, why, false);
|
313
316
|
}
|
314
317
|
|
315
|
-
static void fd_orphan(grpc_exec_ctx
|
316
|
-
grpc_closure
|
317
|
-
bool already_closed, const char
|
318
|
-
grpc_error
|
319
|
-
bool is_release_fd = (release_fd !=
|
318
|
+
static void fd_orphan(grpc_exec_ctx* exec_ctx, grpc_fd* fd,
|
319
|
+
grpc_closure* on_done, int* release_fd,
|
320
|
+
bool already_closed, const char* reason) {
|
321
|
+
grpc_error* error = GRPC_ERROR_NONE;
|
322
|
+
bool is_release_fd = (release_fd != nullptr);
|
320
323
|
|
321
|
-
if (!
|
324
|
+
if (!fd->read_closure->IsShutdown()) {
|
322
325
|
fd_shutdown_internal(exec_ctx, fd,
|
323
326
|
GRPC_ERROR_CREATE_FROM_COPIED_STRING(reason),
|
324
327
|
is_release_fd);
|
@@ -335,8 +338,8 @@ static void fd_orphan(grpc_exec_ctx *exec_ctx, grpc_fd *fd,
|
|
335
338
|
GRPC_CLOSURE_SCHED(exec_ctx, on_done, GRPC_ERROR_REF(error));
|
336
339
|
|
337
340
|
grpc_iomgr_unregister_object(&fd->iomgr_object);
|
338
|
-
|
339
|
-
|
341
|
+
fd->read_closure->DestroyEvent();
|
342
|
+
fd->write_closure->DestroyEvent();
|
340
343
|
|
341
344
|
gpr_mu_lock(&fd_freelist_mu);
|
342
345
|
fd->freelist_next = fd_freelist;
|
@@ -344,35 +347,35 @@ static void fd_orphan(grpc_exec_ctx *exec_ctx, grpc_fd *fd,
|
|
344
347
|
gpr_mu_unlock(&fd_freelist_mu);
|
345
348
|
}
|
346
349
|
|
347
|
-
static grpc_pollset
|
348
|
-
grpc_fd
|
350
|
+
static grpc_pollset* fd_get_read_notifier_pollset(grpc_exec_ctx* exec_ctx,
|
351
|
+
grpc_fd* fd) {
|
349
352
|
gpr_atm notifier = gpr_atm_acq_load(&fd->read_notifier_pollset);
|
350
|
-
return (grpc_pollset
|
353
|
+
return (grpc_pollset*)notifier;
|
351
354
|
}
|
352
355
|
|
353
|
-
static bool fd_is_shutdown(grpc_fd
|
354
|
-
return
|
356
|
+
static bool fd_is_shutdown(grpc_fd* fd) {
|
357
|
+
return fd->read_closure->IsShutdown();
|
355
358
|
}
|
356
359
|
|
357
|
-
static void fd_notify_on_read(grpc_exec_ctx
|
358
|
-
grpc_closure
|
359
|
-
|
360
|
+
static void fd_notify_on_read(grpc_exec_ctx* exec_ctx, grpc_fd* fd,
|
361
|
+
grpc_closure* closure) {
|
362
|
+
fd->read_closure->NotifyOn(exec_ctx, closure);
|
360
363
|
}
|
361
364
|
|
362
|
-
static void fd_notify_on_write(grpc_exec_ctx
|
363
|
-
grpc_closure
|
364
|
-
|
365
|
+
static void fd_notify_on_write(grpc_exec_ctx* exec_ctx, grpc_fd* fd,
|
366
|
+
grpc_closure* closure) {
|
367
|
+
fd->write_closure->NotifyOn(exec_ctx, closure);
|
365
368
|
}
|
366
369
|
|
367
|
-
static void fd_become_readable(grpc_exec_ctx
|
368
|
-
grpc_pollset
|
369
|
-
|
370
|
+
static void fd_become_readable(grpc_exec_ctx* exec_ctx, grpc_fd* fd,
|
371
|
+
grpc_pollset* notifier) {
|
372
|
+
fd->read_closure->SetReady(exec_ctx);
|
370
373
|
/* Use release store to match with acquire load in fd_get_read_notifier */
|
371
374
|
gpr_atm_rel_store(&fd->read_notifier_pollset, (gpr_atm)notifier);
|
372
375
|
}
|
373
376
|
|
374
|
-
static void fd_become_writable(grpc_exec_ctx
|
375
|
-
|
377
|
+
static void fd_become_writable(grpc_exec_ctx* exec_ctx, grpc_fd* fd) {
|
378
|
+
fd->write_closure->SetReady(exec_ctx);
|
376
379
|
}
|
377
380
|
|
378
381
|
/*******************************************************************************
|
@@ -385,12 +388,12 @@ GPR_TLS_DECL(g_current_thread_worker);
|
|
385
388
|
/* The designated poller */
|
386
389
|
static gpr_atm g_active_poller;
|
387
390
|
|
388
|
-
static pollset_neighborhood
|
391
|
+
static pollset_neighborhood* g_neighborhoods;
|
389
392
|
static size_t g_num_neighborhoods;
|
390
393
|
|
391
394
|
/* Return true if first in list */
|
392
|
-
static bool worker_insert(grpc_pollset
|
393
|
-
if (pollset->root_worker ==
|
395
|
+
static bool worker_insert(grpc_pollset* pollset, grpc_pollset_worker* worker) {
|
396
|
+
if (pollset->root_worker == nullptr) {
|
394
397
|
pollset->root_worker = worker;
|
395
398
|
worker->next = worker->prev = worker;
|
396
399
|
return true;
|
@@ -406,11 +409,11 @@ static bool worker_insert(grpc_pollset *pollset, grpc_pollset_worker *worker) {
|
|
406
409
|
/* Return true if last in list */
|
407
410
|
typedef enum { EMPTIED, NEW_ROOT, REMOVED } worker_remove_result;
|
408
411
|
|
409
|
-
static worker_remove_result worker_remove(grpc_pollset
|
410
|
-
grpc_pollset_worker
|
412
|
+
static worker_remove_result worker_remove(grpc_pollset* pollset,
|
413
|
+
grpc_pollset_worker* worker) {
|
411
414
|
if (worker == pollset->root_worker) {
|
412
415
|
if (worker == worker->next) {
|
413
|
-
pollset->root_worker =
|
416
|
+
pollset->root_worker = nullptr;
|
414
417
|
return EMPTIED;
|
415
418
|
} else {
|
416
419
|
pollset->root_worker = worker->next;
|
@@ -429,12 +432,12 @@ static size_t choose_neighborhood(void) {
|
|
429
432
|
return (size_t)gpr_cpu_current_cpu() % g_num_neighborhoods;
|
430
433
|
}
|
431
434
|
|
432
|
-
static grpc_error
|
435
|
+
static grpc_error* pollset_global_init(void) {
|
433
436
|
gpr_tls_init(&g_current_thread_pollset);
|
434
437
|
gpr_tls_init(&g_current_thread_worker);
|
435
438
|
gpr_atm_no_barrier_store(&g_active_poller, 0);
|
436
439
|
global_wakeup_fd.read_fd = -1;
|
437
|
-
grpc_error
|
440
|
+
grpc_error* err = grpc_wakeup_fd_init(&global_wakeup_fd);
|
438
441
|
if (err != GRPC_ERROR_NONE) return err;
|
439
442
|
struct epoll_event ev;
|
440
443
|
ev.events = (uint32_t)(EPOLLIN | EPOLLET);
|
@@ -444,8 +447,8 @@ static grpc_error *pollset_global_init(void) {
|
|
444
447
|
return GRPC_OS_ERROR(errno, "epoll_ctl");
|
445
448
|
}
|
446
449
|
g_num_neighborhoods = GPR_CLAMP(gpr_cpu_num_cores(), 1, MAX_NEIGHBORHOODS);
|
447
|
-
g_neighborhoods = (pollset_neighborhood
|
448
|
-
|
450
|
+
g_neighborhoods = (pollset_neighborhood*)gpr_zalloc(sizeof(*g_neighborhoods) *
|
451
|
+
g_num_neighborhoods);
|
449
452
|
for (size_t i = 0; i < g_num_neighborhoods; i++) {
|
450
453
|
gpr_mu_init(&g_neighborhoods[i].mu);
|
451
454
|
}
|
@@ -462,24 +465,24 @@ static void pollset_global_shutdown(void) {
|
|
462
465
|
gpr_free(g_neighborhoods);
|
463
466
|
}
|
464
467
|
|
465
|
-
static void pollset_init(grpc_pollset
|
468
|
+
static void pollset_init(grpc_pollset* pollset, gpr_mu** mu) {
|
466
469
|
gpr_mu_init(&pollset->mu);
|
467
470
|
*mu = &pollset->mu;
|
468
471
|
pollset->neighborhood = &g_neighborhoods[choose_neighborhood()];
|
469
472
|
pollset->reassigning_neighborhood = false;
|
470
|
-
pollset->root_worker =
|
473
|
+
pollset->root_worker = nullptr;
|
471
474
|
pollset->kicked_without_poller = false;
|
472
475
|
pollset->seen_inactive = true;
|
473
476
|
pollset->shutting_down = false;
|
474
|
-
pollset->shutdown_closure =
|
477
|
+
pollset->shutdown_closure = nullptr;
|
475
478
|
pollset->begin_refs = 0;
|
476
|
-
pollset->next = pollset->prev =
|
479
|
+
pollset->next = pollset->prev = nullptr;
|
477
480
|
}
|
478
481
|
|
479
|
-
static void pollset_destroy(grpc_exec_ctx
|
482
|
+
static void pollset_destroy(grpc_exec_ctx* exec_ctx, grpc_pollset* pollset) {
|
480
483
|
gpr_mu_lock(&pollset->mu);
|
481
484
|
if (!pollset->seen_inactive) {
|
482
|
-
pollset_neighborhood
|
485
|
+
pollset_neighborhood* neighborhood = pollset->neighborhood;
|
483
486
|
gpr_mu_unlock(&pollset->mu);
|
484
487
|
retry_lock_neighborhood:
|
485
488
|
gpr_mu_lock(&neighborhood->mu);
|
@@ -495,7 +498,7 @@ static void pollset_destroy(grpc_exec_ctx *exec_ctx, grpc_pollset *pollset) {
|
|
495
498
|
pollset->next->prev = pollset->prev;
|
496
499
|
if (pollset == pollset->neighborhood->active_root) {
|
497
500
|
pollset->neighborhood->active_root =
|
498
|
-
pollset->next == pollset ?
|
501
|
+
pollset->next == pollset ? nullptr : pollset->next;
|
499
502
|
}
|
500
503
|
}
|
501
504
|
gpr_mu_unlock(&pollset->neighborhood->mu);
|
@@ -504,12 +507,12 @@ static void pollset_destroy(grpc_exec_ctx *exec_ctx, grpc_pollset *pollset) {
|
|
504
507
|
gpr_mu_destroy(&pollset->mu);
|
505
508
|
}
|
506
509
|
|
507
|
-
static grpc_error
|
508
|
-
grpc_pollset
|
510
|
+
static grpc_error* pollset_kick_all(grpc_exec_ctx* exec_ctx,
|
511
|
+
grpc_pollset* pollset) {
|
509
512
|
GPR_TIMER_BEGIN("pollset_kick_all", 0);
|
510
|
-
grpc_error
|
511
|
-
if (pollset->root_worker !=
|
512
|
-
grpc_pollset_worker
|
513
|
+
grpc_error* error = GRPC_ERROR_NONE;
|
514
|
+
if (pollset->root_worker != nullptr) {
|
515
|
+
grpc_pollset_worker* worker = pollset->root_worker;
|
513
516
|
do {
|
514
517
|
GRPC_STATS_INC_POLLSET_KICK(exec_ctx);
|
515
518
|
switch (worker->state) {
|
@@ -540,20 +543,20 @@ static grpc_error *pollset_kick_all(grpc_exec_ctx *exec_ctx,
|
|
540
543
|
return error;
|
541
544
|
}
|
542
545
|
|
543
|
-
static void pollset_maybe_finish_shutdown(grpc_exec_ctx
|
544
|
-
grpc_pollset
|
545
|
-
if (pollset->shutdown_closure !=
|
546
|
+
static void pollset_maybe_finish_shutdown(grpc_exec_ctx* exec_ctx,
|
547
|
+
grpc_pollset* pollset) {
|
548
|
+
if (pollset->shutdown_closure != nullptr && pollset->root_worker == nullptr &&
|
546
549
|
pollset->begin_refs == 0) {
|
547
550
|
GPR_TIMER_MARK("pollset_finish_shutdown", 0);
|
548
551
|
GRPC_CLOSURE_SCHED(exec_ctx, pollset->shutdown_closure, GRPC_ERROR_NONE);
|
549
|
-
pollset->shutdown_closure =
|
552
|
+
pollset->shutdown_closure = nullptr;
|
550
553
|
}
|
551
554
|
}
|
552
555
|
|
553
|
-
static void pollset_shutdown(grpc_exec_ctx
|
554
|
-
grpc_closure
|
556
|
+
static void pollset_shutdown(grpc_exec_ctx* exec_ctx, grpc_pollset* pollset,
|
557
|
+
grpc_closure* closure) {
|
555
558
|
GPR_TIMER_BEGIN("pollset_shutdown", 0);
|
556
|
-
GPR_ASSERT(pollset->shutdown_closure ==
|
559
|
+
GPR_ASSERT(pollset->shutdown_closure == nullptr);
|
557
560
|
GPR_ASSERT(!pollset->shutting_down);
|
558
561
|
pollset->shutdown_closure = closure;
|
559
562
|
pollset->shutting_down = true;
|
@@ -562,25 +565,17 @@ static void pollset_shutdown(grpc_exec_ctx *exec_ctx, grpc_pollset *pollset,
|
|
562
565
|
GPR_TIMER_END("pollset_shutdown", 0);
|
563
566
|
}
|
564
567
|
|
565
|
-
static int poll_deadline_to_millis_timeout(
|
566
|
-
|
567
|
-
|
568
|
-
|
569
|
-
|
570
|
-
|
571
|
-
|
572
|
-
if (gpr_time_cmp(deadline, now) <= 0) {
|
568
|
+
static int poll_deadline_to_millis_timeout(grpc_exec_ctx* exec_ctx,
|
569
|
+
grpc_millis millis) {
|
570
|
+
if (millis == GRPC_MILLIS_INF_FUTURE) return -1;
|
571
|
+
grpc_millis delta = millis - grpc_exec_ctx_now(exec_ctx);
|
572
|
+
if (delta > INT_MAX) {
|
573
|
+
return INT_MAX;
|
574
|
+
} else if (delta < 0) {
|
573
575
|
return 0;
|
576
|
+
} else {
|
577
|
+
return (int)delta;
|
574
578
|
}
|
575
|
-
|
576
|
-
static const gpr_timespec round_up = {
|
577
|
-
0, /* tv_sec */
|
578
|
-
GPR_NS_PER_MS - 1, /* tv_nsec */
|
579
|
-
GPR_TIMESPAN /* clock_type */
|
580
|
-
};
|
581
|
-
timeout = gpr_time_sub(deadline, now);
|
582
|
-
int millis = gpr_time_to_millis(gpr_time_add(timeout, round_up));
|
583
|
-
return millis >= 1 ? millis : 1;
|
584
579
|
}
|
585
580
|
|
586
581
|
/* Process the epoll events found by do_epoll_wait() function.
|
@@ -591,10 +586,10 @@ static int poll_deadline_to_millis_timeout(gpr_timespec deadline,
|
|
591
586
|
NOTE ON SYNCRHONIZATION: Similar to do_epoll_wait(), this function is only
|
592
587
|
called by g_active_poller thread. So there is no need for synchronization
|
593
588
|
when accessing fields in g_epoll_set */
|
594
|
-
static grpc_error
|
595
|
-
grpc_pollset
|
596
|
-
static const char
|
597
|
-
grpc_error
|
589
|
+
static grpc_error* process_epoll_events(grpc_exec_ctx* exec_ctx,
|
590
|
+
grpc_pollset* pollset) {
|
591
|
+
static const char* err_desc = "process_events";
|
592
|
+
grpc_error* error = GRPC_ERROR_NONE;
|
598
593
|
|
599
594
|
GPR_TIMER_BEGIN("process_epoll_events", 0);
|
600
595
|
long num_events = gpr_atm_acq_load(&g_epoll_set.num_events);
|
@@ -603,14 +598,14 @@ static grpc_error *process_epoll_events(grpc_exec_ctx *exec_ctx,
|
|
603
598
|
(idx < MAX_EPOLL_EVENTS_HANDLED_PER_ITERATION) && cursor != num_events;
|
604
599
|
idx++) {
|
605
600
|
long c = cursor++;
|
606
|
-
struct epoll_event
|
607
|
-
void
|
601
|
+
struct epoll_event* ev = &g_epoll_set.events[c];
|
602
|
+
void* data_ptr = ev->data.ptr;
|
608
603
|
|
609
604
|
if (data_ptr == &global_wakeup_fd) {
|
610
605
|
append_error(&error, grpc_wakeup_fd_consume_wakeup(&global_wakeup_fd),
|
611
606
|
err_desc);
|
612
607
|
} else {
|
613
|
-
grpc_fd
|
608
|
+
grpc_fd* fd = (grpc_fd*)(data_ptr);
|
614
609
|
bool cancel = (ev->events & (EPOLLERR | EPOLLHUP)) != 0;
|
615
610
|
bool read_ev = (ev->events & (EPOLLIN | EPOLLPRI)) != 0;
|
616
611
|
bool write_ev = (ev->events & EPOLLOUT) != 0;
|
@@ -636,12 +631,12 @@ static grpc_error *process_epoll_events(grpc_exec_ctx *exec_ctx,
|
|
636
631
|
NOTE ON SYNCHRONIZATION: At any point of time, only the g_active_poller
|
637
632
|
(i.e the designated poller thread) will be calling this function. So there is
|
638
633
|
no need for any synchronization when accesing fields in g_epoll_set */
|
639
|
-
static grpc_error
|
640
|
-
|
634
|
+
static grpc_error* do_epoll_wait(grpc_exec_ctx* exec_ctx, grpc_pollset* ps,
|
635
|
+
grpc_millis deadline) {
|
641
636
|
GPR_TIMER_BEGIN("do_epoll_wait", 0);
|
642
637
|
|
643
638
|
int r;
|
644
|
-
int timeout = poll_deadline_to_millis_timeout(
|
639
|
+
int timeout = poll_deadline_to_millis_timeout(exec_ctx, deadline);
|
645
640
|
if (timeout != 0) {
|
646
641
|
GRPC_SCHEDULING_START_BLOCKING_REGION;
|
647
642
|
}
|
@@ -651,14 +646,14 @@ static grpc_error *do_epoll_wait(grpc_exec_ctx *exec_ctx, grpc_pollset *ps,
|
|
651
646
|
timeout);
|
652
647
|
} while (r < 0 && errno == EINTR);
|
653
648
|
if (timeout != 0) {
|
654
|
-
|
649
|
+
GRPC_SCHEDULING_END_BLOCKING_REGION_WITH_EXEC_CTX(exec_ctx);
|
655
650
|
}
|
656
651
|
|
657
652
|
if (r < 0) return GRPC_OS_ERROR(errno, "epoll_wait");
|
658
653
|
|
659
654
|
GRPC_STATS_INC_POLL_EVENTS_RETURNED(exec_ctx, r);
|
660
655
|
|
661
|
-
if (
|
656
|
+
if (grpc_polling_trace.enabled()) {
|
662
657
|
gpr_log(GPR_DEBUG, "ps: %p poll got %d events", ps, r);
|
663
658
|
}
|
664
659
|
|
@@ -669,17 +664,18 @@ static grpc_error *do_epoll_wait(grpc_exec_ctx *exec_ctx, grpc_pollset *ps,
|
|
669
664
|
return GRPC_ERROR_NONE;
|
670
665
|
}
|
671
666
|
|
672
|
-
static bool begin_worker(
|
673
|
-
grpc_pollset_worker
|
674
|
-
|
667
|
+
static bool begin_worker(grpc_exec_ctx* exec_ctx, grpc_pollset* pollset,
|
668
|
+
grpc_pollset_worker* worker,
|
669
|
+
grpc_pollset_worker** worker_hdl,
|
670
|
+
grpc_millis deadline) {
|
675
671
|
GPR_TIMER_BEGIN("begin_worker", 0);
|
676
|
-
if (worker_hdl !=
|
672
|
+
if (worker_hdl != nullptr) *worker_hdl = worker;
|
677
673
|
worker->initialized_cv = false;
|
678
674
|
SET_KICK_STATE(worker, UNKICKED);
|
679
675
|
worker->schedule_on_end_work = (grpc_closure_list)GRPC_CLOSURE_LIST_INIT;
|
680
676
|
pollset->begin_refs++;
|
681
677
|
|
682
|
-
if (
|
678
|
+
if (grpc_polling_trace.enabled()) {
|
683
679
|
gpr_log(GPR_ERROR, "PS:%p BEGIN_STARTS:%p", pollset, worker);
|
684
680
|
}
|
685
681
|
|
@@ -692,13 +688,13 @@ static bool begin_worker(grpc_pollset *pollset, grpc_pollset_worker *worker,
|
|
692
688
|
pollset->reassigning_neighborhood = true;
|
693
689
|
pollset->neighborhood = &g_neighborhoods[choose_neighborhood()];
|
694
690
|
}
|
695
|
-
pollset_neighborhood
|
691
|
+
pollset_neighborhood* neighborhood = pollset->neighborhood;
|
696
692
|
gpr_mu_unlock(&pollset->mu);
|
697
693
|
// pollset unlocked: state may change (even worker->kick_state)
|
698
694
|
retry_lock_neighborhood:
|
699
695
|
gpr_mu_lock(&neighborhood->mu);
|
700
696
|
gpr_mu_lock(&pollset->mu);
|
701
|
-
if (
|
697
|
+
if (grpc_polling_trace.enabled()) {
|
702
698
|
gpr_log(GPR_ERROR, "PS:%p BEGIN_REORG:%p kick_state=%s is_reassigning=%d",
|
703
699
|
pollset, worker, kick_state_string(worker->state),
|
704
700
|
is_reassigning);
|
@@ -722,7 +718,7 @@ static bool begin_worker(grpc_pollset *pollset, grpc_pollset_worker *worker,
|
|
722
718
|
not visible in the "kick any" path yet */
|
723
719
|
if (worker->state == UNKICKED) {
|
724
720
|
pollset->seen_inactive = false;
|
725
|
-
if (neighborhood->active_root ==
|
721
|
+
if (neighborhood->active_root == nullptr) {
|
726
722
|
neighborhood->active_root = pollset->next = pollset->prev = pollset;
|
727
723
|
/* Make this the designated poller if there isn't one already */
|
728
724
|
if (worker->state == UNKICKED &&
|
@@ -750,23 +746,24 @@ static bool begin_worker(grpc_pollset *pollset, grpc_pollset_worker *worker,
|
|
750
746
|
worker->initialized_cv = true;
|
751
747
|
gpr_cv_init(&worker->cv);
|
752
748
|
while (worker->state == UNKICKED && !pollset->shutting_down) {
|
753
|
-
if (
|
749
|
+
if (grpc_polling_trace.enabled()) {
|
754
750
|
gpr_log(GPR_ERROR, "PS:%p BEGIN_WAIT:%p kick_state=%s shutdown=%d",
|
755
751
|
pollset, worker, kick_state_string(worker->state),
|
756
752
|
pollset->shutting_down);
|
757
753
|
}
|
758
754
|
|
759
|
-
if (gpr_cv_wait(&worker->cv, &pollset->mu,
|
755
|
+
if (gpr_cv_wait(&worker->cv, &pollset->mu,
|
756
|
+
grpc_millis_to_timespec(deadline, GPR_CLOCK_REALTIME)) &&
|
760
757
|
worker->state == UNKICKED) {
|
761
758
|
/* If gpr_cv_wait returns true (i.e a timeout), pretend that the worker
|
762
759
|
received a kick */
|
763
760
|
SET_KICK_STATE(worker, KICKED);
|
764
761
|
}
|
765
762
|
}
|
766
|
-
|
763
|
+
grpc_exec_ctx_invalidate_now(exec_ctx);
|
767
764
|
}
|
768
765
|
|
769
|
-
if (
|
766
|
+
if (grpc_polling_trace.enabled()) {
|
770
767
|
gpr_log(GPR_ERROR,
|
771
768
|
"PS:%p BEGIN_DONE:%p kick_state=%s shutdown=%d "
|
772
769
|
"kicked_without_poller: %d",
|
@@ -794,24 +791,24 @@ static bool begin_worker(grpc_pollset *pollset, grpc_pollset_worker *worker,
|
|
794
791
|
}
|
795
792
|
|
796
793
|
static bool check_neighborhood_for_available_poller(
|
797
|
-
grpc_exec_ctx
|
794
|
+
grpc_exec_ctx* exec_ctx, pollset_neighborhood* neighborhood) {
|
798
795
|
GPR_TIMER_BEGIN("check_neighborhood_for_available_poller", 0);
|
799
796
|
bool found_worker = false;
|
800
797
|
do {
|
801
|
-
grpc_pollset
|
802
|
-
if (inspect ==
|
798
|
+
grpc_pollset* inspect = neighborhood->active_root;
|
799
|
+
if (inspect == nullptr) {
|
803
800
|
break;
|
804
801
|
}
|
805
802
|
gpr_mu_lock(&inspect->mu);
|
806
803
|
GPR_ASSERT(!inspect->seen_inactive);
|
807
|
-
grpc_pollset_worker
|
808
|
-
if (inspect_worker !=
|
804
|
+
grpc_pollset_worker* inspect_worker = inspect->root_worker;
|
805
|
+
if (inspect_worker != nullptr) {
|
809
806
|
do {
|
810
807
|
switch (inspect_worker->state) {
|
811
808
|
case UNKICKED:
|
812
809
|
if (gpr_atm_no_barrier_cas(&g_active_poller, 0,
|
813
810
|
(gpr_atm)inspect_worker)) {
|
814
|
-
if (
|
811
|
+
if (grpc_polling_trace.enabled()) {
|
815
812
|
gpr_log(GPR_DEBUG, " .. choose next poller to be %p",
|
816
813
|
inspect_worker);
|
817
814
|
}
|
@@ -822,7 +819,7 @@ static bool check_neighborhood_for_available_poller(
|
|
822
819
|
gpr_cv_signal(&inspect_worker->cv);
|
823
820
|
}
|
824
821
|
} else {
|
825
|
-
if (
|
822
|
+
if (grpc_polling_trace.enabled()) {
|
826
823
|
gpr_log(GPR_DEBUG, " .. beaten to choose next poller");
|
827
824
|
}
|
828
825
|
}
|
@@ -840,17 +837,17 @@ static bool check_neighborhood_for_available_poller(
|
|
840
837
|
} while (!found_worker && inspect_worker != inspect->root_worker);
|
841
838
|
}
|
842
839
|
if (!found_worker) {
|
843
|
-
if (
|
840
|
+
if (grpc_polling_trace.enabled()) {
|
844
841
|
gpr_log(GPR_DEBUG, " .. mark pollset %p inactive", inspect);
|
845
842
|
}
|
846
843
|
inspect->seen_inactive = true;
|
847
844
|
if (inspect == neighborhood->active_root) {
|
848
845
|
neighborhood->active_root =
|
849
|
-
inspect->next == inspect ?
|
846
|
+
inspect->next == inspect ? nullptr : inspect->next;
|
850
847
|
}
|
851
848
|
inspect->next->prev = inspect->prev;
|
852
849
|
inspect->prev->next = inspect->next;
|
853
|
-
inspect->next = inspect->prev =
|
850
|
+
inspect->next = inspect->prev = nullptr;
|
854
851
|
}
|
855
852
|
gpr_mu_unlock(&inspect->mu);
|
856
853
|
} while (!found_worker);
|
@@ -858,21 +855,21 @@ static bool check_neighborhood_for_available_poller(
|
|
858
855
|
return found_worker;
|
859
856
|
}
|
860
857
|
|
861
|
-
static void end_worker(grpc_exec_ctx
|
862
|
-
grpc_pollset_worker
|
863
|
-
grpc_pollset_worker
|
858
|
+
static void end_worker(grpc_exec_ctx* exec_ctx, grpc_pollset* pollset,
|
859
|
+
grpc_pollset_worker* worker,
|
860
|
+
grpc_pollset_worker** worker_hdl) {
|
864
861
|
GPR_TIMER_BEGIN("end_worker", 0);
|
865
|
-
if (
|
862
|
+
if (grpc_polling_trace.enabled()) {
|
866
863
|
gpr_log(GPR_DEBUG, "PS:%p END_WORKER:%p", pollset, worker);
|
867
864
|
}
|
868
|
-
if (worker_hdl !=
|
865
|
+
if (worker_hdl != nullptr) *worker_hdl = nullptr;
|
869
866
|
/* Make sure we appear kicked */
|
870
867
|
SET_KICK_STATE(worker, KICKED);
|
871
868
|
grpc_closure_list_move(&worker->schedule_on_end_work,
|
872
869
|
&exec_ctx->closure_list);
|
873
870
|
if (gpr_atm_no_barrier_load(&g_active_poller) == (gpr_atm)worker) {
|
874
871
|
if (worker->next != worker && worker->next->state == UNKICKED) {
|
875
|
-
if (
|
872
|
+
if (grpc_polling_trace.enabled()) {
|
876
873
|
gpr_log(GPR_DEBUG, " .. choose next poller to be peer %p", worker);
|
877
874
|
}
|
878
875
|
GPR_ASSERT(worker->next->initialized_cv);
|
@@ -893,7 +890,7 @@ static void end_worker(grpc_exec_ctx *exec_ctx, grpc_pollset *pollset,
|
|
893
890
|
bool found_worker = false;
|
894
891
|
bool scan_state[MAX_NEIGHBORHOODS];
|
895
892
|
for (size_t i = 0; !found_worker && i < g_num_neighborhoods; i++) {
|
896
|
-
pollset_neighborhood
|
893
|
+
pollset_neighborhood* neighborhood =
|
897
894
|
&g_neighborhoods[(poller_neighborhood_idx + i) %
|
898
895
|
g_num_neighborhoods];
|
899
896
|
if (gpr_mu_trylock(&neighborhood->mu)) {
|
@@ -907,7 +904,7 @@ static void end_worker(grpc_exec_ctx *exec_ctx, grpc_pollset *pollset,
|
|
907
904
|
}
|
908
905
|
for (size_t i = 0; !found_worker && i < g_num_neighborhoods; i++) {
|
909
906
|
if (scan_state[i]) continue;
|
910
|
-
pollset_neighborhood
|
907
|
+
pollset_neighborhood* neighborhood =
|
911
908
|
&g_neighborhoods[(poller_neighborhood_idx + i) %
|
912
909
|
g_num_neighborhoods];
|
913
910
|
gpr_mu_lock(&neighborhood->mu);
|
@@ -926,7 +923,7 @@ static void end_worker(grpc_exec_ctx *exec_ctx, grpc_pollset *pollset,
|
|
926
923
|
if (worker->initialized_cv) {
|
927
924
|
gpr_cv_destroy(&worker->cv);
|
928
925
|
}
|
929
|
-
if (
|
926
|
+
if (grpc_polling_trace.enabled()) {
|
930
927
|
gpr_log(GPR_DEBUG, " .. remove worker");
|
931
928
|
}
|
932
929
|
if (EMPTIED == worker_remove(pollset, worker)) {
|
@@ -940,12 +937,12 @@ static void end_worker(grpc_exec_ctx *exec_ctx, grpc_pollset *pollset,
|
|
940
937
|
The function pollset_work() may temporarily release the lock (pollset->po.mu)
|
941
938
|
during the course of its execution but it will always re-acquire the lock and
|
942
939
|
ensure that it is held by the time the function returns */
|
943
|
-
static grpc_error
|
944
|
-
grpc_pollset_worker
|
945
|
-
|
940
|
+
static grpc_error* pollset_work(grpc_exec_ctx* exec_ctx, grpc_pollset* ps,
|
941
|
+
grpc_pollset_worker** worker_hdl,
|
942
|
+
grpc_millis deadline) {
|
946
943
|
grpc_pollset_worker worker;
|
947
|
-
grpc_error
|
948
|
-
static const char
|
944
|
+
grpc_error* error = GRPC_ERROR_NONE;
|
945
|
+
static const char* err_desc = "pollset_work";
|
949
946
|
GPR_TIMER_BEGIN("pollset_work", 0);
|
950
947
|
if (ps->kicked_without_poller) {
|
951
948
|
ps->kicked_without_poller = false;
|
@@ -953,7 +950,7 @@ static grpc_error *pollset_work(grpc_exec_ctx *exec_ctx, grpc_pollset *ps,
|
|
953
950
|
return GRPC_ERROR_NONE;
|
954
951
|
}
|
955
952
|
|
956
|
-
if (begin_worker(ps, &worker, worker_hdl,
|
953
|
+
if (begin_worker(exec_ctx, ps, &worker, worker_hdl, deadline)) {
|
957
954
|
gpr_tls_set(&g_current_thread_pollset, (intptr_t)ps);
|
958
955
|
gpr_tls_set(&g_current_thread_worker, (intptr_t)&worker);
|
959
956
|
GPR_ASSERT(!ps->shutting_down);
|
@@ -976,8 +973,7 @@ static grpc_error *pollset_work(grpc_exec_ctx *exec_ctx, grpc_pollset *ps,
|
|
976
973
|
designated poller */
|
977
974
|
if (gpr_atm_acq_load(&g_epoll_set.cursor) ==
|
978
975
|
gpr_atm_acq_load(&g_epoll_set.num_events)) {
|
979
|
-
append_error(&error, do_epoll_wait(exec_ctx, ps,
|
980
|
-
err_desc);
|
976
|
+
append_error(&error, do_epoll_wait(exec_ctx, ps, deadline), err_desc);
|
981
977
|
}
|
982
978
|
append_error(&error, process_epoll_events(exec_ctx, ps), err_desc);
|
983
979
|
|
@@ -994,60 +990,60 @@ static grpc_error *pollset_work(grpc_exec_ctx *exec_ctx, grpc_pollset *ps,
|
|
994
990
|
return error;
|
995
991
|
}
|
996
992
|
|
997
|
-
static grpc_error
|
998
|
-
grpc_pollset_worker
|
993
|
+
static grpc_error* pollset_kick(grpc_exec_ctx* exec_ctx, grpc_pollset* pollset,
|
994
|
+
grpc_pollset_worker* specific_worker) {
|
999
995
|
GPR_TIMER_BEGIN("pollset_kick", 0);
|
1000
996
|
GRPC_STATS_INC_POLLSET_KICK(exec_ctx);
|
1001
|
-
grpc_error
|
1002
|
-
if (
|
997
|
+
grpc_error* ret_err = GRPC_ERROR_NONE;
|
998
|
+
if (grpc_polling_trace.enabled()) {
|
1003
999
|
gpr_strvec log;
|
1004
1000
|
gpr_strvec_init(&log);
|
1005
|
-
char
|
1006
|
-
gpr_asprintf(
|
1007
|
-
|
1008
|
-
|
1009
|
-
|
1001
|
+
char* tmp;
|
1002
|
+
gpr_asprintf(&tmp, "PS:%p KICK:%p curps=%p curworker=%p root=%p", pollset,
|
1003
|
+
specific_worker, (void*)gpr_tls_get(&g_current_thread_pollset),
|
1004
|
+
(void*)gpr_tls_get(&g_current_thread_worker),
|
1005
|
+
pollset->root_worker);
|
1010
1006
|
gpr_strvec_add(&log, tmp);
|
1011
|
-
if (pollset->root_worker !=
|
1007
|
+
if (pollset->root_worker != nullptr) {
|
1012
1008
|
gpr_asprintf(&tmp, " {kick_state=%s next=%p {kick_state=%s}}",
|
1013
1009
|
kick_state_string(pollset->root_worker->state),
|
1014
1010
|
pollset->root_worker->next,
|
1015
1011
|
kick_state_string(pollset->root_worker->next->state));
|
1016
1012
|
gpr_strvec_add(&log, tmp);
|
1017
1013
|
}
|
1018
|
-
if (specific_worker !=
|
1014
|
+
if (specific_worker != nullptr) {
|
1019
1015
|
gpr_asprintf(&tmp, " worker_kick_state=%s",
|
1020
1016
|
kick_state_string(specific_worker->state));
|
1021
1017
|
gpr_strvec_add(&log, tmp);
|
1022
1018
|
}
|
1023
|
-
tmp = gpr_strvec_flatten(&log,
|
1019
|
+
tmp = gpr_strvec_flatten(&log, nullptr);
|
1024
1020
|
gpr_strvec_destroy(&log);
|
1025
1021
|
gpr_log(GPR_ERROR, "%s", tmp);
|
1026
1022
|
gpr_free(tmp);
|
1027
1023
|
}
|
1028
1024
|
|
1029
|
-
if (specific_worker ==
|
1025
|
+
if (specific_worker == nullptr) {
|
1030
1026
|
if (gpr_tls_get(&g_current_thread_pollset) != (intptr_t)pollset) {
|
1031
|
-
grpc_pollset_worker
|
1032
|
-
if (root_worker ==
|
1027
|
+
grpc_pollset_worker* root_worker = pollset->root_worker;
|
1028
|
+
if (root_worker == nullptr) {
|
1033
1029
|
GRPC_STATS_INC_POLLSET_KICKED_WITHOUT_POLLER(exec_ctx);
|
1034
1030
|
pollset->kicked_without_poller = true;
|
1035
|
-
if (
|
1031
|
+
if (grpc_polling_trace.enabled()) {
|
1036
1032
|
gpr_log(GPR_ERROR, " .. kicked_without_poller");
|
1037
1033
|
}
|
1038
1034
|
goto done;
|
1039
1035
|
}
|
1040
|
-
grpc_pollset_worker
|
1036
|
+
grpc_pollset_worker* next_worker = root_worker->next;
|
1041
1037
|
if (root_worker->state == KICKED) {
|
1042
1038
|
GRPC_STATS_INC_POLLSET_KICKED_AGAIN(exec_ctx);
|
1043
|
-
if (
|
1039
|
+
if (grpc_polling_trace.enabled()) {
|
1044
1040
|
gpr_log(GPR_ERROR, " .. already kicked %p", root_worker);
|
1045
1041
|
}
|
1046
1042
|
SET_KICK_STATE(root_worker, KICKED);
|
1047
1043
|
goto done;
|
1048
1044
|
} else if (next_worker->state == KICKED) {
|
1049
1045
|
GRPC_STATS_INC_POLLSET_KICKED_AGAIN(exec_ctx);
|
1050
|
-
if (
|
1046
|
+
if (grpc_polling_trace.enabled()) {
|
1051
1047
|
gpr_log(GPR_ERROR, " .. already kicked %p", next_worker);
|
1052
1048
|
}
|
1053
1049
|
SET_KICK_STATE(next_worker, KICKED);
|
@@ -1055,10 +1051,10 @@ static grpc_error *pollset_kick(grpc_exec_ctx *exec_ctx, grpc_pollset *pollset,
|
|
1055
1051
|
} else if (root_worker ==
|
1056
1052
|
next_worker && // only try and wake up a poller if
|
1057
1053
|
// there is no next worker
|
1058
|
-
root_worker == (grpc_pollset_worker
|
1054
|
+
root_worker == (grpc_pollset_worker*)gpr_atm_no_barrier_load(
|
1059
1055
|
&g_active_poller)) {
|
1060
1056
|
GRPC_STATS_INC_POLLSET_KICK_WAKEUP_FD(exec_ctx);
|
1061
|
-
if (
|
1057
|
+
if (grpc_polling_trace.enabled()) {
|
1062
1058
|
gpr_log(GPR_ERROR, " .. kicked %p", root_worker);
|
1063
1059
|
}
|
1064
1060
|
SET_KICK_STATE(root_worker, KICKED);
|
@@ -1066,7 +1062,7 @@ static grpc_error *pollset_kick(grpc_exec_ctx *exec_ctx, grpc_pollset *pollset,
|
|
1066
1062
|
goto done;
|
1067
1063
|
} else if (next_worker->state == UNKICKED) {
|
1068
1064
|
GRPC_STATS_INC_POLLSET_KICK_WAKEUP_CV(exec_ctx);
|
1069
|
-
if (
|
1065
|
+
if (grpc_polling_trace.enabled()) {
|
1070
1066
|
gpr_log(GPR_ERROR, " .. kicked %p", next_worker);
|
1071
1067
|
}
|
1072
1068
|
GPR_ASSERT(next_worker->initialized_cv);
|
@@ -1075,7 +1071,7 @@ static grpc_error *pollset_kick(grpc_exec_ctx *exec_ctx, grpc_pollset *pollset,
|
|
1075
1071
|
goto done;
|
1076
1072
|
} else if (next_worker->state == DESIGNATED_POLLER) {
|
1077
1073
|
if (root_worker->state != DESIGNATED_POLLER) {
|
1078
|
-
if (
|
1074
|
+
if (grpc_polling_trace.enabled()) {
|
1079
1075
|
gpr_log(
|
1080
1076
|
GPR_ERROR,
|
1081
1077
|
" .. kicked root non-poller %p (initialized_cv=%d) (poller=%p)",
|
@@ -1089,7 +1085,7 @@ static grpc_error *pollset_kick(grpc_exec_ctx *exec_ctx, grpc_pollset *pollset,
|
|
1089
1085
|
goto done;
|
1090
1086
|
} else {
|
1091
1087
|
GRPC_STATS_INC_POLLSET_KICK_WAKEUP_FD(exec_ctx);
|
1092
|
-
if (
|
1088
|
+
if (grpc_polling_trace.enabled()) {
|
1093
1089
|
gpr_log(GPR_ERROR, " .. non-root poller %p (root=%p)", next_worker,
|
1094
1090
|
root_worker);
|
1095
1091
|
}
|
@@ -1105,7 +1101,7 @@ static grpc_error *pollset_kick(grpc_exec_ctx *exec_ctx, grpc_pollset *pollset,
|
|
1105
1101
|
}
|
1106
1102
|
} else {
|
1107
1103
|
GRPC_STATS_INC_POLLSET_KICK_OWN_THREAD(exec_ctx);
|
1108
|
-
if (
|
1104
|
+
if (grpc_polling_trace.enabled()) {
|
1109
1105
|
gpr_log(GPR_ERROR, " .. kicked while waking up");
|
1110
1106
|
}
|
1111
1107
|
goto done;
|
@@ -1115,22 +1111,22 @@ static grpc_error *pollset_kick(grpc_exec_ctx *exec_ctx, grpc_pollset *pollset,
|
|
1115
1111
|
}
|
1116
1112
|
|
1117
1113
|
if (specific_worker->state == KICKED) {
|
1118
|
-
if (
|
1114
|
+
if (grpc_polling_trace.enabled()) {
|
1119
1115
|
gpr_log(GPR_ERROR, " .. specific worker already kicked");
|
1120
1116
|
}
|
1121
1117
|
goto done;
|
1122
1118
|
} else if (gpr_tls_get(&g_current_thread_worker) ==
|
1123
1119
|
(intptr_t)specific_worker) {
|
1124
1120
|
GRPC_STATS_INC_POLLSET_KICK_OWN_THREAD(exec_ctx);
|
1125
|
-
if (
|
1121
|
+
if (grpc_polling_trace.enabled()) {
|
1126
1122
|
gpr_log(GPR_ERROR, " .. mark %p kicked", specific_worker);
|
1127
1123
|
}
|
1128
1124
|
SET_KICK_STATE(specific_worker, KICKED);
|
1129
1125
|
goto done;
|
1130
1126
|
} else if (specific_worker ==
|
1131
|
-
(grpc_pollset_worker
|
1127
|
+
(grpc_pollset_worker*)gpr_atm_no_barrier_load(&g_active_poller)) {
|
1132
1128
|
GRPC_STATS_INC_POLLSET_KICK_WAKEUP_FD(exec_ctx);
|
1133
|
-
if (
|
1129
|
+
if (grpc_polling_trace.enabled()) {
|
1134
1130
|
gpr_log(GPR_ERROR, " .. kick active poller");
|
1135
1131
|
}
|
1136
1132
|
SET_KICK_STATE(specific_worker, KICKED);
|
@@ -1138,7 +1134,7 @@ static grpc_error *pollset_kick(grpc_exec_ctx *exec_ctx, grpc_pollset *pollset,
|
|
1138
1134
|
goto done;
|
1139
1135
|
} else if (specific_worker->initialized_cv) {
|
1140
1136
|
GRPC_STATS_INC_POLLSET_KICK_WAKEUP_CV(exec_ctx);
|
1141
|
-
if (
|
1137
|
+
if (grpc_polling_trace.enabled()) {
|
1142
1138
|
gpr_log(GPR_ERROR, " .. kick waiting worker");
|
1143
1139
|
}
|
1144
1140
|
SET_KICK_STATE(specific_worker, KICKED);
|
@@ -1146,7 +1142,7 @@ static grpc_error *pollset_kick(grpc_exec_ctx *exec_ctx, grpc_pollset *pollset,
|
|
1146
1142
|
goto done;
|
1147
1143
|
} else {
|
1148
1144
|
GRPC_STATS_INC_POLLSET_KICKED_AGAIN(exec_ctx);
|
1149
|
-
if (
|
1145
|
+
if (grpc_polling_trace.enabled()) {
|
1150
1146
|
gpr_log(GPR_ERROR, " .. kick non-waiting worker");
|
1151
1147
|
}
|
1152
1148
|
SET_KICK_STATE(specific_worker, KICKED);
|
@@ -1157,39 +1153,39 @@ done:
|
|
1157
1153
|
return ret_err;
|
1158
1154
|
}
|
1159
1155
|
|
1160
|
-
static void pollset_add_fd(grpc_exec_ctx
|
1161
|
-
grpc_fd
|
1156
|
+
static void pollset_add_fd(grpc_exec_ctx* exec_ctx, grpc_pollset* pollset,
|
1157
|
+
grpc_fd* fd) {}
|
1162
1158
|
|
1163
1159
|
/*******************************************************************************
|
1164
1160
|
* Pollset-set Definitions
|
1165
1161
|
*/
|
1166
1162
|
|
1167
|
-
static grpc_pollset_set
|
1168
|
-
return (grpc_pollset_set
|
1163
|
+
static grpc_pollset_set* pollset_set_create(void) {
|
1164
|
+
return (grpc_pollset_set*)((intptr_t)0xdeafbeef);
|
1169
1165
|
}
|
1170
1166
|
|
1171
|
-
static void pollset_set_destroy(grpc_exec_ctx
|
1172
|
-
grpc_pollset_set
|
1167
|
+
static void pollset_set_destroy(grpc_exec_ctx* exec_ctx,
|
1168
|
+
grpc_pollset_set* pss) {}
|
1173
1169
|
|
1174
|
-
static void pollset_set_add_fd(grpc_exec_ctx
|
1175
|
-
grpc_fd
|
1170
|
+
static void pollset_set_add_fd(grpc_exec_ctx* exec_ctx, grpc_pollset_set* pss,
|
1171
|
+
grpc_fd* fd) {}
|
1176
1172
|
|
1177
|
-
static void pollset_set_del_fd(grpc_exec_ctx
|
1178
|
-
grpc_fd
|
1173
|
+
static void pollset_set_del_fd(grpc_exec_ctx* exec_ctx, grpc_pollset_set* pss,
|
1174
|
+
grpc_fd* fd) {}
|
1179
1175
|
|
1180
|
-
static void pollset_set_add_pollset(grpc_exec_ctx
|
1181
|
-
grpc_pollset_set
|
1176
|
+
static void pollset_set_add_pollset(grpc_exec_ctx* exec_ctx,
|
1177
|
+
grpc_pollset_set* pss, grpc_pollset* ps) {}
|
1182
1178
|
|
1183
|
-
static void pollset_set_del_pollset(grpc_exec_ctx
|
1184
|
-
grpc_pollset_set
|
1179
|
+
static void pollset_set_del_pollset(grpc_exec_ctx* exec_ctx,
|
1180
|
+
grpc_pollset_set* pss, grpc_pollset* ps) {}
|
1185
1181
|
|
1186
|
-
static void pollset_set_add_pollset_set(grpc_exec_ctx
|
1187
|
-
grpc_pollset_set
|
1188
|
-
grpc_pollset_set
|
1182
|
+
static void pollset_set_add_pollset_set(grpc_exec_ctx* exec_ctx,
|
1183
|
+
grpc_pollset_set* bag,
|
1184
|
+
grpc_pollset_set* item) {}
|
1189
1185
|
|
1190
|
-
static void pollset_set_del_pollset_set(grpc_exec_ctx
|
1191
|
-
grpc_pollset_set
|
1192
|
-
grpc_pollset_set
|
1186
|
+
static void pollset_set_del_pollset_set(grpc_exec_ctx* exec_ctx,
|
1187
|
+
grpc_pollset_set* bag,
|
1188
|
+
grpc_pollset_set* item) {}
|
1193
1189
|
|
1194
1190
|
/*******************************************************************************
|
1195
1191
|
* Event engine binding
|
@@ -1235,13 +1231,14 @@ static const grpc_event_engine_vtable vtable = {
|
|
1235
1231
|
/* It is possible that GLIBC has epoll but the underlying kernel doesn't.
|
1236
1232
|
* Create epoll_fd (epoll_set_init() takes care of that) to make sure epoll
|
1237
1233
|
* support is available */
|
1238
|
-
const grpc_event_engine_vtable
|
1234
|
+
const grpc_event_engine_vtable* grpc_init_epoll1_linux(bool explicit_request) {
|
1239
1235
|
if (!grpc_has_wakeup_fd()) {
|
1240
|
-
|
1236
|
+
gpr_log(GPR_ERROR, "Skipping epoll1 because of no wakeup fd.");
|
1237
|
+
return nullptr;
|
1241
1238
|
}
|
1242
1239
|
|
1243
1240
|
if (!epoll_set_init()) {
|
1244
|
-
return
|
1241
|
+
return nullptr;
|
1245
1242
|
}
|
1246
1243
|
|
1247
1244
|
fd_global_init();
|
@@ -1249,7 +1246,7 @@ const grpc_event_engine_vtable *grpc_init_epoll1_linux(bool explicit_request) {
|
|
1249
1246
|
if (!GRPC_LOG_IF_ERROR("pollset_global_init", pollset_global_init())) {
|
1250
1247
|
fd_global_shutdown();
|
1251
1248
|
epoll_set_shutdown();
|
1252
|
-
return
|
1249
|
+
return nullptr;
|
1253
1250
|
}
|
1254
1251
|
|
1255
1252
|
return &vtable;
|
@@ -1257,10 +1254,12 @@ const grpc_event_engine_vtable *grpc_init_epoll1_linux(bool explicit_request) {
|
|
1257
1254
|
|
1258
1255
|
#else /* defined(GRPC_LINUX_EPOLL) */
|
1259
1256
|
#if defined(GRPC_POSIX_SOCKET)
|
1260
|
-
#include "src/core/lib/iomgr/
|
1257
|
+
#include "src/core/lib/iomgr/ev_epoll1_linux.h"
|
1261
1258
|
/* If GRPC_LINUX_EPOLL is not defined, it means epoll is not available. Return
|
1262
1259
|
* NULL */
|
1263
|
-
const grpc_event_engine_vtable
|
1260
|
+
const grpc_event_engine_vtable* grpc_init_epoll1_linux(bool explicit_request) {
|
1261
|
+
gpr_log(GPR_ERROR,
|
1262
|
+
"Skipping epoll1 becuase GRPC_LINUX_EPOLL is not defined.");
|
1264
1263
|
return NULL;
|
1265
1264
|
}
|
1266
1265
|
#endif /* defined(GRPC_POSIX_SOCKET) */
|