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
@@ -21,13 +21,11 @@
|
|
21
21
|
|
22
22
|
#include <grpc/support/atm.h>
|
23
23
|
#include <grpc/support/cpu.h>
|
24
|
+
#include <grpc/support/log.h>
|
25
|
+
#include <grpc/support/tls.h>
|
24
26
|
|
25
27
|
#include "src/core/lib/iomgr/closure.h"
|
26
28
|
|
27
|
-
#ifdef __cplusplus
|
28
|
-
extern "C" {
|
29
|
-
#endif
|
30
|
-
|
31
29
|
typedef gpr_atm grpc_millis;
|
32
30
|
|
33
31
|
#define GRPC_MILLIS_INF_FUTURE GPR_ATM_MAX
|
@@ -45,6 +43,13 @@ typedef struct grpc_combiner grpc_combiner;
|
|
45
43
|
should be given to not delete said call/channel from this exec_ctx */
|
46
44
|
#define GRPC_EXEC_CTX_FLAG_THREAD_RESOURCE_LOOP 2
|
47
45
|
|
46
|
+
extern grpc_closure_scheduler* grpc_schedule_on_exec_ctx;
|
47
|
+
|
48
|
+
gpr_timespec grpc_millis_to_timespec(grpc_millis millis, gpr_clock_type clock);
|
49
|
+
grpc_millis grpc_timespec_to_millis_round_down(gpr_timespec timespec);
|
50
|
+
grpc_millis grpc_timespec_to_millis_round_up(gpr_timespec timespec);
|
51
|
+
|
52
|
+
namespace grpc_core {
|
48
53
|
/** Execution context.
|
49
54
|
* A bag of data that collects information along a callstack.
|
50
55
|
* Generally created at public API entry points, and passed down as
|
@@ -65,67 +70,129 @@ typedef struct grpc_combiner grpc_combiner;
|
|
65
70
|
* - Instances are always passed as the first argument to a function that
|
66
71
|
* takes it, and always as a pointer (grpc_exec_ctx is never copied).
|
67
72
|
*/
|
68
|
-
|
69
|
-
|
70
|
-
/**
|
71
|
-
|
72
|
-
|
73
|
-
|
74
|
-
|
75
|
-
|
76
|
-
void* check_ready_to_finish_arg;
|
77
|
-
bool (*check_ready_to_finish)(grpc_exec_ctx* exec_ctx, void* arg);
|
78
|
-
|
79
|
-
bool now_is_valid;
|
80
|
-
grpc_millis now;
|
81
|
-
};
|
73
|
+
class ExecCtx {
|
74
|
+
public:
|
75
|
+
/** Default Constructor */
|
76
|
+
|
77
|
+
ExecCtx() : flags_(GRPC_EXEC_CTX_FLAG_IS_FINISHED) { Set(this); }
|
78
|
+
|
79
|
+
/** Parameterised Constructor */
|
80
|
+
ExecCtx(uintptr_t fl) : flags_(fl) { Set(this); }
|
82
81
|
|
83
|
-
|
84
|
-
|
85
|
-
|
86
|
-
|
87
|
-
|
88
|
-
finish_check_arg, finish_check, false, 0 \
|
82
|
+
/** Destructor */
|
83
|
+
virtual ~ExecCtx() {
|
84
|
+
flags_ |= GRPC_EXEC_CTX_FLAG_IS_FINISHED;
|
85
|
+
Flush();
|
86
|
+
Set(last_exec_ctx_);
|
89
87
|
}
|
90
88
|
|
91
|
-
|
92
|
-
|
93
|
-
|
94
|
-
GRPC_EXEC_CTX_INITIALIZER(GRPC_EXEC_CTX_FLAG_IS_FINISHED, NULL, NULL)
|
89
|
+
/** Disallow copy and assignment operators */
|
90
|
+
ExecCtx(const ExecCtx&) = delete;
|
91
|
+
ExecCtx& operator=(const ExecCtx&) = delete;
|
95
92
|
|
96
|
-
|
93
|
+
/** Return starting_cpu */
|
94
|
+
unsigned starting_cpu() const { return starting_cpu_; }
|
97
95
|
|
98
|
-
|
99
|
-
|
100
|
-
|
101
|
-
|
102
|
-
|
103
|
-
|
104
|
-
|
105
|
-
|
106
|
-
|
107
|
-
|
108
|
-
|
109
|
-
|
110
|
-
|
111
|
-
/**
|
112
|
-
|
113
|
-
|
114
|
-
|
115
|
-
|
116
|
-
|
117
|
-
|
118
|
-
|
119
|
-
void grpc_exec_ctx_global_shutdown(void);
|
120
|
-
|
121
|
-
grpc_millis grpc_exec_ctx_now(grpc_exec_ctx* exec_ctx);
|
122
|
-
void grpc_exec_ctx_invalidate_now(grpc_exec_ctx* exec_ctx);
|
123
|
-
gpr_timespec grpc_millis_to_timespec(grpc_millis millis, gpr_clock_type clock);
|
124
|
-
grpc_millis grpc_timespec_to_millis_round_down(gpr_timespec timespec);
|
125
|
-
grpc_millis grpc_timespec_to_millis_round_up(gpr_timespec timespec);
|
96
|
+
struct CombinerData {
|
97
|
+
/* currently active combiner: updated only via combiner.c */
|
98
|
+
grpc_combiner* active_combiner;
|
99
|
+
/* last active combiner in the active combiner list */
|
100
|
+
grpc_combiner* last_combiner;
|
101
|
+
};
|
102
|
+
|
103
|
+
/** Only to be used by grpc-combiner code */
|
104
|
+
CombinerData* combiner_data() { return &combiner_data_; }
|
105
|
+
|
106
|
+
/** Return pointer to grpc_closure_list */
|
107
|
+
grpc_closure_list* closure_list() { return &closure_list_; }
|
108
|
+
|
109
|
+
/** Return flags */
|
110
|
+
uintptr_t flags() { return flags_; }
|
111
|
+
|
112
|
+
/** Checks if there is work to be done */
|
113
|
+
bool HasWork() {
|
114
|
+
return combiner_data_.active_combiner != nullptr ||
|
115
|
+
!grpc_closure_list_empty(closure_list_);
|
116
|
+
}
|
126
117
|
|
127
|
-
|
128
|
-
|
129
|
-
|
118
|
+
/** Flush any work that has been enqueued onto this grpc_exec_ctx.
|
119
|
+
* Caller must guarantee that no interfering locks are held.
|
120
|
+
* Returns true if work was performed, false otherwise. */
|
121
|
+
bool Flush();
|
122
|
+
|
123
|
+
/** Returns true if we'd like to leave this execution context as soon as
|
124
|
+
possible: useful for deciding whether to do something more or not depending
|
125
|
+
on outside context */
|
126
|
+
bool IsReadyToFinish() {
|
127
|
+
if ((flags_ & GRPC_EXEC_CTX_FLAG_IS_FINISHED) == 0) {
|
128
|
+
if (CheckReadyToFinish()) {
|
129
|
+
flags_ |= GRPC_EXEC_CTX_FLAG_IS_FINISHED;
|
130
|
+
return true;
|
131
|
+
}
|
132
|
+
return false;
|
133
|
+
} else {
|
134
|
+
return true;
|
135
|
+
}
|
136
|
+
}
|
137
|
+
|
138
|
+
/** Returns the stored current time relative to start if valid,
|
139
|
+
* otherwise refreshes the stored time, sets it valid and returns the new
|
140
|
+
* value */
|
141
|
+
grpc_millis Now();
|
142
|
+
|
143
|
+
/** Invalidates the stored time value. A new time value will be set on calling
|
144
|
+
* Now() */
|
145
|
+
void InvalidateNow() { now_is_valid_ = false; }
|
146
|
+
|
147
|
+
/** To be used only by shutdown code in iomgr */
|
148
|
+
void SetNowIomgrShutdown() {
|
149
|
+
now_ = GRPC_MILLIS_INF_FUTURE;
|
150
|
+
now_is_valid_ = true;
|
151
|
+
}
|
152
|
+
|
153
|
+
/** To be used only for testing.
|
154
|
+
* Sets the now value
|
155
|
+
*/
|
156
|
+
void TestOnlySetNow(grpc_millis new_val) {
|
157
|
+
now_ = new_val;
|
158
|
+
now_is_valid_ = true;
|
159
|
+
}
|
160
|
+
|
161
|
+
/** Global initialization for ExecCtx. Called by iomgr */
|
162
|
+
static void GlobalInit(void);
|
163
|
+
|
164
|
+
/** Global shutdown for ExecCtx. Called by iomgr */
|
165
|
+
static void GlobalShutdown(void) { gpr_tls_destroy(&exec_ctx_); }
|
166
|
+
|
167
|
+
/** Gets pointer to current exec_ctx */
|
168
|
+
static ExecCtx* Get() {
|
169
|
+
return reinterpret_cast<ExecCtx*>(gpr_tls_get(&exec_ctx_));
|
170
|
+
}
|
171
|
+
|
172
|
+
protected:
|
173
|
+
/** Check if ready to finish */
|
174
|
+
virtual bool CheckReadyToFinish() { return false; }
|
175
|
+
|
176
|
+
/** Disallow delete on ExecCtx */
|
177
|
+
static void operator delete(void* p) { abort(); }
|
178
|
+
|
179
|
+
private:
|
180
|
+
/** Set exec_ctx_ to exec_ctx */
|
181
|
+
void Set(ExecCtx* exec_ctx) {
|
182
|
+
gpr_tls_set(&exec_ctx_, reinterpret_cast<intptr_t>(exec_ctx));
|
183
|
+
}
|
184
|
+
|
185
|
+
grpc_closure_list closure_list_ = GRPC_CLOSURE_LIST_INIT;
|
186
|
+
CombinerData combiner_data_ = {nullptr, nullptr};
|
187
|
+
uintptr_t flags_;
|
188
|
+
unsigned starting_cpu_ = gpr_cpu_current_cpu();
|
189
|
+
|
190
|
+
bool now_is_valid_ = false;
|
191
|
+
grpc_millis now_ = 0;
|
192
|
+
|
193
|
+
GPR_TLS_CLASS_DECL(exec_ctx_);
|
194
|
+
ExecCtx* last_exec_ctx_ = Get();
|
195
|
+
};
|
196
|
+
} // namespace grpc_core
|
130
197
|
|
131
198
|
#endif /* GRPC_CORE_LIB_IOMGR_EXEC_CTX_H */
|
@@ -29,8 +29,8 @@
|
|
29
29
|
#include <grpc/support/useful.h>
|
30
30
|
|
31
31
|
#include "src/core/lib/debug/stats.h"
|
32
|
+
#include "src/core/lib/gpr/spinlock.h"
|
32
33
|
#include "src/core/lib/iomgr/exec_ctx.h"
|
33
|
-
#include "src/core/lib/support/spinlock.h"
|
34
34
|
|
35
35
|
#define MAX_DEPTH 2
|
36
36
|
|
@@ -55,7 +55,7 @@ grpc_core::TraceFlag executor_trace(false, "executor");
|
|
55
55
|
|
56
56
|
static void executor_thread(void* arg);
|
57
57
|
|
58
|
-
static size_t run_closures(
|
58
|
+
static size_t run_closures(grpc_closure_list list) {
|
59
59
|
size_t n = 0;
|
60
60
|
|
61
61
|
grpc_closure* c = list.head;
|
@@ -73,11 +73,11 @@ static size_t run_closures(grpc_exec_ctx* exec_ctx, grpc_closure_list list) {
|
|
73
73
|
#ifndef NDEBUG
|
74
74
|
c->scheduled = false;
|
75
75
|
#endif
|
76
|
-
c->cb(
|
76
|
+
c->cb(c->cb_arg, error);
|
77
77
|
GRPC_ERROR_UNREF(error);
|
78
78
|
c = next;
|
79
79
|
n++;
|
80
|
-
|
80
|
+
grpc_core::ExecCtx::Get()->Flush();
|
81
81
|
}
|
82
82
|
|
83
83
|
return n;
|
@@ -87,7 +87,7 @@ bool grpc_executor_is_threaded() {
|
|
87
87
|
return gpr_atm_no_barrier_load(&g_cur_threads) > 0;
|
88
88
|
}
|
89
89
|
|
90
|
-
void grpc_executor_set_threading(
|
90
|
+
void grpc_executor_set_threading(bool threading) {
|
91
91
|
gpr_atm cur_threads = gpr_atm_no_barrier_load(&g_cur_threads);
|
92
92
|
if (threading) {
|
93
93
|
if (cur_threads > 0) return;
|
@@ -104,8 +104,8 @@ void grpc_executor_set_threading(grpc_exec_ctx* exec_ctx, bool threading) {
|
|
104
104
|
|
105
105
|
gpr_thd_options opt = gpr_thd_options_default();
|
106
106
|
gpr_thd_options_set_joinable(&opt);
|
107
|
-
gpr_thd_new(&g_thread_state[0].id,
|
108
|
-
&opt);
|
107
|
+
gpr_thd_new(&g_thread_state[0].id, "grpc_executor", executor_thread,
|
108
|
+
&g_thread_state[0], &opt);
|
109
109
|
} else {
|
110
110
|
if (cur_threads == 0) return;
|
111
111
|
for (size_t i = 0; i < g_max_threads; i++) {
|
@@ -125,28 +125,25 @@ void grpc_executor_set_threading(grpc_exec_ctx* exec_ctx, bool threading) {
|
|
125
125
|
for (size_t i = 0; i < g_max_threads; i++) {
|
126
126
|
gpr_mu_destroy(&g_thread_state[i].mu);
|
127
127
|
gpr_cv_destroy(&g_thread_state[i].cv);
|
128
|
-
run_closures(
|
128
|
+
run_closures(g_thread_state[i].elems);
|
129
129
|
}
|
130
130
|
gpr_free(g_thread_state);
|
131
131
|
gpr_tls_destroy(&g_this_thread_state);
|
132
132
|
}
|
133
133
|
}
|
134
134
|
|
135
|
-
void grpc_executor_init(
|
135
|
+
void grpc_executor_init() {
|
136
136
|
gpr_atm_no_barrier_store(&g_cur_threads, 0);
|
137
|
-
grpc_executor_set_threading(
|
137
|
+
grpc_executor_set_threading(true);
|
138
138
|
}
|
139
139
|
|
140
|
-
void grpc_executor_shutdown(
|
141
|
-
grpc_executor_set_threading(exec_ctx, false);
|
142
|
-
}
|
140
|
+
void grpc_executor_shutdown() { grpc_executor_set_threading(false); }
|
143
141
|
|
144
142
|
static void executor_thread(void* arg) {
|
145
143
|
thread_state* ts = (thread_state*)arg;
|
146
144
|
gpr_tls_set(&g_this_thread_state, (intptr_t)ts);
|
147
145
|
|
148
|
-
|
149
|
-
GRPC_EXEC_CTX_INITIALIZER(0, grpc_never_ready_to_finish, nullptr);
|
146
|
+
grpc_core::ExecCtx exec_ctx(0);
|
150
147
|
|
151
148
|
size_t subtract_depth = 0;
|
152
149
|
for (;;) {
|
@@ -158,7 +155,7 @@ static void executor_thread(void* arg) {
|
|
158
155
|
ts->depth -= subtract_depth;
|
159
156
|
while (grpc_closure_list_empty(ts->elems) && !ts->shutdown) {
|
160
157
|
ts->queued_long_job = false;
|
161
|
-
gpr_cv_wait(&ts->cv, &ts->mu, gpr_inf_future(
|
158
|
+
gpr_cv_wait(&ts->cv, &ts->mu, gpr_inf_future(GPR_CLOCK_MONOTONIC));
|
162
159
|
}
|
163
160
|
if (ts->shutdown) {
|
164
161
|
if (executor_trace.enabled()) {
|
@@ -168,7 +165,7 @@ static void executor_thread(void* arg) {
|
|
168
165
|
gpr_mu_unlock(&ts->mu);
|
169
166
|
break;
|
170
167
|
}
|
171
|
-
GRPC_STATS_INC_EXECUTOR_QUEUE_DRAINED(
|
168
|
+
GRPC_STATS_INC_EXECUTOR_QUEUE_DRAINED();
|
172
169
|
grpc_closure_list exec = ts->elems;
|
173
170
|
ts->elems = GRPC_CLOSURE_LIST_INIT;
|
174
171
|
gpr_mu_unlock(&ts->mu);
|
@@ -176,19 +173,18 @@ static void executor_thread(void* arg) {
|
|
176
173
|
gpr_log(GPR_DEBUG, "EXECUTOR[%d]: execute", (int)(ts - g_thread_state));
|
177
174
|
}
|
178
175
|
|
179
|
-
|
180
|
-
subtract_depth = run_closures(
|
176
|
+
grpc_core::ExecCtx::Get()->InvalidateNow();
|
177
|
+
subtract_depth = run_closures(exec);
|
181
178
|
}
|
182
|
-
grpc_exec_ctx_finish(&exec_ctx);
|
183
179
|
}
|
184
180
|
|
185
|
-
static void executor_push(
|
186
|
-
|
181
|
+
static void executor_push(grpc_closure* closure, grpc_error* error,
|
182
|
+
bool is_short) {
|
187
183
|
bool retry_push;
|
188
184
|
if (is_short) {
|
189
|
-
GRPC_STATS_INC_EXECUTOR_SCHEDULED_SHORT_ITEMS(
|
185
|
+
GRPC_STATS_INC_EXECUTOR_SCHEDULED_SHORT_ITEMS();
|
190
186
|
} else {
|
191
|
-
GRPC_STATS_INC_EXECUTOR_SCHEDULED_LONG_ITEMS(
|
187
|
+
GRPC_STATS_INC_EXECUTOR_SCHEDULED_LONG_ITEMS();
|
192
188
|
}
|
193
189
|
do {
|
194
190
|
retry_push = false;
|
@@ -202,14 +198,16 @@ static void executor_push(grpc_exec_ctx* exec_ctx, grpc_closure* closure,
|
|
202
198
|
gpr_log(GPR_DEBUG, "EXECUTOR: schedule %p inline", closure);
|
203
199
|
#endif
|
204
200
|
}
|
205
|
-
grpc_closure_list_append(
|
201
|
+
grpc_closure_list_append(grpc_core::ExecCtx::Get()->closure_list(),
|
202
|
+
closure, error);
|
206
203
|
return;
|
207
204
|
}
|
208
205
|
thread_state* ts = (thread_state*)gpr_tls_get(&g_this_thread_state);
|
209
206
|
if (ts == nullptr) {
|
210
|
-
ts = &g_thread_state[GPR_HASH_POINTER(
|
207
|
+
ts = &g_thread_state[GPR_HASH_POINTER(grpc_core::ExecCtx::Get(),
|
208
|
+
cur_thread_count)];
|
211
209
|
} else {
|
212
|
-
GRPC_STATS_INC_EXECUTOR_SCHEDULED_TO_SELF(
|
210
|
+
GRPC_STATS_INC_EXECUTOR_SCHEDULED_TO_SELF();
|
213
211
|
}
|
214
212
|
thread_state* orig_ts = ts;
|
215
213
|
|
@@ -244,8 +242,8 @@ static void executor_push(grpc_exec_ctx* exec_ctx, grpc_closure* closure,
|
|
244
242
|
}
|
245
243
|
continue;
|
246
244
|
}
|
247
|
-
if (grpc_closure_list_empty(ts->elems)) {
|
248
|
-
GRPC_STATS_INC_EXECUTOR_WAKEUP_INITIATED(
|
245
|
+
if (grpc_closure_list_empty(ts->elems) && !ts->shutdown) {
|
246
|
+
GRPC_STATS_INC_EXECUTOR_WAKEUP_INITIATED();
|
249
247
|
gpr_cv_signal(&ts->cv);
|
250
248
|
}
|
251
249
|
grpc_closure_list_append(&ts->elems, closure, error);
|
@@ -263,25 +261,23 @@ static void executor_push(grpc_exec_ctx* exec_ctx, grpc_closure* closure,
|
|
263
261
|
|
264
262
|
gpr_thd_options opt = gpr_thd_options_default();
|
265
263
|
gpr_thd_options_set_joinable(&opt);
|
266
|
-
gpr_thd_new(&g_thread_state[cur_thread_count].id,
|
267
|
-
&g_thread_state[cur_thread_count], &opt);
|
264
|
+
gpr_thd_new(&g_thread_state[cur_thread_count].id, "gpr_executor",
|
265
|
+
executor_thread, &g_thread_state[cur_thread_count], &opt);
|
268
266
|
}
|
269
267
|
gpr_spinlock_unlock(&g_adding_thread_lock);
|
270
268
|
}
|
271
269
|
if (retry_push) {
|
272
|
-
GRPC_STATS_INC_EXECUTOR_PUSH_RETRIES(
|
270
|
+
GRPC_STATS_INC_EXECUTOR_PUSH_RETRIES();
|
273
271
|
}
|
274
272
|
} while (retry_push);
|
275
273
|
}
|
276
274
|
|
277
|
-
static void executor_push_short(
|
278
|
-
|
279
|
-
executor_push(exec_ctx, closure, error, true);
|
275
|
+
static void executor_push_short(grpc_closure* closure, grpc_error* error) {
|
276
|
+
executor_push(closure, error, true);
|
280
277
|
}
|
281
278
|
|
282
|
-
static void executor_push_long(
|
283
|
-
|
284
|
-
executor_push(exec_ctx, closure, error, false);
|
279
|
+
static void executor_push_long(grpc_closure* closure, grpc_error* error) {
|
280
|
+
executor_push(closure, error, false);
|
285
281
|
}
|
286
282
|
|
287
283
|
static const grpc_closure_scheduler_vtable executor_vtable_short = {
|
@@ -21,10 +21,6 @@
|
|
21
21
|
|
22
22
|
#include "src/core/lib/iomgr/closure.h"
|
23
23
|
|
24
|
-
#ifdef __cplusplus
|
25
|
-
extern "C" {
|
26
|
-
#endif
|
27
|
-
|
28
24
|
typedef enum {
|
29
25
|
GRPC_EXECUTOR_SHORT,
|
30
26
|
GRPC_EXECUTOR_LONG
|
@@ -35,22 +31,18 @@ typedef enum {
|
|
35
31
|
* This mechanism is meant to outsource work (grpc_closure instances) to a
|
36
32
|
* thread, for those cases where blocking isn't an option but there isn't a
|
37
33
|
* non-blocking solution available. */
|
38
|
-
void grpc_executor_init(
|
34
|
+
void grpc_executor_init();
|
39
35
|
|
40
36
|
grpc_closure_scheduler* grpc_executor_scheduler(grpc_executor_job_length);
|
41
37
|
|
42
38
|
/** Shutdown the executor, running all pending work as part of the call */
|
43
|
-
void grpc_executor_shutdown(
|
39
|
+
void grpc_executor_shutdown();
|
44
40
|
|
45
41
|
/** Is the executor multi-threaded? */
|
46
42
|
bool grpc_executor_is_threaded();
|
47
43
|
|
48
44
|
/* enable/disable threading - must be called after grpc_executor_init and before
|
49
45
|
grpc_executor_shutdown */
|
50
|
-
void grpc_executor_set_threading(
|
51
|
-
|
52
|
-
#ifdef __cplusplus
|
53
|
-
}
|
54
|
-
#endif
|
46
|
+
void grpc_executor_set_threading(bool enable);
|
55
47
|
|
56
48
|
#endif /* GRPC_CORE_LIB_IOMGR_EXECUTOR_H */
|
@@ -27,13 +27,13 @@
|
|
27
27
|
#include <grpc/support/thd.h>
|
28
28
|
#include <grpc/support/useful.h>
|
29
29
|
|
30
|
+
#include "src/core/lib/gpr/env.h"
|
31
|
+
#include "src/core/lib/gpr/fork.h"
|
32
|
+
#include "src/core/lib/gpr/thd_internal.h"
|
30
33
|
#include "src/core/lib/iomgr/ev_posix.h"
|
31
34
|
#include "src/core/lib/iomgr/executor.h"
|
32
35
|
#include "src/core/lib/iomgr/timer_manager.h"
|
33
36
|
#include "src/core/lib/iomgr/wakeup_fd_posix.h"
|
34
|
-
#include "src/core/lib/support/env.h"
|
35
|
-
#include "src/core/lib/support/fork.h"
|
36
|
-
#include "src/core/lib/support/thd_internal.h"
|
37
37
|
#include "src/core/lib/surface/init.h"
|
38
38
|
|
39
39
|
/*
|
@@ -49,10 +49,10 @@ void grpc_prefork() {
|
|
49
49
|
return;
|
50
50
|
}
|
51
51
|
if (grpc_is_initialized()) {
|
52
|
-
|
52
|
+
grpc_core::ExecCtx exec_ctx;
|
53
53
|
grpc_timer_manager_set_threading(false);
|
54
|
-
grpc_executor_set_threading(
|
55
|
-
|
54
|
+
grpc_executor_set_threading(false);
|
55
|
+
grpc_core::ExecCtx::Get()->Flush();
|
56
56
|
if (!gpr_await_threads(
|
57
57
|
gpr_time_add(gpr_now(GPR_CLOCK_REALTIME),
|
58
58
|
gpr_time_from_seconds(3, GPR_TIMESPAN)))) {
|
@@ -64,24 +64,25 @@ void grpc_prefork() {
|
|
64
64
|
void grpc_postfork_parent() {
|
65
65
|
if (grpc_is_initialized()) {
|
66
66
|
grpc_timer_manager_set_threading(true);
|
67
|
-
|
68
|
-
grpc_executor_set_threading(
|
69
|
-
grpc_exec_ctx_finish(&exec_ctx);
|
67
|
+
grpc_core::ExecCtx exec_ctx;
|
68
|
+
grpc_executor_set_threading(true);
|
70
69
|
}
|
71
70
|
}
|
72
71
|
|
73
72
|
void grpc_postfork_child() {
|
74
73
|
if (grpc_is_initialized()) {
|
75
74
|
grpc_timer_manager_set_threading(true);
|
76
|
-
|
77
|
-
grpc_executor_set_threading(
|
78
|
-
|
75
|
+
grpc_core::ExecCtx exec_ctx;
|
76
|
+
grpc_executor_set_threading(true);
|
77
|
+
grpc_core::ExecCtx::Get()->Flush();
|
79
78
|
}
|
80
79
|
}
|
81
80
|
|
82
81
|
void grpc_fork_handlers_auto_register() {
|
83
82
|
if (grpc_fork_support_enabled()) {
|
83
|
+
#ifdef GRPC_POSIX_FORK_ALLOW_PTHREAD_ATFORK
|
84
84
|
pthread_atfork(grpc_prefork, grpc_postfork_parent, grpc_postfork_child);
|
85
|
+
#endif // GRPC_POSIX_FORK_ALLOW_PTHREAD_ATFORK
|
85
86
|
}
|
86
87
|
}
|
87
88
|
|