grpc 1.8.7 → 1.9.0.pre1
Sign up to get free protection for your applications and to get access to all the features.
Potentially problematic release.
This version of grpc might be problematic. Click here for more details.
- checksums.yaml +4 -4
- data/Makefile +549 -325
- data/include/grpc/impl/codegen/grpc_types.h +1 -2
- data/include/grpc/impl/codegen/port_platform.h +46 -5
- data/include/grpc/impl/codegen/slice.h +1 -2
- data/include/grpc/module.modulemap +0 -2
- data/include/grpc/slice_buffer.h +1 -2
- data/include/grpc/support/log.h +4 -2
- data/include/grpc/support/thd.h +4 -1
- data/include/grpc/support/tls.h +6 -0
- data/include/grpc/support/tls_gcc.h +5 -40
- data/include/grpc/support/tls_msvc.h +9 -0
- data/include/grpc/support/tls_pthread.h +9 -0
- data/src/core/ext/filters/client_channel/backup_poller.cc +32 -29
- data/src/core/ext/filters/client_channel/backup_poller.h +2 -2
- data/src/core/ext/filters/client_channel/channel_connectivity.cc +26 -32
- data/src/core/ext/filters/client_channel/client_channel.cc +325 -356
- data/src/core/ext/filters/client_channel/client_channel.h +4 -12
- data/src/core/ext/filters/client_channel/client_channel_factory.cc +9 -14
- data/src/core/ext/filters/client_channel/client_channel_factory.h +7 -20
- data/src/core/ext/filters/client_channel/client_channel_plugin.cc +7 -10
- data/src/core/ext/filters/client_channel/connector.cc +6 -7
- data/src/core/ext/filters/client_channel/connector.h +6 -16
- data/src/core/ext/filters/client_channel/http_connect_handshaker.cc +38 -50
- data/src/core/ext/filters/client_channel/http_connect_handshaker.h +0 -8
- data/src/core/ext/filters/client_channel/http_proxy.cc +9 -13
- data/src/core/ext/filters/client_channel/http_proxy.h +0 -8
- data/src/core/ext/filters/client_channel/lb_policy.cc +72 -94
- data/src/core/ext/filters/client_channel/lb_policy.h +83 -92
- data/src/core/ext/filters/client_channel/lb_policy/grpclb/client_load_reporting_filter.cc +14 -19
- data/src/core/ext/filters/client_channel/lb_policy/grpclb/client_load_reporting_filter.h +0 -8
- data/src/core/ext/filters/client_channel/lb_policy/grpclb/grpclb.cc +474 -591
- data/src/core/ext/filters/client_channel/lb_policy/grpclb/grpclb.h +0 -8
- data/src/core/ext/filters/client_channel/lb_policy/grpclb/grpclb_channel.h +2 -10
- data/src/core/ext/filters/client_channel/lb_policy/grpclb/grpclb_channel_secure.cc +6 -6
- data/src/core/ext/filters/client_channel/lb_policy/grpclb/grpclb_client_stats.h +0 -8
- data/src/core/ext/filters/client_channel/lb_policy/grpclb/load_balancer_api.cc +0 -9
- data/src/core/ext/filters/client_channel/lb_policy/grpclb/load_balancer_api.h +0 -9
- data/src/core/ext/filters/client_channel/lb_policy/grpclb/proto/grpc/lb/v1/load_balancer.pb.c +3 -4
- data/src/core/ext/filters/client_channel/lb_policy/grpclb/proto/grpc/lb/v1/load_balancer.pb.h +9 -12
- data/src/core/ext/filters/client_channel/lb_policy/pick_first/pick_first.cc +160 -182
- data/src/core/ext/filters/client_channel/lb_policy/round_robin/round_robin.cc +182 -221
- data/src/core/ext/filters/client_channel/lb_policy/subchannel_list.cc +24 -35
- data/src/core/ext/filters/client_channel/lb_policy/subchannel_list.h +9 -20
- data/src/core/ext/filters/client_channel/lb_policy_factory.cc +6 -9
- data/src/core/ext/filters/client_channel/lb_policy_factory.h +4 -15
- data/src/core/ext/filters/client_channel/lb_policy_registry.cc +3 -3
- data/src/core/ext/filters/client_channel/lb_policy_registry.h +1 -9
- data/src/core/ext/filters/client_channel/parse_address.cc +1 -1
- data/src/core/ext/filters/client_channel/parse_address.h +0 -8
- data/src/core/ext/filters/client_channel/proxy_mapper.cc +6 -8
- data/src/core/ext/filters/client_channel/proxy_mapper.h +6 -16
- data/src/core/ext/filters/client_channel/proxy_mapper_registry.cc +13 -17
- data/src/core/ext/filters/client_channel/proxy_mapper_registry.h +2 -12
- data/src/core/ext/filters/client_channel/resolver.cc +11 -13
- data/src/core/ext/filters/client_channel/resolver.h +14 -25
- data/src/core/ext/filters/client_channel/resolver/dns/c_ares/dns_resolver_ares.cc +57 -70
- data/src/core/ext/filters/client_channel/resolver/dns/c_ares/grpc_ares_ev_driver.h +2 -12
- data/src/core/ext/filters/client_channel/resolver/dns/c_ares/grpc_ares_ev_driver_posix.cc +23 -31
- data/src/core/ext/filters/client_channel/resolver/dns/c_ares/grpc_ares_wrapper.cc +27 -45
- data/src/core/ext/filters/client_channel/resolver/dns/c_ares/grpc_ares_wrapper.h +5 -15
- data/src/core/ext/filters/client_channel/resolver/dns/c_ares/grpc_ares_wrapper_fallback.cc +9 -11
- data/src/core/ext/filters/client_channel/resolver/dns/native/dns_resolver.cc +53 -66
- data/src/core/ext/filters/client_channel/resolver/fake/fake_resolver.cc +25 -33
- data/src/core/ext/filters/client_channel/resolver/fake/fake_resolver.h +1 -9
- data/src/core/ext/filters/client_channel/resolver/sockaddr/sockaddr_resolver.cc +26 -35
- data/src/core/ext/filters/client_channel/resolver_factory.cc +2 -3
- data/src/core/ext/filters/client_channel/resolver_factory.h +2 -12
- data/src/core/ext/filters/client_channel/resolver_registry.cc +12 -15
- data/src/core/ext/filters/client_channel/resolver_registry.h +3 -12
- data/src/core/ext/filters/client_channel/retry_throttle.h +0 -8
- data/src/core/ext/filters/client_channel/subchannel.cc +289 -301
- data/src/core/ext/filters/client_channel/subchannel.h +57 -84
- data/src/core/ext/filters/client_channel/subchannel_index.cc +30 -33
- data/src/core/ext/filters/client_channel/subchannel_index.h +4 -16
- data/src/core/ext/filters/client_channel/uri_parser.cc +13 -17
- data/src/core/ext/filters/client_channel/uri_parser.h +1 -10
- data/src/core/ext/filters/deadline/deadline_filter.cc +49 -67
- data/src/core/ext/filters/deadline/deadline_filter.h +4 -14
- data/src/core/ext/filters/http/client/http_client_filter.cc +60 -77
- data/src/core/ext/filters/http/client/http_client_filter.h +0 -8
- data/src/core/ext/filters/http/http_filters_plugin.cc +4 -6
- data/src/core/ext/filters/http/message_compress/message_compress_filter.cc +63 -79
- data/src/core/ext/filters/http/message_compress/message_compress_filter.h +0 -8
- data/src/core/ext/filters/http/server/http_server_filter.cc +57 -71
- data/src/core/ext/filters/http/server/http_server_filter.h +0 -8
- data/src/core/ext/filters/load_reporting/server_load_reporting_filter.cc +19 -24
- data/src/core/ext/filters/load_reporting/server_load_reporting_filter.h +0 -8
- data/src/core/ext/filters/load_reporting/server_load_reporting_plugin.cc +3 -3
- data/src/core/ext/filters/load_reporting/server_load_reporting_plugin.h +0 -8
- data/src/core/ext/filters/max_age/max_age_filter.cc +49 -62
- data/src/core/ext/filters/max_age/max_age_filter.h +0 -8
- data/src/core/ext/filters/message_size/message_size_filter.cc +23 -29
- data/src/core/ext/filters/message_size/message_size_filter.h +0 -8
- data/src/core/ext/filters/workarounds/workaround_cronet_compression_filter.cc +15 -18
- data/src/core/ext/filters/workarounds/workaround_cronet_compression_filter.h +0 -8
- data/src/core/ext/filters/workarounds/workaround_utils.h +0 -8
- data/src/core/ext/transport/chttp2/alpn/alpn.h +0 -8
- data/src/core/ext/transport/chttp2/client/chttp2_connector.cc +33 -40
- data/src/core/ext/transport/chttp2/client/chttp2_connector.h +0 -8
- data/src/core/ext/transport/chttp2/client/insecure/channel_create.cc +15 -17
- data/src/core/ext/transport/chttp2/client/insecure/channel_create_posix.cc +8 -8
- data/src/core/ext/transport/chttp2/client/secure/secure_channel_create.cc +23 -28
- data/src/core/ext/transport/chttp2/server/chttp2_server.cc +50 -57
- data/src/core/ext/transport/chttp2/server/chttp2_server.h +1 -10
- data/src/core/ext/transport/chttp2/server/insecure/server_chttp2.cc +3 -3
- data/src/core/ext/transport/chttp2/server/insecure/server_chttp2_posix.cc +7 -10
- data/src/core/ext/transport/chttp2/server/secure/server_secure_chttp2.cc +5 -6
- data/src/core/ext/transport/chttp2/transport/bin_decoder.cc +7 -9
- data/src/core/ext/transport/chttp2/transport/bin_decoder.h +2 -11
- data/src/core/ext/transport/chttp2/transport/bin_encoder.h +1 -9
- data/src/core/ext/transport/chttp2/transport/chttp2_plugin.cc +10 -2
- data/src/core/ext/transport/chttp2/transport/chttp2_transport.cc +516 -636
- data/src/core/ext/transport/chttp2/transport/chttp2_transport.h +4 -11
- data/src/core/ext/transport/chttp2/transport/flow_control.cc +29 -13
- data/src/core/ext/transport/chttp2/transport/flow_control.h +196 -53
- data/src/core/ext/transport/chttp2/transport/frame.h +0 -8
- data/src/core/ext/transport/chttp2/transport/frame_data.cc +31 -33
- data/src/core/ext/transport/chttp2/transport/frame_data.h +3 -12
- data/src/core/ext/transport/chttp2/transport/frame_goaway.cc +2 -3
- data/src/core/ext/transport/chttp2/transport/frame_goaway.h +1 -10
- data/src/core/ext/transport/chttp2/transport/frame_ping.cc +5 -6
- data/src/core/ext/transport/chttp2/transport/frame_ping.h +1 -9
- data/src/core/ext/transport/chttp2/transport/frame_rst_stream.cc +2 -3
- data/src/core/ext/transport/chttp2/transport/frame_rst_stream.h +1 -10
- data/src/core/ext/transport/chttp2/transport/frame_settings.cc +8 -3
- data/src/core/ext/transport/chttp2/transport/frame_settings.h +1 -10
- data/src/core/ext/transport/chttp2/transport/frame_window_update.cc +8 -8
- data/src/core/ext/transport/chttp2/transport/frame_window_update.h +5 -11
- data/src/core/ext/transport/chttp2/transport/hpack_encoder.cc +63 -81
- data/src/core/ext/transport/chttp2/transport/hpack_encoder.h +2 -12
- data/src/core/ext/transport/chttp2/transport/hpack_parser.cc +230 -318
- data/src/core/ext/transport/chttp2/transport/hpack_parser.h +6 -19
- data/src/core/ext/transport/chttp2/transport/hpack_table.cc +14 -20
- data/src/core/ext/transport/chttp2/transport/hpack_table.h +5 -16
- data/src/core/ext/transport/chttp2/transport/http2_settings.h +0 -7
- data/src/core/ext/transport/chttp2/transport/huffsyms.h +0 -8
- data/src/core/ext/transport/chttp2/transport/incoming_metadata.cc +8 -11
- data/src/core/ext/transport/chttp2/transport/incoming_metadata.h +4 -13
- data/src/core/ext/transport/chttp2/transport/internal.h +51 -75
- data/src/core/ext/transport/chttp2/transport/parsing.cc +83 -109
- data/src/core/ext/transport/chttp2/transport/stream_lists.cc +2 -0
- data/src/core/ext/transport/chttp2/transport/stream_map.h +0 -8
- data/src/core/ext/transport/chttp2/transport/varint.h +0 -8
- data/src/core/ext/transport/chttp2/transport/writing.cc +61 -65
- data/src/core/ext/transport/inproc/inproc_plugin.cc +2 -4
- data/src/core/ext/transport/inproc/inproc_transport.cc +177 -188
- data/src/core/ext/transport/inproc/inproc_transport.h +0 -8
- data/src/core/lib/backoff/backoff.cc +39 -44
- data/src/core/lib/backoff/backoff.h +61 -57
- data/src/core/lib/channel/channel_args.cc +8 -10
- data/src/core/lib/channel/channel_args.h +4 -13
- data/src/core/lib/channel/channel_stack.cc +19 -27
- data/src/core/lib/channel/channel_stack.h +27 -47
- data/src/core/lib/channel/channel_stack_builder.cc +11 -14
- data/src/core/lib/channel/channel_stack_builder.h +4 -15
- data/src/core/lib/channel/connected_channel.cc +23 -36
- data/src/core/lib/channel/connected_channel.h +1 -10
- data/src/core/lib/channel/handshaker.cc +31 -40
- data/src/core/lib/channel/handshaker.h +14 -25
- data/src/core/lib/channel/handshaker_factory.cc +6 -6
- data/src/core/lib/channel/handshaker_factory.h +5 -15
- data/src/core/lib/channel/handshaker_registry.cc +9 -13
- data/src/core/lib/channel/handshaker_registry.h +2 -11
- data/src/core/lib/compression/algorithm_metadata.h +0 -8
- data/src/core/lib/compression/message_compress.cc +19 -23
- data/src/core/lib/compression/message_compress.h +2 -12
- data/src/core/lib/compression/stream_compression.cc +1 -1
- data/src/core/lib/compression/stream_compression.h +0 -8
- data/src/core/lib/compression/stream_compression_gzip.cc +12 -11
- data/src/core/lib/compression/stream_compression_gzip.h +0 -8
- data/src/core/lib/compression/stream_compression_identity.h +0 -8
- data/src/core/lib/debug/stats.cc +4 -4
- data/src/core/lib/debug/stats.h +9 -19
- data/src/core/lib/debug/stats_data.cc +85 -116
- data/src/core/lib/debug/stats_data.h +236 -312
- data/src/core/lib/debug/trace.cc +1 -1
- data/src/core/lib/debug/trace.h +0 -12
- data/src/core/lib/{support → gpr++}/abstract.h +8 -3
- data/src/core/lib/{support → gpr++}/atomic.h +5 -5
- data/src/core/lib/{support → gpr++}/atomic_with_atm.h +3 -3
- data/src/core/lib/{support → gpr++}/atomic_with_std.h +3 -3
- data/src/core/lib/gpr++/debug_location.h +52 -0
- data/src/core/lib/gpr++/inlined_vector.h +112 -0
- data/src/core/lib/{support → gpr++}/manual_constructor.h +2 -2
- data/src/core/lib/{support → gpr++}/memory.h +3 -3
- data/src/core/lib/gpr++/orphanable.h +171 -0
- data/src/core/lib/gpr++/ref_counted.h +133 -0
- data/src/core/lib/gpr++/ref_counted_ptr.h +99 -0
- data/src/core/lib/{support → gpr}/alloc.cc +0 -0
- data/src/core/lib/{support → gpr}/arena.cc +1 -1
- data/src/core/lib/{support → gpr}/arena.h +3 -11
- data/src/core/lib/{support → gpr}/atm.cc +0 -0
- data/src/core/lib/{support → gpr}/avl.cc +0 -0
- data/src/core/lib/{support → gpr}/cmdline.cc +1 -1
- data/src/core/lib/{support → gpr}/cpu_iphone.cc +0 -0
- data/src/core/lib/{support → gpr}/cpu_linux.cc +0 -0
- data/src/core/lib/{support → gpr}/cpu_posix.cc +0 -0
- data/src/core/lib/{support → gpr}/cpu_windows.cc +0 -0
- data/src/core/lib/{support → gpr}/env.h +3 -11
- data/src/core/lib/{support → gpr}/env_linux.cc +2 -2
- data/src/core/lib/{support → gpr}/env_posix.cc +4 -4
- data/src/core/lib/{support → gpr}/env_windows.cc +3 -3
- data/src/core/lib/{support → gpr}/fork.cc +3 -3
- data/src/core/lib/{support → gpr}/fork.h +3 -3
- data/src/core/lib/{support → gpr}/host_port.cc +1 -1
- data/src/core/lib/{support → gpr}/log.cc +3 -3
- data/src/core/lib/{support → gpr}/log_android.cc +3 -3
- data/src/core/lib/{support → gpr}/log_linux.cc +1 -1
- data/src/core/lib/{support → gpr}/log_posix.cc +5 -5
- data/src/core/lib/{support → gpr}/log_windows.cc +3 -3
- data/src/core/lib/{support → gpr}/mpscq.cc +1 -1
- data/src/core/lib/{support → gpr}/mpscq.h +3 -10
- data/src/core/lib/{support → gpr}/murmur_hash.cc +1 -1
- data/src/core/lib/{support → gpr}/murmur_hash.h +3 -11
- data/src/core/lib/{support → gpr}/spinlock.h +3 -3
- data/src/core/lib/{support → gpr}/string.cc +1 -1
- data/src/core/lib/{support → gpr}/string.h +3 -10
- data/src/core/lib/{support → gpr}/string_posix.cc +0 -0
- data/src/core/lib/{support → gpr}/string_util_windows.cc +2 -2
- data/src/core/lib/{support → gpr}/string_windows.cc +1 -1
- data/src/core/lib/{support → gpr}/string_windows.h +3 -11
- data/src/core/lib/{support → gpr}/subprocess_posix.cc +0 -0
- data/src/core/lib/{support → gpr}/subprocess_windows.cc +2 -2
- data/src/core/lib/{support → gpr}/sync.cc +0 -0
- data/src/core/lib/{support → gpr}/sync_posix.cc +10 -1
- data/src/core/lib/{support → gpr}/sync_windows.cc +0 -0
- data/src/core/lib/{support → gpr}/thd.cc +0 -0
- data/src/core/lib/{support → gpr}/thd_internal.h +3 -3
- data/src/core/lib/{support → gpr}/thd_posix.cc +18 -2
- data/src/core/lib/{support → gpr}/thd_windows.cc +2 -1
- data/src/core/lib/{support → gpr}/time.cc +0 -0
- data/src/core/lib/{support → gpr}/time_posix.cc +2 -4
- data/src/core/lib/{support → gpr}/time_precise.cc +1 -1
- data/src/core/lib/{support → gpr}/time_precise.h +3 -11
- data/src/core/lib/{support → gpr}/time_windows.cc +1 -3
- data/src/core/lib/{support → gpr}/tls_pthread.cc +0 -0
- data/src/core/lib/{support → gpr}/tmpfile.h +3 -11
- data/src/core/lib/{support → gpr}/tmpfile_msys.cc +2 -2
- data/src/core/lib/{support → gpr}/tmpfile_posix.cc +2 -2
- data/src/core/lib/{support → gpr}/tmpfile_windows.cc +2 -2
- data/src/core/lib/{support → gpr}/wrap_memcpy.cc +0 -0
- data/src/core/lib/http/format_request.cc +1 -1
- data/src/core/lib/http/format_request.h +0 -8
- data/src/core/lib/http/httpcli.cc +55 -74
- data/src/core/lib/http/httpcli.h +13 -22
- data/src/core/lib/http/httpcli_security_connector.cc +27 -33
- data/src/core/lib/http/parser.h +0 -8
- data/src/core/lib/iomgr/block_annotate.h +10 -17
- data/src/core/lib/iomgr/call_combiner.cc +14 -17
- data/src/core/lib/iomgr/call_combiner.h +16 -34
- data/src/core/lib/iomgr/closure.h +24 -37
- data/src/core/lib/iomgr/combiner.cc +62 -66
- data/src/core/lib/iomgr/combiner.h +6 -16
- data/src/core/lib/iomgr/endpoint.cc +15 -21
- data/src/core/lib/iomgr/endpoint.h +16 -33
- data/src/core/lib/iomgr/endpoint_pair.h +0 -8
- data/src/core/lib/iomgr/endpoint_pair_posix.cc +4 -5
- data/src/core/lib/iomgr/endpoint_pair_windows.cc +4 -6
- data/src/core/lib/iomgr/error.cc +2 -6
- data/src/core/lib/iomgr/error.h +4 -9
- data/src/core/lib/iomgr/error_internal.h +0 -8
- data/src/core/lib/iomgr/ev_epoll1_linux.cc +110 -117
- data/src/core/lib/iomgr/ev_epoll1_linux.h +0 -8
- data/src/core/lib/iomgr/ev_epollex_linux.cc +111 -141
- data/src/core/lib/iomgr/ev_epollex_linux.h +0 -8
- data/src/core/lib/iomgr/ev_epollsig_linux.cc +83 -109
- data/src/core/lib/iomgr/ev_epollsig_linux.h +2 -10
- data/src/core/lib/iomgr/ev_poll_posix.cc +103 -125
- data/src/core/lib/iomgr/ev_poll_posix.h +0 -8
- data/src/core/lib/iomgr/ev_posix.cc +35 -50
- data/src/core/lib/iomgr/ev_posix.h +27 -53
- data/src/core/lib/iomgr/exec_ctx.cc +46 -78
- data/src/core/lib/iomgr/exec_ctx.h +127 -60
- data/src/core/lib/iomgr/executor.cc +34 -38
- data/src/core/lib/iomgr/executor.h +3 -11
- data/src/core/lib/iomgr/fork_posix.cc +13 -12
- data/src/core/lib/iomgr/gethostname.h +0 -8
- data/src/core/lib/iomgr/gethostname_sysconf.cc +1 -1
- data/src/core/lib/iomgr/iocp_windows.cc +14 -16
- data/src/core/lib/iomgr/iocp_windows.h +1 -10
- data/src/core/lib/iomgr/iomgr.cc +60 -59
- data/src/core/lib/iomgr/iomgr.h +3 -12
- data/src/core/lib/iomgr/iomgr_internal.h +0 -8
- data/src/core/lib/iomgr/iomgr_uv.cc +2 -3
- data/src/core/lib/iomgr/iomgr_uv.h +0 -8
- data/src/core/lib/iomgr/is_epollexclusive_available.cc +1 -1
- data/src/core/lib/iomgr/load_file.cc +1 -1
- data/src/core/lib/iomgr/load_file.h +0 -8
- data/src/core/lib/iomgr/lockfree_event.cc +7 -8
- data/src/core/lib/iomgr/lockfree_event.h +3 -3
- data/src/core/lib/iomgr/polling_entity.cc +6 -10
- data/src/core/lib/iomgr/polling_entity.h +2 -11
- data/src/core/lib/iomgr/pollset.h +4 -13
- data/src/core/lib/iomgr/pollset_set.h +5 -18
- data/src/core/lib/iomgr/pollset_set_uv.cc +5 -10
- data/src/core/lib/iomgr/pollset_set_windows.cc +5 -10
- data/src/core/lib/iomgr/pollset_uv.cc +8 -9
- data/src/core/lib/iomgr/pollset_uv.h +0 -8
- data/src/core/lib/iomgr/pollset_windows.cc +14 -15
- data/src/core/lib/iomgr/pollset_windows.h +0 -8
- data/src/core/lib/iomgr/port.h +6 -1
- data/src/core/lib/iomgr/resolve_address.h +1 -10
- data/src/core/lib/iomgr/resolve_address_posix.cc +10 -12
- data/src/core/lib/iomgr/resolve_address_uv.cc +7 -8
- data/src/core/lib/iomgr/resolve_address_windows.cc +8 -9
- data/src/core/lib/iomgr/resource_quota.cc +77 -107
- data/src/core/lib/iomgr/resource_quota.h +8 -25
- data/src/core/lib/iomgr/sockaddr_utils.cc +1 -1
- data/src/core/lib/iomgr/sockaddr_utils.h +0 -8
- data/src/core/lib/iomgr/socket_factory_posix.cc +1 -1
- data/src/core/lib/iomgr/socket_factory_posix.h +0 -8
- data/src/core/lib/iomgr/socket_mutator.cc +1 -1
- data/src/core/lib/iomgr/socket_mutator.h +1 -9
- data/src/core/lib/iomgr/socket_utils.h +0 -8
- data/src/core/lib/iomgr/socket_utils_common_posix.cc +1 -1
- data/src/core/lib/iomgr/socket_utils_posix.h +0 -8
- data/src/core/lib/iomgr/socket_windows.cc +8 -11
- data/src/core/lib/iomgr/socket_windows.h +3 -14
- data/src/core/lib/iomgr/tcp_client.h +1 -10
- data/src/core/lib/iomgr/tcp_client_posix.cc +94 -78
- data/src/core/lib/iomgr/tcp_client_posix.h +36 -8
- data/src/core/lib/iomgr/tcp_client_uv.cc +16 -23
- data/src/core/lib/iomgr/tcp_client_windows.cc +22 -25
- data/src/core/lib/iomgr/tcp_posix.cc +131 -153
- data/src/core/lib/iomgr/tcp_posix.h +3 -12
- data/src/core/lib/iomgr/tcp_server.h +6 -17
- data/src/core/lib/iomgr/tcp_server_posix.cc +31 -35
- data/src/core/lib/iomgr/tcp_server_utils_posix.h +0 -8
- data/src/core/lib/iomgr/tcp_server_utils_posix_common.cc +1 -1
- data/src/core/lib/iomgr/tcp_server_uv.cc +23 -34
- data/src/core/lib/iomgr/tcp_server_windows.cc +24 -34
- data/src/core/lib/iomgr/tcp_uv.cc +42 -56
- data/src/core/lib/iomgr/tcp_uv.h +0 -8
- data/src/core/lib/iomgr/tcp_windows.cc +43 -50
- data/src/core/lib/iomgr/tcp_windows.h +1 -9
- data/src/core/lib/iomgr/time_averaged_stats.h +0 -8
- data/src/core/lib/iomgr/timer.h +6 -15
- data/src/core/lib/iomgr/timer_generic.cc +22 -27
- data/src/core/lib/iomgr/timer_heap.h +0 -8
- data/src/core/lib/iomgr/timer_manager.cc +17 -19
- data/src/core/lib/iomgr/timer_manager.h +0 -8
- data/src/core/lib/iomgr/timer_uv.cc +12 -14
- data/src/core/lib/iomgr/udp_server.cc +148 -54
- data/src/core/lib/iomgr/udp_server.h +16 -21
- data/src/core/lib/iomgr/unix_sockets_posix.h +0 -8
- data/src/core/lib/iomgr/wakeup_fd_cv.cc +4 -4
- data/src/core/lib/iomgr/wakeup_fd_cv.h +12 -20
- data/src/core/lib/iomgr/wakeup_fd_nospecial.cc +1 -1
- data/src/core/lib/iomgr/wakeup_fd_pipe.h +0 -8
- data/src/core/lib/iomgr/wakeup_fd_posix.h +0 -8
- data/src/core/lib/json/json.h +0 -8
- data/src/core/lib/json/json_reader.h +0 -8
- data/src/core/lib/json/json_writer.h +0 -8
- data/src/core/lib/profiling/basic_timers.cc +3 -2
- data/src/core/lib/profiling/timers.h +0 -8
- data/src/core/lib/security/context/security_context.cc +9 -10
- data/src/core/lib/security/context/security_context.h +0 -8
- data/src/core/lib/security/credentials/composite/composite_credentials.cc +23 -28
- data/src/core/lib/security/credentials/composite/composite_credentials.h +0 -8
- data/src/core/lib/security/credentials/credentials.cc +33 -42
- data/src/core/lib/security/credentials/credentials.h +24 -43
- data/src/core/lib/security/credentials/credentials_metadata.cc +2 -2
- data/src/core/lib/security/credentials/fake/fake_credentials.cc +16 -22
- data/src/core/lib/security/credentials/fake/fake_credentials.h +0 -8
- data/src/core/lib/security/credentials/google_default/credentials_generic.cc +3 -3
- data/src/core/lib/security/credentials/google_default/google_default_credentials.cc +28 -34
- data/src/core/lib/security/credentials/google_default/google_default_credentials.h +0 -8
- data/src/core/lib/security/credentials/iam/iam_credentials.cc +9 -13
- data/src/core/lib/security/credentials/jwt/json_token.cc +1 -1
- data/src/core/lib/security/credentials/jwt/json_token.h +0 -8
- data/src/core/lib/security/credentials/jwt/jwt_credentials.cc +14 -20
- data/src/core/lib/security/credentials/jwt/jwt_credentials.h +1 -10
- data/src/core/lib/security/credentials/jwt/jwt_verifier.cc +56 -72
- data/src/core/lib/security/credentials/jwt/jwt_verifier.h +5 -17
- data/src/core/lib/security/credentials/oauth2/oauth2_credentials.cc +47 -55
- data/src/core/lib/security/credentials/oauth2/oauth2_credentials.h +3 -12
- data/src/core/lib/security/credentials/plugin/plugin_credentials.cc +23 -28
- data/src/core/lib/security/credentials/ssl/ssl_credentials.cc +8 -13
- data/src/core/lib/security/credentials/ssl/ssl_credentials.h +0 -8
- data/src/core/lib/security/transport/auth_filters.h +0 -8
- data/src/core/lib/security/transport/client_auth_filter.cc +45 -54
- data/src/core/lib/security/transport/lb_targets_info.cc +2 -2
- data/src/core/lib/security/transport/lb_targets_info.h +0 -8
- data/src/core/lib/security/transport/secure_endpoint.cc +54 -68
- data/src/core/lib/security/transport/secure_endpoint.h +0 -8
- data/src/core/lib/security/transport/security_connector.cc +62 -86
- data/src/core/lib/security/transport/security_connector.h +22 -39
- data/src/core/lib/security/transport/security_handshaker.cc +83 -106
- data/src/core/lib/security/transport/security_handshaker.h +1 -10
- data/src/core/lib/security/transport/server_auth_filter.cc +31 -38
- data/src/core/lib/security/transport/tsi_error.h +0 -8
- data/src/core/lib/security/util/json_util.h +0 -8
- data/src/core/lib/slice/b64.cc +5 -6
- data/src/core/lib/slice/b64.h +3 -12
- data/src/core/lib/slice/percent_encoding.h +0 -8
- data/src/core/lib/slice/slice.cc +8 -9
- data/src/core/lib/slice/slice_buffer.cc +11 -16
- data/src/core/lib/slice/slice_hash_table.cc +5 -7
- data/src/core/lib/slice/slice_hash_table.h +2 -12
- data/src/core/lib/slice/slice_intern.cc +4 -5
- data/src/core/lib/slice/slice_internal.h +4 -15
- data/src/core/lib/slice/slice_string_helpers.cc +1 -1
- data/src/core/lib/slice/slice_string_helpers.h +1 -9
- data/src/core/lib/surface/alarm.cc +11 -14
- data/src/core/lib/surface/alarm_internal.h +0 -8
- data/src/core/lib/surface/byte_buffer.cc +2 -3
- data/src/core/lib/surface/byte_buffer_reader.cc +7 -9
- data/src/core/lib/surface/call.cc +198 -241
- data/src/core/lib/surface/call.h +9 -23
- data/src/core/lib/surface/call_details.cc +3 -4
- data/src/core/lib/surface/call_log_batch.cc +1 -1
- data/src/core/lib/surface/call_test_only.h +0 -8
- data/src/core/lib/surface/channel.cc +53 -64
- data/src/core/lib/surface/channel.h +12 -23
- data/src/core/lib/surface/channel_init.cc +2 -3
- data/src/core/lib/surface/channel_init.h +2 -12
- data/src/core/lib/surface/channel_ping.cc +7 -9
- data/src/core/lib/surface/channel_stack_type.h +0 -8
- data/src/core/lib/surface/completion_queue.cc +158 -176
- data/src/core/lib/surface/completion_queue.h +9 -20
- data/src/core/lib/surface/completion_queue_factory.h +0 -8
- data/src/core/lib/surface/event_string.cc +1 -1
- data/src/core/lib/surface/event_string.h +0 -8
- data/src/core/lib/surface/init.cc +27 -25
- data/src/core/lib/surface/init.h +0 -8
- data/src/core/lib/surface/init_secure.cc +2 -2
- data/src/core/lib/surface/lame_client.cc +30 -33
- data/src/core/lib/surface/lame_client.h +0 -8
- data/src/core/lib/surface/server.cc +151 -203
- data/src/core/lib/surface/server.h +7 -16
- data/src/core/lib/surface/validate_metadata.h +0 -8
- data/src/core/lib/surface/version.cc +2 -2
- data/src/core/lib/transport/bdp_estimator.cc +2 -2
- data/src/core/lib/transport/bdp_estimator.h +1 -1
- data/src/core/lib/transport/byte_stream.cc +24 -38
- data/src/core/lib/transport/byte_stream.h +10 -25
- data/src/core/lib/transport/connectivity_state.cc +9 -13
- data/src/core/lib/transport/connectivity_state.h +4 -14
- data/src/core/lib/transport/error_utils.cc +6 -6
- data/src/core/lib/transport/error_utils.h +2 -11
- data/src/core/lib/transport/metadata.cc +21 -23
- data/src/core/lib/transport/metadata.h +8 -20
- data/src/core/lib/transport/metadata_batch.cc +34 -45
- data/src/core/lib/transport/metadata_batch.h +18 -32
- data/src/core/lib/transport/service_config.cc +11 -15
- data/src/core/lib/transport/service_config.h +3 -13
- data/src/core/lib/transport/static_metadata.cc +1 -1
- data/src/core/lib/transport/static_metadata.h +1 -7
- data/src/core/lib/transport/status_conversion.cc +2 -3
- data/src/core/lib/transport/status_conversion.h +1 -10
- data/src/core/lib/transport/timeout_encoding.cc +1 -1
- data/src/core/lib/transport/timeout_encoding.h +1 -9
- data/src/core/lib/transport/transport.cc +36 -50
- data/src/core/lib/transport/transport.h +28 -30
- data/src/core/lib/transport/transport_impl.h +12 -23
- data/src/core/lib/transport/transport_op_string.cc +2 -2
- data/src/core/plugin_registry/grpc_plugin_registry.cc +34 -34
- data/src/core/tsi/fake_transport_security.cc +7 -10
- data/src/core/tsi/fake_transport_security.h +0 -8
- data/src/core/tsi/gts_transport_security.cc +2 -2
- data/src/core/tsi/gts_transport_security.h +0 -8
- data/src/core/tsi/ssl_transport_security.cc +3 -0
- data/src/core/tsi/ssl_transport_security.h +0 -8
- data/src/core/tsi/ssl_types.h +0 -8
- data/src/core/tsi/transport_security.h +1 -9
- data/src/core/tsi/transport_security_adapter.h +0 -8
- data/src/core/tsi/transport_security_grpc.cc +11 -18
- data/src/core/tsi/transport_security_grpc.h +9 -21
- data/src/core/tsi/transport_security_interface.h +0 -8
- data/src/ruby/ext/grpc/rb_grpc_imports.generated.c +0 -30
- data/src/ruby/ext/grpc/rb_grpc_imports.generated.h +2 -48
- data/src/ruby/lib/grpc/version.rb +1 -1
- data/src/ruby/spec/channel_connection_spec.rb +2 -1
- data/src/ruby/spec/client_auth_spec.rb +1 -1
- data/src/ruby/spec/client_server_spec.rb +2 -2
- data/src/ruby/spec/generic/active_call_spec.rb +1 -1
- data/src/ruby/spec/generic/client_stub_spec.rb +4 -4
- data/src/ruby/spec/generic/interceptor_registry_spec.rb +1 -1
- data/src/ruby/spec/generic/rpc_server_spec.rb +12 -12
- data/src/ruby/spec/google_rpc_status_utils_spec.rb +3 -2
- data/src/ruby/spec/pb/health/checker_spec.rb +1 -1
- data/src/ruby/spec/server_spec.rb +9 -9
- data/src/ruby/spec/support/helpers.rb +35 -1
- metadata +68 -66
- data/include/grpc/impl/codegen/exec_ctx_fwd.h +0 -26
- data/include/grpc/support/histogram.h +0 -64
- data/src/core/lib/support/histogram.cc +0 -227
@@ -22,16 +22,8 @@
|
|
22
22
|
#include "src/core/lib/iomgr/ev_posix.h"
|
23
23
|
#include "src/core/lib/iomgr/port.h"
|
24
24
|
|
25
|
-
#ifdef __cplusplus
|
26
|
-
extern "C" {
|
27
|
-
#endif
|
28
|
-
|
29
25
|
// a polling engine that utilizes a singleton epoll set and turnstile polling
|
30
26
|
|
31
27
|
const grpc_event_engine_vtable* grpc_init_epoll1_linux(bool explicit_request);
|
32
28
|
|
33
|
-
#ifdef __cplusplus
|
34
|
-
}
|
35
|
-
#endif
|
36
|
-
|
37
29
|
#endif /* GRPC_CORE_LIB_IOMGR_EV_EPOLL1_LINUX_H */
|
@@ -21,7 +21,7 @@
|
|
21
21
|
#include <grpc/support/log.h>
|
22
22
|
|
23
23
|
/* This polling engine is only relevant on linux kernels supporting epoll() */
|
24
|
-
#ifdef
|
24
|
+
#ifdef GRPC_LINUX_EPOLL_CREATE1
|
25
25
|
|
26
26
|
#include "src/core/lib/iomgr/ev_epollex_linux.h"
|
27
27
|
|
@@ -41,6 +41,8 @@
|
|
41
41
|
#include <grpc/support/useful.h>
|
42
42
|
|
43
43
|
#include "src/core/lib/debug/stats.h"
|
44
|
+
#include "src/core/lib/gpr++/manual_constructor.h"
|
45
|
+
#include "src/core/lib/gpr/spinlock.h"
|
44
46
|
#include "src/core/lib/iomgr/block_annotate.h"
|
45
47
|
#include "src/core/lib/iomgr/iomgr_internal.h"
|
46
48
|
#include "src/core/lib/iomgr/is_epollexclusive_available.h"
|
@@ -49,8 +51,6 @@
|
|
49
51
|
#include "src/core/lib/iomgr/timer.h"
|
50
52
|
#include "src/core/lib/iomgr/wakeup_fd_posix.h"
|
51
53
|
#include "src/core/lib/profiling/timers.h"
|
52
|
-
#include "src/core/lib/support/manual_constructor.h"
|
53
|
-
#include "src/core/lib/support/spinlock.h"
|
54
54
|
|
55
55
|
// debug aid: create workers on the heap (allows asan to spot
|
56
56
|
// use-after-destruction)
|
@@ -257,8 +257,7 @@ static gpr_mu fd_freelist_mu;
|
|
257
257
|
|
258
258
|
#ifndef NDEBUG
|
259
259
|
#define REF_BY(fd, n, reason) ref_by(fd, n, reason, __FILE__, __LINE__)
|
260
|
-
#define UNREF_BY(
|
261
|
-
unref_by(ec, fd, n, reason, __FILE__, __LINE__)
|
260
|
+
#define UNREF_BY(fd, n, reason) unref_by(fd, n, reason, __FILE__, __LINE__)
|
262
261
|
static void ref_by(grpc_fd* fd, int n, const char* reason, const char* file,
|
263
262
|
int line) {
|
264
263
|
if (grpc_trace_fd_refcount.enabled()) {
|
@@ -269,13 +268,13 @@ static void ref_by(grpc_fd* fd, int n, const char* reason, const char* file,
|
|
269
268
|
}
|
270
269
|
#else
|
271
270
|
#define REF_BY(fd, n, reason) ref_by(fd, n)
|
272
|
-
#define UNREF_BY(
|
271
|
+
#define UNREF_BY(fd, n, reason) unref_by(fd, n)
|
273
272
|
static void ref_by(grpc_fd* fd, int n) {
|
274
273
|
#endif
|
275
274
|
GPR_ASSERT(gpr_atm_no_barrier_fetch_add(&fd->refst, n) > 0);
|
276
275
|
}
|
277
276
|
|
278
|
-
static void fd_destroy(
|
277
|
+
static void fd_destroy(void* arg, grpc_error* error) {
|
279
278
|
grpc_fd* fd = (grpc_fd*)arg;
|
280
279
|
/* Add the fd to the freelist */
|
281
280
|
grpc_iomgr_unregister_object(&fd->iomgr_object);
|
@@ -293,8 +292,8 @@ static void fd_destroy(grpc_exec_ctx* exec_ctx, void* arg, grpc_error* error) {
|
|
293
292
|
}
|
294
293
|
|
295
294
|
#ifndef NDEBUG
|
296
|
-
static void unref_by(
|
297
|
-
|
295
|
+
static void unref_by(grpc_fd* fd, int n, const char* reason, const char* file,
|
296
|
+
int line) {
|
298
297
|
if (grpc_trace_fd_refcount.enabled()) {
|
299
298
|
gpr_log(GPR_DEBUG,
|
300
299
|
"FD %d %p unref %d %" PRIdPTR " -> %" PRIdPTR " [%s; %s:%d]",
|
@@ -302,12 +301,11 @@ static void unref_by(grpc_exec_ctx* exec_ctx, grpc_fd* fd, int n,
|
|
302
301
|
gpr_atm_no_barrier_load(&fd->refst) - n, reason, file, line);
|
303
302
|
}
|
304
303
|
#else
|
305
|
-
static void unref_by(
|
304
|
+
static void unref_by(grpc_fd* fd, int n) {
|
306
305
|
#endif
|
307
306
|
gpr_atm old = gpr_atm_full_fetch_add(&fd->refst, -n);
|
308
307
|
if (old == n) {
|
309
308
|
GRPC_CLOSURE_SCHED(
|
310
|
-
exec_ctx,
|
311
309
|
GRPC_CLOSURE_CREATE(fd_destroy, fd, grpc_schedule_on_exec_ctx),
|
312
310
|
GRPC_ERROR_NONE);
|
313
311
|
} else {
|
@@ -373,8 +371,7 @@ static int fd_wrapped_fd(grpc_fd* fd) {
|
|
373
371
|
return (gpr_atm_acq_load(&fd->refst) & 1) ? ret_fd : -1;
|
374
372
|
}
|
375
373
|
|
376
|
-
static void fd_orphan(
|
377
|
-
grpc_closure* on_done, int* release_fd,
|
374
|
+
static void fd_orphan(grpc_fd* fd, grpc_closure* on_done, int* release_fd,
|
378
375
|
bool already_closed, const char* reason) {
|
379
376
|
bool is_fd_closed = already_closed;
|
380
377
|
|
@@ -399,15 +396,14 @@ static void fd_orphan(grpc_exec_ctx* exec_ctx, grpc_fd* fd,
|
|
399
396
|
to be alive (and not added to freelist) until the end of this function */
|
400
397
|
REF_BY(fd, 1, reason);
|
401
398
|
|
402
|
-
GRPC_CLOSURE_SCHED(
|
399
|
+
GRPC_CLOSURE_SCHED(fd->on_done_closure, GRPC_ERROR_NONE);
|
403
400
|
|
404
401
|
gpr_mu_unlock(&fd->orphan_mu);
|
405
402
|
|
406
|
-
UNREF_BY(
|
403
|
+
UNREF_BY(fd, 2, reason); /* Drop the reference */
|
407
404
|
}
|
408
405
|
|
409
|
-
static grpc_pollset* fd_get_read_notifier_pollset(
|
410
|
-
grpc_fd* fd) {
|
406
|
+
static grpc_pollset* fd_get_read_notifier_pollset(grpc_fd* fd) {
|
411
407
|
gpr_atm notifier = gpr_atm_acq_load(&fd->read_notifier_pollset);
|
412
408
|
return (grpc_pollset*)notifier;
|
413
409
|
}
|
@@ -417,22 +413,20 @@ static bool fd_is_shutdown(grpc_fd* fd) {
|
|
417
413
|
}
|
418
414
|
|
419
415
|
/* Might be called multiple times */
|
420
|
-
static void fd_shutdown(
|
421
|
-
if (fd->read_closure->SetShutdown(
|
416
|
+
static void fd_shutdown(grpc_fd* fd, grpc_error* why) {
|
417
|
+
if (fd->read_closure->SetShutdown(GRPC_ERROR_REF(why))) {
|
422
418
|
shutdown(fd->fd, SHUT_RDWR);
|
423
|
-
fd->write_closure->SetShutdown(
|
419
|
+
fd->write_closure->SetShutdown(GRPC_ERROR_REF(why));
|
424
420
|
}
|
425
421
|
GRPC_ERROR_UNREF(why);
|
426
422
|
}
|
427
423
|
|
428
|
-
static void fd_notify_on_read(
|
429
|
-
|
430
|
-
fd->read_closure->NotifyOn(exec_ctx, closure);
|
424
|
+
static void fd_notify_on_read(grpc_fd* fd, grpc_closure* closure) {
|
425
|
+
fd->read_closure->NotifyOn(closure);
|
431
426
|
}
|
432
427
|
|
433
|
-
static void fd_notify_on_write(
|
434
|
-
|
435
|
-
fd->write_closure->NotifyOn(exec_ctx, closure);
|
428
|
+
static void fd_notify_on_write(grpc_fd* fd, grpc_closure* closure) {
|
429
|
+
fd->write_closure->NotifyOn(closure);
|
436
430
|
}
|
437
431
|
|
438
432
|
/*******************************************************************************
|
@@ -556,8 +550,7 @@ static void pollset_global_shutdown(void) {
|
|
556
550
|
}
|
557
551
|
|
558
552
|
/* pollset->mu must be held while calling this function */
|
559
|
-
static void pollset_maybe_finish_shutdown(
|
560
|
-
grpc_pollset* pollset) {
|
553
|
+
static void pollset_maybe_finish_shutdown(grpc_pollset* pollset) {
|
561
554
|
if (grpc_polling_trace.enabled()) {
|
562
555
|
gpr_log(GPR_DEBUG,
|
563
556
|
"PS:%p (pollable:%p) maybe_finish_shutdown sc=%p (target:!NULL) "
|
@@ -567,7 +560,7 @@ static void pollset_maybe_finish_shutdown(grpc_exec_ctx* exec_ctx,
|
|
567
560
|
}
|
568
561
|
if (pollset->shutdown_closure != nullptr && pollset->root_worker == nullptr &&
|
569
562
|
pollset->containing_pollset_set_count == 0) {
|
570
|
-
GRPC_CLOSURE_SCHED(
|
563
|
+
GRPC_CLOSURE_SCHED(pollset->shutdown_closure, GRPC_ERROR_NONE);
|
571
564
|
pollset->shutdown_closure = nullptr;
|
572
565
|
}
|
573
566
|
}
|
@@ -575,8 +568,7 @@ static void pollset_maybe_finish_shutdown(grpc_exec_ctx* exec_ctx,
|
|
575
568
|
/* pollset->mu must be held before calling this function,
|
576
569
|
* pollset->active_pollable->mu & specific_worker->pollable_obj->mu must not be
|
577
570
|
* held */
|
578
|
-
static grpc_error* kick_one_worker(
|
579
|
-
grpc_pollset_worker* specific_worker) {
|
571
|
+
static grpc_error* kick_one_worker(grpc_pollset_worker* specific_worker) {
|
580
572
|
pollable* p = specific_worker->pollable_obj;
|
581
573
|
grpc_core::mu_guard lock(&p->mu);
|
582
574
|
GPR_ASSERT(specific_worker != nullptr);
|
@@ -584,19 +576,19 @@ static grpc_error* kick_one_worker(grpc_exec_ctx* exec_ctx,
|
|
584
576
|
if (grpc_polling_trace.enabled()) {
|
585
577
|
gpr_log(GPR_DEBUG, "PS:%p kicked_specific_but_already_kicked", p);
|
586
578
|
}
|
587
|
-
GRPC_STATS_INC_POLLSET_KICKED_AGAIN(
|
579
|
+
GRPC_STATS_INC_POLLSET_KICKED_AGAIN();
|
588
580
|
return GRPC_ERROR_NONE;
|
589
581
|
}
|
590
582
|
if (gpr_tls_get(&g_current_thread_worker) == (intptr_t)specific_worker) {
|
591
583
|
if (grpc_polling_trace.enabled()) {
|
592
584
|
gpr_log(GPR_DEBUG, "PS:%p kicked_specific_but_awake", p);
|
593
585
|
}
|
594
|
-
GRPC_STATS_INC_POLLSET_KICK_OWN_THREAD(
|
586
|
+
GRPC_STATS_INC_POLLSET_KICK_OWN_THREAD();
|
595
587
|
specific_worker->kicked = true;
|
596
588
|
return GRPC_ERROR_NONE;
|
597
589
|
}
|
598
590
|
if (specific_worker == p->root_worker) {
|
599
|
-
GRPC_STATS_INC_POLLSET_KICK_WAKEUP_FD(
|
591
|
+
GRPC_STATS_INC_POLLSET_KICK_WAKEUP_FD();
|
600
592
|
if (grpc_polling_trace.enabled()) {
|
601
593
|
gpr_log(GPR_DEBUG, "PS:%p kicked_specific_via_wakeup_fd", p);
|
602
594
|
}
|
@@ -605,7 +597,7 @@ static grpc_error* kick_one_worker(grpc_exec_ctx* exec_ctx,
|
|
605
597
|
return error;
|
606
598
|
}
|
607
599
|
if (specific_worker->initialized_cv) {
|
608
|
-
GRPC_STATS_INC_POLLSET_KICK_WAKEUP_CV(
|
600
|
+
GRPC_STATS_INC_POLLSET_KICK_WAKEUP_CV();
|
609
601
|
if (grpc_polling_trace.enabled()) {
|
610
602
|
gpr_log(GPR_DEBUG, "PS:%p kicked_specific_via_cv", p);
|
611
603
|
}
|
@@ -618,9 +610,9 @@ static grpc_error* kick_one_worker(grpc_exec_ctx* exec_ctx,
|
|
618
610
|
return GRPC_ERROR_NONE;
|
619
611
|
}
|
620
612
|
|
621
|
-
static grpc_error* pollset_kick(
|
613
|
+
static grpc_error* pollset_kick(grpc_pollset* pollset,
|
622
614
|
grpc_pollset_worker* specific_worker) {
|
623
|
-
GRPC_STATS_INC_POLLSET_KICK(
|
615
|
+
GRPC_STATS_INC_POLLSET_KICK();
|
624
616
|
if (grpc_polling_trace.enabled()) {
|
625
617
|
gpr_log(GPR_DEBUG,
|
626
618
|
"PS:%p kick %p tls_pollset=%p tls_worker=%p pollset.root_worker=%p",
|
@@ -634,7 +626,7 @@ static grpc_error* pollset_kick(grpc_exec_ctx* exec_ctx, grpc_pollset* pollset,
|
|
634
626
|
if (grpc_polling_trace.enabled()) {
|
635
627
|
gpr_log(GPR_DEBUG, "PS:%p kicked_any_without_poller", pollset);
|
636
628
|
}
|
637
|
-
GRPC_STATS_INC_POLLSET_KICKED_WITHOUT_POLLER(
|
629
|
+
GRPC_STATS_INC_POLLSET_KICKED_WITHOUT_POLLER();
|
638
630
|
pollset->kicked_without_poller = true;
|
639
631
|
return GRPC_ERROR_NONE;
|
640
632
|
} else {
|
@@ -654,29 +646,28 @@ static grpc_error* pollset_kick(grpc_exec_ctx* exec_ctx, grpc_pollset* pollset,
|
|
654
646
|
// so we take our chances and choose the SECOND worker enqueued against
|
655
647
|
// the pollset as a worker that's likely to be in cv_wait
|
656
648
|
return kick_one_worker(
|
657
|
-
|
649
|
+
pollset->root_worker->links[PWLINK_POLLSET].next);
|
658
650
|
}
|
659
651
|
} else {
|
660
652
|
if (grpc_polling_trace.enabled()) {
|
661
653
|
gpr_log(GPR_DEBUG, "PS:%p kicked_any_but_awake", pollset);
|
662
654
|
}
|
663
|
-
GRPC_STATS_INC_POLLSET_KICK_OWN_THREAD(
|
655
|
+
GRPC_STATS_INC_POLLSET_KICK_OWN_THREAD();
|
664
656
|
return GRPC_ERROR_NONE;
|
665
657
|
}
|
666
658
|
} else {
|
667
|
-
return kick_one_worker(
|
659
|
+
return kick_one_worker(specific_worker);
|
668
660
|
}
|
669
661
|
}
|
670
662
|
|
671
|
-
static grpc_error* pollset_kick_all(
|
672
|
-
grpc_pollset* pollset) {
|
663
|
+
static grpc_error* pollset_kick_all(grpc_pollset* pollset) {
|
673
664
|
grpc_error* error = GRPC_ERROR_NONE;
|
674
665
|
const char* err_desc = "pollset_kick_all";
|
675
666
|
grpc_pollset_worker* w = pollset->root_worker;
|
676
667
|
if (w != nullptr) {
|
677
668
|
do {
|
678
|
-
GRPC_STATS_INC_POLLSET_KICK(
|
679
|
-
append_error(&error, kick_one_worker(
|
669
|
+
GRPC_STATS_INC_POLLSET_KICK();
|
670
|
+
append_error(&error, kick_one_worker(w), err_desc);
|
680
671
|
w = w->links[PWLINK_POLLSET].next;
|
681
672
|
} while (w != pollset->root_worker);
|
682
673
|
}
|
@@ -689,10 +680,9 @@ static void pollset_init(grpc_pollset* pollset, gpr_mu** mu) {
|
|
689
680
|
*mu = &pollset->mu;
|
690
681
|
}
|
691
682
|
|
692
|
-
static int poll_deadline_to_millis_timeout(
|
693
|
-
grpc_millis millis) {
|
683
|
+
static int poll_deadline_to_millis_timeout(grpc_millis millis) {
|
694
684
|
if (millis == GRPC_MILLIS_INF_FUTURE) return -1;
|
695
|
-
grpc_millis delta = millis -
|
685
|
+
grpc_millis delta = millis - grpc_core::ExecCtx::Get()->Now();
|
696
686
|
if (delta > INT_MAX)
|
697
687
|
return INT_MAX;
|
698
688
|
else if (delta < 0)
|
@@ -701,9 +691,8 @@ static int poll_deadline_to_millis_timeout(grpc_exec_ctx* exec_ctx,
|
|
701
691
|
return (int)delta;
|
702
692
|
}
|
703
693
|
|
704
|
-
static void fd_become_readable(
|
705
|
-
|
706
|
-
fd->read_closure->SetReady(exec_ctx);
|
694
|
+
static void fd_become_readable(grpc_fd* fd, grpc_pollset* notifier) {
|
695
|
+
fd->read_closure->SetReady();
|
707
696
|
|
708
697
|
/* Note, it is possible that fd_become_readable might be called twice with
|
709
698
|
different 'notifier's when an fd becomes readable and it is in two epoll
|
@@ -714,9 +703,7 @@ static void fd_become_readable(grpc_exec_ctx* exec_ctx, grpc_fd* fd,
|
|
714
703
|
gpr_atm_rel_store(&fd->read_notifier_pollset, (gpr_atm)notifier);
|
715
704
|
}
|
716
705
|
|
717
|
-
static void fd_become_writable(
|
718
|
-
fd->write_closure->SetReady(exec_ctx);
|
719
|
-
}
|
706
|
+
static void fd_become_writable(grpc_fd* fd) { fd->write_closure->SetReady(); }
|
720
707
|
|
721
708
|
static grpc_error* fd_get_or_become_pollable(grpc_fd* fd, pollable** p) {
|
722
709
|
gpr_mu_lock(&fd->pollable_mu);
|
@@ -745,16 +732,14 @@ static grpc_error* fd_get_or_become_pollable(grpc_fd* fd, pollable** p) {
|
|
745
732
|
}
|
746
733
|
|
747
734
|
/* pollset->po.mu lock must be held by the caller before calling this */
|
748
|
-
static void pollset_shutdown(
|
749
|
-
grpc_closure* closure) {
|
735
|
+
static void pollset_shutdown(grpc_pollset* pollset, grpc_closure* closure) {
|
750
736
|
GPR_ASSERT(pollset->shutdown_closure == nullptr);
|
751
737
|
pollset->shutdown_closure = closure;
|
752
|
-
GRPC_LOG_IF_ERROR("pollset_shutdown", pollset_kick_all(
|
753
|
-
pollset_maybe_finish_shutdown(
|
738
|
+
GRPC_LOG_IF_ERROR("pollset_shutdown", pollset_kick_all(pollset));
|
739
|
+
pollset_maybe_finish_shutdown(pollset);
|
754
740
|
}
|
755
741
|
|
756
|
-
static grpc_error* pollable_process_events(
|
757
|
-
grpc_pollset* pollset,
|
742
|
+
static grpc_error* pollable_process_events(grpc_pollset* pollset,
|
758
743
|
pollable* pollable_obj, bool drain) {
|
759
744
|
static const char* err_desc = "pollset_process_events";
|
760
745
|
grpc_error* error = GRPC_ERROR_NONE;
|
@@ -784,10 +769,10 @@ static grpc_error* pollable_process_events(grpc_exec_ctx* exec_ctx,
|
|
784
769
|
pollset, fd, cancel, read_ev, write_ev);
|
785
770
|
}
|
786
771
|
if (read_ev || cancel) {
|
787
|
-
fd_become_readable(
|
772
|
+
fd_become_readable(fd, pollset);
|
788
773
|
}
|
789
774
|
if (write_ev || cancel) {
|
790
|
-
fd_become_writable(
|
775
|
+
fd_become_writable(fd);
|
791
776
|
}
|
792
777
|
}
|
793
778
|
}
|
@@ -796,14 +781,13 @@ static grpc_error* pollable_process_events(grpc_exec_ctx* exec_ctx,
|
|
796
781
|
}
|
797
782
|
|
798
783
|
/* pollset_shutdown is guaranteed to be called before pollset_destroy. */
|
799
|
-
static void pollset_destroy(
|
784
|
+
static void pollset_destroy(grpc_pollset* pollset) {
|
800
785
|
POLLABLE_UNREF(pollset->active_pollable, "pollset");
|
801
786
|
pollset->active_pollable = nullptr;
|
802
787
|
}
|
803
788
|
|
804
|
-
static grpc_error* pollable_epoll(
|
805
|
-
|
806
|
-
int timeout = poll_deadline_to_millis_timeout(exec_ctx, deadline);
|
789
|
+
static grpc_error* pollable_epoll(pollable* p, grpc_millis deadline) {
|
790
|
+
int timeout = poll_deadline_to_millis_timeout(deadline);
|
807
791
|
|
808
792
|
if (grpc_polling_trace.enabled()) {
|
809
793
|
char* desc = pollable_desc(p);
|
@@ -816,11 +800,11 @@ static grpc_error* pollable_epoll(grpc_exec_ctx* exec_ctx, pollable* p,
|
|
816
800
|
}
|
817
801
|
int r;
|
818
802
|
do {
|
819
|
-
GRPC_STATS_INC_SYSCALL_POLL(
|
803
|
+
GRPC_STATS_INC_SYSCALL_POLL();
|
820
804
|
r = epoll_wait(p->epfd, p->events, MAX_EPOLL_EVENTS, timeout);
|
821
805
|
} while (r < 0 && errno == EINTR);
|
822
806
|
if (timeout != 0) {
|
823
|
-
|
807
|
+
GRPC_SCHEDULING_END_BLOCKING_REGION;
|
824
808
|
}
|
825
809
|
|
826
810
|
if (r < 0) return GRPC_OS_ERROR(errno, "epoll_wait");
|
@@ -875,8 +859,7 @@ static worker_remove_result worker_remove(grpc_pollset_worker** root_worker,
|
|
875
859
|
}
|
876
860
|
|
877
861
|
/* Return true if this thread should poll */
|
878
|
-
static bool begin_worker(
|
879
|
-
grpc_pollset_worker* worker,
|
862
|
+
static bool begin_worker(grpc_pollset* pollset, grpc_pollset_worker* worker,
|
880
863
|
grpc_pollset_worker** worker_hdl,
|
881
864
|
grpc_millis deadline) {
|
882
865
|
bool do_poll = (pollset->shutdown_closure == nullptr);
|
@@ -897,7 +880,7 @@ static bool begin_worker(grpc_exec_ctx* exec_ctx, grpc_pollset* pollset,
|
|
897
880
|
worker->pollable_obj->root_worker != worker) {
|
898
881
|
gpr_log(GPR_DEBUG, "PS:%p wait %p w=%p for %dms", pollset,
|
899
882
|
worker->pollable_obj, worker,
|
900
|
-
poll_deadline_to_millis_timeout(
|
883
|
+
poll_deadline_to_millis_timeout(deadline));
|
901
884
|
}
|
902
885
|
while (do_poll && worker->pollable_obj->root_worker != worker) {
|
903
886
|
if (gpr_cv_wait(&worker->cv, &worker->pollable_obj->mu,
|
@@ -919,7 +902,7 @@ static bool begin_worker(grpc_exec_ctx* exec_ctx, grpc_pollset* pollset,
|
|
919
902
|
worker->pollable_obj, worker);
|
920
903
|
}
|
921
904
|
}
|
922
|
-
|
905
|
+
grpc_core::ExecCtx::Get()->InvalidateNow();
|
923
906
|
} else {
|
924
907
|
gpr_mu_unlock(&pollset->mu);
|
925
908
|
}
|
@@ -928,8 +911,7 @@ static bool begin_worker(grpc_exec_ctx* exec_ctx, grpc_pollset* pollset,
|
|
928
911
|
return do_poll;
|
929
912
|
}
|
930
913
|
|
931
|
-
static void end_worker(
|
932
|
-
grpc_pollset_worker* worker,
|
914
|
+
static void end_worker(grpc_pollset* pollset, grpc_pollset_worker* worker,
|
933
915
|
grpc_pollset_worker** worker_hdl) {
|
934
916
|
gpr_mu_lock(&pollset->mu);
|
935
917
|
gpr_mu_lock(&worker->pollable_obj->mu);
|
@@ -945,7 +927,7 @@ static void end_worker(grpc_exec_ctx* exec_ctx, grpc_pollset* pollset,
|
|
945
927
|
case WRR_EMPTIED:
|
946
928
|
if (pollset->active_pollable != worker->pollable_obj) {
|
947
929
|
// pollable no longer being polled: flush events
|
948
|
-
pollable_process_events(
|
930
|
+
pollable_process_events(pollset, worker->pollable_obj, true);
|
949
931
|
}
|
950
932
|
break;
|
951
933
|
case WRR_REMOVED:
|
@@ -955,7 +937,7 @@ static void end_worker(grpc_exec_ctx* exec_ctx, grpc_pollset* pollset,
|
|
955
937
|
POLLABLE_UNREF(worker->pollable_obj, "pollset_worker");
|
956
938
|
if (worker_remove(&pollset->root_worker, worker, PWLINK_POLLSET) ==
|
957
939
|
WRR_EMPTIED) {
|
958
|
-
pollset_maybe_finish_shutdown(
|
940
|
+
pollset_maybe_finish_shutdown(pollset);
|
959
941
|
}
|
960
942
|
if (worker->initialized_cv) {
|
961
943
|
gpr_cv_destroy(&worker->cv);
|
@@ -970,7 +952,7 @@ static long gettid(void) { return syscall(__NR_gettid); }
|
|
970
952
|
The function pollset_work() may temporarily release the lock (pollset->po.mu)
|
971
953
|
during the course of its execution but it will always re-acquire the lock and
|
972
954
|
ensure that it is held by the time the function returns */
|
973
|
-
static grpc_error* pollset_work(
|
955
|
+
static grpc_error* pollset_work(grpc_pollset* pollset,
|
974
956
|
grpc_pollset_worker** worker_hdl,
|
975
957
|
grpc_millis deadline) {
|
976
958
|
#ifdef GRPC_EPOLLEX_CREATE_WORKERS_ON_HEAP
|
@@ -988,7 +970,7 @@ static grpc_error* pollset_work(grpc_exec_ctx* exec_ctx, grpc_pollset* pollset,
|
|
988
970
|
gpr_log(GPR_DEBUG,
|
989
971
|
"PS:%p work hdl=%p worker=%p now=%" PRIdPTR " deadline=%" PRIdPTR
|
990
972
|
" kwp=%d pollable=%p",
|
991
|
-
pollset, worker_hdl, WORKER_PTR,
|
973
|
+
pollset, worker_hdl, WORKER_PTR, grpc_core::ExecCtx::Get()->Now(),
|
992
974
|
deadline, pollset->kicked_without_poller, pollset->active_pollable);
|
993
975
|
}
|
994
976
|
static const char* err_desc = "pollset_work";
|
@@ -996,25 +978,23 @@ static grpc_error* pollset_work(grpc_exec_ctx* exec_ctx, grpc_pollset* pollset,
|
|
996
978
|
if (pollset->kicked_without_poller) {
|
997
979
|
pollset->kicked_without_poller = false;
|
998
980
|
} else {
|
999
|
-
if (begin_worker(
|
981
|
+
if (begin_worker(pollset, WORKER_PTR, worker_hdl, deadline)) {
|
1000
982
|
gpr_tls_set(&g_current_thread_pollset, (intptr_t)pollset);
|
1001
983
|
gpr_tls_set(&g_current_thread_worker, (intptr_t)WORKER_PTR);
|
1002
984
|
if (WORKER_PTR->pollable_obj->event_cursor ==
|
1003
985
|
WORKER_PTR->pollable_obj->event_count) {
|
1004
|
-
append_error(
|
1005
|
-
|
1006
|
-
pollable_epoll(exec_ctx, WORKER_PTR->pollable_obj, deadline),
|
1007
|
-
err_desc);
|
986
|
+
append_error(&error, pollable_epoll(WORKER_PTR->pollable_obj, deadline),
|
987
|
+
err_desc);
|
1008
988
|
}
|
1009
|
-
append_error(
|
1010
|
-
|
1011
|
-
|
1012
|
-
|
1013
|
-
|
989
|
+
append_error(
|
990
|
+
&error,
|
991
|
+
pollable_process_events(pollset, WORKER_PTR->pollable_obj, false),
|
992
|
+
err_desc);
|
993
|
+
grpc_core::ExecCtx::Get()->Flush();
|
1014
994
|
gpr_tls_set(&g_current_thread_pollset, 0);
|
1015
995
|
gpr_tls_set(&g_current_thread_worker, 0);
|
1016
996
|
}
|
1017
|
-
end_worker(
|
997
|
+
end_worker(pollset, WORKER_PTR, worker_hdl);
|
1018
998
|
}
|
1019
999
|
#ifdef GRPC_EPOLLEX_CREATE_WORKERS_ON_HEAP
|
1020
1000
|
gpr_free(worker);
|
@@ -1024,7 +1004,7 @@ static grpc_error* pollset_work(grpc_exec_ctx* exec_ctx, grpc_pollset* pollset,
|
|
1024
1004
|
}
|
1025
1005
|
|
1026
1006
|
static grpc_error* pollset_transition_pollable_from_empty_to_fd_locked(
|
1027
|
-
|
1007
|
+
grpc_pollset* pollset, grpc_fd* fd) {
|
1028
1008
|
static const char* err_desc = "pollset_transition_pollable_from_empty_to_fd";
|
1029
1009
|
grpc_error* error = GRPC_ERROR_NONE;
|
1030
1010
|
if (grpc_polling_trace.enabled()) {
|
@@ -1032,7 +1012,7 @@ static grpc_error* pollset_transition_pollable_from_empty_to_fd_locked(
|
|
1032
1012
|
"PS:%p add fd %p (%d); transition pollable from empty to fd",
|
1033
1013
|
pollset, fd, fd->fd);
|
1034
1014
|
}
|
1035
|
-
append_error(&error, pollset_kick_all(
|
1015
|
+
append_error(&error, pollset_kick_all(pollset), err_desc);
|
1036
1016
|
POLLABLE_UNREF(pollset->active_pollable, "pollset");
|
1037
1017
|
append_error(&error, fd_get_or_become_pollable(fd, &pollset->active_pollable),
|
1038
1018
|
err_desc);
|
@@ -1040,7 +1020,7 @@ static grpc_error* pollset_transition_pollable_from_empty_to_fd_locked(
|
|
1040
1020
|
}
|
1041
1021
|
|
1042
1022
|
static grpc_error* pollset_transition_pollable_from_fd_to_multi_locked(
|
1043
|
-
|
1023
|
+
grpc_pollset* pollset, grpc_fd* and_add_fd) {
|
1044
1024
|
static const char* err_desc = "pollset_transition_pollable_from_fd_to_multi";
|
1045
1025
|
grpc_error* error = GRPC_ERROR_NONE;
|
1046
1026
|
if (grpc_polling_trace.enabled()) {
|
@@ -1050,7 +1030,7 @@ static grpc_error* pollset_transition_pollable_from_fd_to_multi_locked(
|
|
1050
1030
|
pollset, and_add_fd, and_add_fd ? and_add_fd->fd : -1,
|
1051
1031
|
pollset->active_pollable->owner_fd);
|
1052
1032
|
}
|
1053
|
-
append_error(&error, pollset_kick_all(
|
1033
|
+
append_error(&error, pollset_kick_all(pollset), err_desc);
|
1054
1034
|
grpc_fd* initial_fd = pollset->active_pollable->owner_fd;
|
1055
1035
|
POLLABLE_UNREF(pollset->active_pollable, "pollset");
|
1056
1036
|
pollset->active_pollable = nullptr;
|
@@ -1068,27 +1048,25 @@ static grpc_error* pollset_transition_pollable_from_fd_to_multi_locked(
|
|
1068
1048
|
}
|
1069
1049
|
|
1070
1050
|
/* expects pollsets locked, flag whether fd is locked or not */
|
1071
|
-
static grpc_error* pollset_add_fd_locked(
|
1072
|
-
grpc_pollset* pollset, grpc_fd* fd) {
|
1051
|
+
static grpc_error* pollset_add_fd_locked(grpc_pollset* pollset, grpc_fd* fd) {
|
1073
1052
|
grpc_error* error = GRPC_ERROR_NONE;
|
1074
1053
|
pollable* po_at_start =
|
1075
1054
|
POLLABLE_REF(pollset->active_pollable, "pollset_add_fd");
|
1076
1055
|
switch (pollset->active_pollable->type) {
|
1077
1056
|
case PO_EMPTY:
|
1078
1057
|
/* empty pollable --> single fd pollable */
|
1079
|
-
error = pollset_transition_pollable_from_empty_to_fd_locked(
|
1080
|
-
pollset, fd);
|
1058
|
+
error = pollset_transition_pollable_from_empty_to_fd_locked(pollset, fd);
|
1081
1059
|
break;
|
1082
1060
|
case PO_FD:
|
1083
1061
|
gpr_mu_lock(&po_at_start->owner_fd->orphan_mu);
|
1084
1062
|
if ((gpr_atm_no_barrier_load(&pollset->active_pollable->owner_fd->refst) &
|
1085
1063
|
1) == 0) {
|
1086
|
-
error =
|
1087
|
-
|
1064
|
+
error =
|
1065
|
+
pollset_transition_pollable_from_empty_to_fd_locked(pollset, fd);
|
1088
1066
|
} else {
|
1089
1067
|
/* fd --> multipoller */
|
1090
|
-
error =
|
1091
|
-
|
1068
|
+
error =
|
1069
|
+
pollset_transition_pollable_from_fd_to_multi_locked(pollset, fd);
|
1092
1070
|
}
|
1093
1071
|
gpr_mu_unlock(&po_at_start->owner_fd->orphan_mu);
|
1094
1072
|
break;
|
@@ -1105,8 +1083,7 @@ static grpc_error* pollset_add_fd_locked(grpc_exec_ctx* exec_ctx,
|
|
1105
1083
|
return error;
|
1106
1084
|
}
|
1107
1085
|
|
1108
|
-
static grpc_error* pollset_as_multipollable_locked(
|
1109
|
-
grpc_pollset* pollset,
|
1086
|
+
static grpc_error* pollset_as_multipollable_locked(grpc_pollset* pollset,
|
1110
1087
|
pollable** pollable_obj) {
|
1111
1088
|
grpc_error* error = GRPC_ERROR_NONE;
|
1112
1089
|
pollable* po_at_start =
|
@@ -1123,8 +1100,8 @@ static grpc_error* pollset_as_multipollable_locked(grpc_exec_ctx* exec_ctx,
|
|
1123
1100
|
POLLABLE_UNREF(pollset->active_pollable, "pollset");
|
1124
1101
|
error = pollable_create(PO_MULTI, &pollset->active_pollable);
|
1125
1102
|
} else {
|
1126
|
-
error = pollset_transition_pollable_from_fd_to_multi_locked(
|
1127
|
-
|
1103
|
+
error = pollset_transition_pollable_from_fd_to_multi_locked(pollset,
|
1104
|
+
nullptr);
|
1128
1105
|
}
|
1129
1106
|
gpr_mu_unlock(&po_at_start->owner_fd->orphan_mu);
|
1130
1107
|
break;
|
@@ -1142,10 +1119,9 @@ static grpc_error* pollset_as_multipollable_locked(grpc_exec_ctx* exec_ctx,
|
|
1142
1119
|
return error;
|
1143
1120
|
}
|
1144
1121
|
|
1145
|
-
static void pollset_add_fd(
|
1146
|
-
grpc_fd* fd) {
|
1122
|
+
static void pollset_add_fd(grpc_pollset* pollset, grpc_fd* fd) {
|
1147
1123
|
gpr_mu_lock(&pollset->mu);
|
1148
|
-
grpc_error* error = pollset_add_fd_locked(
|
1124
|
+
grpc_error* error = pollset_add_fd_locked(pollset, fd);
|
1149
1125
|
gpr_mu_unlock(&pollset->mu);
|
1150
1126
|
GRPC_LOG_IF_ERROR("pollset_add_fd", error);
|
1151
1127
|
}
|
@@ -1171,28 +1147,27 @@ static grpc_pollset_set* pollset_set_create(void) {
|
|
1171
1147
|
return pss;
|
1172
1148
|
}
|
1173
1149
|
|
1174
|
-
static void pollset_set_unref(
|
1150
|
+
static void pollset_set_unref(grpc_pollset_set* pss) {
|
1175
1151
|
if (pss == nullptr) return;
|
1176
1152
|
if (!gpr_unref(&pss->refs)) return;
|
1177
|
-
pollset_set_unref(
|
1153
|
+
pollset_set_unref(pss->parent);
|
1178
1154
|
gpr_mu_destroy(&pss->mu);
|
1179
1155
|
for (size_t i = 0; i < pss->pollset_count; i++) {
|
1180
1156
|
gpr_mu_lock(&pss->pollsets[i]->mu);
|
1181
1157
|
if (0 == --pss->pollsets[i]->containing_pollset_set_count) {
|
1182
|
-
pollset_maybe_finish_shutdown(
|
1158
|
+
pollset_maybe_finish_shutdown(pss->pollsets[i]);
|
1183
1159
|
}
|
1184
1160
|
gpr_mu_unlock(&pss->pollsets[i]->mu);
|
1185
1161
|
}
|
1186
1162
|
for (size_t i = 0; i < pss->fd_count; i++) {
|
1187
|
-
UNREF_BY(
|
1163
|
+
UNREF_BY(pss->fds[i], 2, "pollset_set");
|
1188
1164
|
}
|
1189
1165
|
gpr_free(pss->pollsets);
|
1190
1166
|
gpr_free(pss->fds);
|
1191
1167
|
gpr_free(pss);
|
1192
1168
|
}
|
1193
1169
|
|
1194
|
-
static void pollset_set_add_fd(
|
1195
|
-
grpc_fd* fd) {
|
1170
|
+
static void pollset_set_add_fd(grpc_pollset_set* pss, grpc_fd* fd) {
|
1196
1171
|
if (grpc_polling_trace.enabled()) {
|
1197
1172
|
gpr_log(GPR_DEBUG, "PSS:%p: add fd %p (%d)", pss, fd, fd->fd);
|
1198
1173
|
}
|
@@ -1215,8 +1190,7 @@ static void pollset_set_add_fd(grpc_exec_ctx* exec_ctx, grpc_pollset_set* pss,
|
|
1215
1190
|
GRPC_LOG_IF_ERROR(err_desc, error);
|
1216
1191
|
}
|
1217
1192
|
|
1218
|
-
static void pollset_set_del_fd(
|
1219
|
-
grpc_fd* fd) {
|
1193
|
+
static void pollset_set_del_fd(grpc_pollset_set* pss, grpc_fd* fd) {
|
1220
1194
|
if (grpc_polling_trace.enabled()) {
|
1221
1195
|
gpr_log(GPR_DEBUG, "PSS:%p: del fd %p", pss, fd);
|
1222
1196
|
}
|
@@ -1224,7 +1198,7 @@ static void pollset_set_del_fd(grpc_exec_ctx* exec_ctx, grpc_pollset_set* pss,
|
|
1224
1198
|
size_t i;
|
1225
1199
|
for (i = 0; i < pss->fd_count; i++) {
|
1226
1200
|
if (pss->fds[i] == fd) {
|
1227
|
-
UNREF_BY(
|
1201
|
+
UNREF_BY(fd, 2, "pollset_set");
|
1228
1202
|
break;
|
1229
1203
|
}
|
1230
1204
|
}
|
@@ -1236,8 +1210,7 @@ static void pollset_set_del_fd(grpc_exec_ctx* exec_ctx, grpc_pollset_set* pss,
|
|
1236
1210
|
gpr_mu_unlock(&pss->mu);
|
1237
1211
|
}
|
1238
1212
|
|
1239
|
-
static void pollset_set_del_pollset(
|
1240
|
-
grpc_pollset_set* pss, grpc_pollset* ps) {
|
1213
|
+
static void pollset_set_del_pollset(grpc_pollset_set* pss, grpc_pollset* ps) {
|
1241
1214
|
if (grpc_polling_trace.enabled()) {
|
1242
1215
|
gpr_log(GPR_DEBUG, "PSS:%p: del pollset %p", pss, ps);
|
1243
1216
|
}
|
@@ -1256,15 +1229,15 @@ static void pollset_set_del_pollset(grpc_exec_ctx* exec_ctx,
|
|
1256
1229
|
gpr_mu_unlock(&pss->mu);
|
1257
1230
|
gpr_mu_lock(&ps->mu);
|
1258
1231
|
if (0 == --ps->containing_pollset_set_count) {
|
1259
|
-
pollset_maybe_finish_shutdown(
|
1232
|
+
pollset_maybe_finish_shutdown(ps);
|
1260
1233
|
}
|
1261
1234
|
gpr_mu_unlock(&ps->mu);
|
1262
1235
|
}
|
1263
1236
|
|
1264
1237
|
// add all fds to pollables, and output a new array of unorphaned out_fds
|
1265
1238
|
// assumes pollsets are multipollable
|
1266
|
-
static grpc_error* add_fds_to_pollsets(
|
1267
|
-
|
1239
|
+
static grpc_error* add_fds_to_pollsets(grpc_fd** fds, size_t fd_count,
|
1240
|
+
grpc_pollset** pollsets,
|
1268
1241
|
size_t pollset_count,
|
1269
1242
|
const char* err_desc, grpc_fd** out_fds,
|
1270
1243
|
size_t* out_fd_count) {
|
@@ -1273,7 +1246,7 @@ static grpc_error* add_fds_to_pollsets(grpc_exec_ctx* exec_ctx, grpc_fd** fds,
|
|
1273
1246
|
gpr_mu_lock(&fds[i]->orphan_mu);
|
1274
1247
|
if ((gpr_atm_no_barrier_load(&fds[i]->refst) & 1) == 0) {
|
1275
1248
|
gpr_mu_unlock(&fds[i]->orphan_mu);
|
1276
|
-
UNREF_BY(
|
1249
|
+
UNREF_BY(fds[i], 2, "pollset_set");
|
1277
1250
|
} else {
|
1278
1251
|
for (size_t j = 0; j < pollset_count; j++) {
|
1279
1252
|
append_error(&error,
|
@@ -1287,8 +1260,7 @@ static grpc_error* add_fds_to_pollsets(grpc_exec_ctx* exec_ctx, grpc_fd** fds,
|
|
1287
1260
|
return error;
|
1288
1261
|
}
|
1289
1262
|
|
1290
|
-
static void pollset_set_add_pollset(
|
1291
|
-
grpc_pollset_set* pss, grpc_pollset* ps) {
|
1263
|
+
static void pollset_set_add_pollset(grpc_pollset_set* pss, grpc_pollset* ps) {
|
1292
1264
|
if (grpc_polling_trace.enabled()) {
|
1293
1265
|
gpr_log(GPR_DEBUG, "PSS:%p: add pollset %p", pss, ps);
|
1294
1266
|
}
|
@@ -1296,8 +1268,8 @@ static void pollset_set_add_pollset(grpc_exec_ctx* exec_ctx,
|
|
1296
1268
|
static const char* err_desc = "pollset_set_add_pollset";
|
1297
1269
|
pollable* pollable_obj = nullptr;
|
1298
1270
|
gpr_mu_lock(&ps->mu);
|
1299
|
-
if (!GRPC_LOG_IF_ERROR(err_desc,
|
1300
|
-
|
1271
|
+
if (!GRPC_LOG_IF_ERROR(err_desc,
|
1272
|
+
pollset_as_multipollable_locked(ps, &pollable_obj))) {
|
1301
1273
|
GPR_ASSERT(pollable_obj == nullptr);
|
1302
1274
|
gpr_mu_unlock(&ps->mu);
|
1303
1275
|
return;
|
@@ -1308,8 +1280,8 @@ static void pollset_set_add_pollset(grpc_exec_ctx* exec_ctx,
|
|
1308
1280
|
size_t initial_fd_count = pss->fd_count;
|
1309
1281
|
pss->fd_count = 0;
|
1310
1282
|
append_error(&error,
|
1311
|
-
add_fds_to_pollsets(
|
1312
|
-
|
1283
|
+
add_fds_to_pollsets(pss->fds, initial_fd_count, &ps, 1, err_desc,
|
1284
|
+
pss->fds, &pss->fd_count),
|
1313
1285
|
err_desc);
|
1314
1286
|
if (pss->pollset_count == pss->pollset_capacity) {
|
1315
1287
|
pss->pollset_capacity = GPR_MAX(pss->pollset_capacity * 2, 8);
|
@@ -1323,8 +1295,7 @@ static void pollset_set_add_pollset(grpc_exec_ctx* exec_ctx,
|
|
1323
1295
|
GRPC_LOG_IF_ERROR(err_desc, error);
|
1324
1296
|
}
|
1325
1297
|
|
1326
|
-
static void pollset_set_add_pollset_set(
|
1327
|
-
grpc_pollset_set* a,
|
1298
|
+
static void pollset_set_add_pollset_set(grpc_pollset_set* a,
|
1328
1299
|
grpc_pollset_set* b) {
|
1329
1300
|
if (grpc_polling_trace.enabled()) {
|
1330
1301
|
gpr_log(GPR_DEBUG, "PSS: merge (%p, %p)", a, b);
|
@@ -1373,13 +1344,13 @@ static void pollset_set_add_pollset_set(grpc_exec_ctx* exec_ctx,
|
|
1373
1344
|
a->fd_count = 0;
|
1374
1345
|
append_error(
|
1375
1346
|
&error,
|
1376
|
-
add_fds_to_pollsets(
|
1347
|
+
add_fds_to_pollsets(a->fds, initial_a_fd_count, b->pollsets,
|
1377
1348
|
b->pollset_count, "merge_a2b", a->fds, &a->fd_count),
|
1378
1349
|
err_desc);
|
1379
1350
|
append_error(
|
1380
1351
|
&error,
|
1381
|
-
add_fds_to_pollsets(
|
1382
|
-
|
1352
|
+
add_fds_to_pollsets(b->fds, b->fd_count, a->pollsets, a->pollset_count,
|
1353
|
+
"merge_b2a", a->fds, &a->fd_count),
|
1383
1354
|
err_desc);
|
1384
1355
|
if (a->pollset_capacity < a->pollset_count + b->pollset_count) {
|
1385
1356
|
a->pollset_capacity =
|
@@ -1401,8 +1372,7 @@ static void pollset_set_add_pollset_set(grpc_exec_ctx* exec_ctx,
|
|
1401
1372
|
gpr_mu_unlock(&b->mu);
|
1402
1373
|
}
|
1403
1374
|
|
1404
|
-
static void pollset_set_del_pollset_set(
|
1405
|
-
grpc_pollset_set* bag,
|
1375
|
+
static void pollset_set_del_pollset_set(grpc_pollset_set* bag,
|
1406
1376
|
grpc_pollset_set* item) {}
|
1407
1377
|
|
1408
1378
|
/*******************************************************************************
|
@@ -1472,15 +1442,15 @@ const grpc_event_engine_vtable* grpc_init_epollex_linux(
|
|
1472
1442
|
return &vtable;
|
1473
1443
|
}
|
1474
1444
|
|
1475
|
-
#else /* defined(
|
1445
|
+
#else /* defined(GRPC_LINUX_EPOLL_CREATE1) */
|
1476
1446
|
#if defined(GRPC_POSIX_SOCKET)
|
1477
1447
|
#include "src/core/lib/iomgr/ev_epollex_linux.h"
|
1478
|
-
/* If
|
1479
|
-
|
1448
|
+
/* If GRPC_LINUX_EPOLL_CREATE1 is not defined, it means
|
1449
|
+
epoll_create1 is not available. Return NULL */
|
1480
1450
|
const grpc_event_engine_vtable* grpc_init_epollex_linux(
|
1481
1451
|
bool explicitly_requested) {
|
1482
|
-
return
|
1452
|
+
return nullptr;
|
1483
1453
|
}
|
1484
1454
|
#endif /* defined(GRPC_POSIX_SOCKET) */
|
1485
1455
|
|
1486
|
-
#endif /* !defined(
|
1456
|
+
#endif /* !defined(GRPC_LINUX_EPOLL_CREATE1) */
|