grpc 1.7.3 → 1.8.0

Sign up to get free protection for your applications and to get access to all the features.

Potentially problematic release.


This version of grpc might be problematic. Click here for more details.

Files changed (616) hide show
  1. checksums.yaml +4 -4
  2. data/Makefile +2106 -2116
  3. data/include/grpc/census.h +1 -432
  4. data/include/grpc/compression.h +9 -9
  5. data/include/grpc/grpc.h +115 -98
  6. data/include/grpc/grpc_cronet.h +3 -3
  7. data/include/grpc/grpc_posix.h +4 -4
  8. data/include/grpc/grpc_security.h +160 -88
  9. data/include/grpc/grpc_security_constants.h +7 -0
  10. data/include/grpc/impl/codegen/atm.h +9 -1
  11. data/include/grpc/impl/codegen/atm_gcc_atomic.h +13 -4
  12. data/include/grpc/impl/codegen/atm_gcc_sync.h +6 -5
  13. data/include/grpc/impl/codegen/atm_windows.h +23 -22
  14. data/include/grpc/impl/codegen/byte_buffer.h +14 -14
  15. data/include/grpc/impl/codegen/byte_buffer_reader.h +2 -2
  16. data/include/grpc/impl/codegen/connectivity_state.h +0 -2
  17. data/include/grpc/impl/codegen/grpc_types.h +32 -28
  18. data/include/grpc/impl/codegen/port_platform.h +48 -0
  19. data/include/grpc/impl/codegen/slice.h +10 -10
  20. data/include/grpc/impl/codegen/sync_generic.h +9 -3
  21. data/include/grpc/slice.h +16 -17
  22. data/include/grpc/slice_buffer.h +22 -22
  23. data/include/grpc/support/alloc.h +11 -11
  24. data/include/grpc/support/avl.h +28 -20
  25. data/include/grpc/support/cmdline.h +13 -13
  26. data/include/grpc/support/histogram.h +17 -17
  27. data/include/grpc/support/host_port.h +2 -2
  28. data/include/grpc/support/log.h +9 -9
  29. data/include/grpc/support/log_windows.h +1 -1
  30. data/include/grpc/support/string_util.h +2 -2
  31. data/include/grpc/support/subprocess.h +5 -5
  32. data/include/grpc/support/sync.h +43 -27
  33. data/include/grpc/support/thd.h +6 -6
  34. data/include/grpc/support/tls_gcc.h +1 -1
  35. data/include/grpc/support/tls_pthread.h +1 -1
  36. data/src/core/ext/census/{grpc_context.c → grpc_context.cc} +5 -8
  37. data/src/core/ext/filters/client_channel/backup_poller.cc +165 -0
  38. data/src/core/ext/{census/grpc_filter.h → filters/client_channel/backup_poller.h} +12 -7
  39. data/src/core/ext/filters/client_channel/{channel_connectivity.c → channel_connectivity.cc} +45 -42
  40. data/src/core/ext/filters/client_channel/{client_channel.c → client_channel.cc} +452 -417
  41. data/src/core/ext/filters/client_channel/client_channel.h +16 -8
  42. data/src/core/ext/filters/client_channel/{client_channel_factory.c → client_channel_factory.cc} +0 -0
  43. data/src/core/ext/filters/client_channel/client_channel_factory.h +29 -21
  44. data/src/core/ext/filters/client_channel/{client_channel_plugin.c → client_channel_plugin.cc} +15 -19
  45. data/src/core/ext/filters/client_channel/{connector.c → connector.cc} +0 -0
  46. data/src/core/ext/filters/client_channel/connector.h +29 -21
  47. data/src/core/ext/filters/client_channel/{http_connect_handshaker.c → http_connect_handshaker.cc} +10 -10
  48. data/src/core/ext/filters/client_channel/http_connect_handshaker.h +8 -0
  49. data/src/core/ext/filters/client_channel/{http_proxy.c → http_proxy.cc} +14 -14
  50. data/src/core/ext/filters/client_channel/http_proxy.h +8 -0
  51. data/src/core/ext/filters/client_channel/{lb_policy.c → lb_policy.cc} +47 -48
  52. data/src/core/ext/filters/client_channel/lb_policy.h +76 -70
  53. data/src/core/ext/filters/client_channel/lb_policy/grpclb/{client_load_reporting_filter.c → client_load_reporting_filter.cc} +28 -29
  54. data/src/core/ext/filters/client_channel/lb_policy/grpclb/client_load_reporting_filter.h +9 -1
  55. data/src/core/ext/filters/client_channel/lb_policy/grpclb/{grpclb.c → grpclb.cc} +554 -563
  56. data/src/core/ext/filters/client_channel/lb_policy/grpclb/grpclb.h +9 -1
  57. data/src/core/ext/filters/client_channel/lb_policy/grpclb/grpclb_channel.h +17 -9
  58. data/src/core/ext/filters/client_channel/lb_policy/grpclb/{grpclb_channel_secure.c → grpclb_channel_secure.cc} +17 -17
  59. data/src/core/ext/filters/client_channel/lb_policy/grpclb/{grpclb_client_stats.c → grpclb_client_stats.cc} +3 -3
  60. data/src/core/ext/filters/client_channel/lb_policy/grpclb/grpclb_client_stats.h +9 -1
  61. data/src/core/ext/filters/client_channel/lb_policy/grpclb/{load_balancer_api.c → load_balancer_api.cc} +64 -67
  62. data/src/core/ext/filters/client_channel/lb_policy/grpclb/load_balancer_api.h +20 -21
  63. data/src/core/ext/filters/client_channel/lb_policy/pick_first/pick_first.cc +599 -0
  64. data/src/core/ext/filters/client_channel/lb_policy/round_robin/round_robin.cc +695 -0
  65. data/src/core/ext/filters/client_channel/lb_policy/subchannel_list.cc +270 -0
  66. data/src/core/ext/filters/client_channel/lb_policy/subchannel_list.h +153 -0
  67. data/src/core/ext/filters/client_channel/{lb_policy_factory.c → lb_policy_factory.cc} +10 -10
  68. data/src/core/ext/filters/client_channel/lb_policy_factory.h +48 -40
  69. data/src/core/ext/filters/client_channel/{lb_policy_registry.c → lb_policy_registry.cc} +9 -9
  70. data/src/core/ext/filters/client_channel/lb_policy_registry.h +11 -3
  71. data/src/core/ext/filters/client_channel/{parse_address.c → parse_address.cc} +24 -24
  72. data/src/core/ext/filters/client_channel/parse_address.h +14 -6
  73. data/src/core/ext/filters/client_channel/{proxy_mapper.c → proxy_mapper.cc} +0 -0
  74. data/src/core/ext/filters/client_channel/proxy_mapper.h +8 -0
  75. data/src/core/ext/filters/client_channel/{proxy_mapper_registry.c → proxy_mapper_registry.cc} +0 -0
  76. data/src/core/ext/filters/client_channel/proxy_mapper_registry.h +8 -0
  77. data/src/core/ext/filters/client_channel/{resolver.c → resolver.cc} +21 -23
  78. data/src/core/ext/filters/client_channel/resolver.h +33 -27
  79. data/src/core/ext/filters/client_channel/resolver/dns/c_ares/{dns_resolver_ares.c → dns_resolver_ares.cc} +133 -133
  80. data/src/core/ext/filters/client_channel/resolver/dns/c_ares/grpc_ares_ev_driver.h +18 -9
  81. data/src/core/ext/filters/client_channel/resolver/dns/c_ares/{grpc_ares_ev_driver_posix.c → grpc_ares_ev_driver_posix.cc} +58 -56
  82. data/src/core/ext/filters/client_channel/resolver/dns/c_ares/{grpc_ares_wrapper.c → grpc_ares_wrapper.cc} +118 -115
  83. data/src/core/ext/filters/client_channel/resolver/dns/c_ares/grpc_ares_wrapper.h +23 -15
  84. data/src/core/ext/filters/client_channel/resolver/dns/c_ares/grpc_ares_wrapper_fallback.cc +60 -0
  85. data/src/core/ext/filters/client_channel/resolver/dns/native/{dns_resolver.c → dns_resolver.cc} +100 -94
  86. data/src/core/ext/filters/client_channel/resolver/fake/{fake_resolver.c → fake_resolver.cc} +14 -14
  87. data/src/core/ext/filters/client_channel/resolver/fake/fake_resolver.h +9 -1
  88. data/src/core/ext/filters/client_channel/resolver/sockaddr/{sockaddr_resolver.c → sockaddr_resolver.cc} +60 -60
  89. data/src/core/ext/filters/client_channel/{resolver_factory.c → resolver_factory.cc} +2 -2
  90. data/src/core/ext/filters/client_channel/resolver_factory.h +27 -19
  91. data/src/core/ext/filters/client_channel/{resolver_registry.c → resolver_registry.cc} +35 -35
  92. data/src/core/ext/filters/client_channel/resolver_registry.h +18 -10
  93. data/src/core/ext/filters/client_channel/{retry_throttle.c → retry_throttle.cc} +10 -10
  94. data/src/core/ext/filters/client_channel/retry_throttle.h +8 -0
  95. data/src/core/ext/filters/client_channel/{subchannel.c → subchannel.cc} +210 -213
  96. data/src/core/ext/filters/client_channel/subchannel.h +68 -60
  97. data/src/core/ext/filters/client_channel/{subchannel_index.c → subchannel_index.cc} +52 -52
  98. data/src/core/ext/filters/client_channel/subchannel_index.h +22 -14
  99. data/src/core/ext/filters/client_channel/{uri_parser.c → uri_parser.cc} +29 -27
  100. data/src/core/ext/filters/client_channel/uri_parser.h +18 -10
  101. data/src/core/ext/filters/deadline/{deadline_filter.c → deadline_filter.cc} +12 -15
  102. data/src/core/ext/filters/deadline/deadline_filter.h +11 -2
  103. data/src/core/ext/filters/http/client/{http_client_filter.c → http_client_filter.cc} +83 -83
  104. data/src/core/ext/filters/http/client/http_client_filter.h +8 -0
  105. data/src/core/ext/filters/http/{http_filters_plugin.c → http_filters_plugin.cc} +20 -21
  106. data/src/core/ext/filters/http/message_compress/{message_compress_filter.c → message_compress_filter.cc} +84 -83
  107. data/src/core/ext/filters/http/message_compress/message_compress_filter.h +9 -1
  108. data/src/core/ext/filters/http/server/{http_server_filter.c → http_server_filter.cc} +80 -78
  109. data/src/core/ext/filters/http/server/http_server_filter.h +8 -0
  110. data/src/core/ext/filters/load_reporting/{server_load_reporting_filter.c → server_load_reporting_filter.cc} +29 -29
  111. data/src/core/ext/filters/load_reporting/server_load_reporting_filter.h +9 -1
  112. data/src/core/ext/filters/load_reporting/{server_load_reporting_plugin.c → server_load_reporting_plugin.cc} +11 -11
  113. data/src/core/ext/filters/load_reporting/server_load_reporting_plugin.h +13 -5
  114. data/src/core/ext/filters/max_age/{max_age_filter.c → max_age_filter.cc} +46 -56
  115. data/src/core/ext/filters/max_age/max_age_filter.h +8 -0
  116. data/src/core/ext/filters/message_size/{message_size_filter.c → message_size_filter.cc} +62 -40
  117. data/src/core/ext/filters/message_size/message_size_filter.h +8 -0
  118. data/src/core/ext/filters/workarounds/{workaround_cronet_compression_filter.c → workaround_cronet_compression_filter.cc} +11 -11
  119. data/src/core/ext/filters/workarounds/workaround_cronet_compression_filter.h +8 -0
  120. data/src/core/ext/filters/workarounds/{workaround_utils.c → workaround_utils.cc} +7 -7
  121. data/src/core/ext/filters/workarounds/workaround_utils.h +9 -1
  122. data/src/core/ext/transport/chttp2/alpn/{alpn.c → alpn.cc} +3 -3
  123. data/src/core/ext/transport/chttp2/alpn/alpn.h +10 -2
  124. data/src/core/ext/transport/chttp2/client/{chttp2_connector.c → chttp2_connector.cc} +49 -45
  125. data/src/core/ext/transport/chttp2/client/chttp2_connector.h +8 -0
  126. data/src/core/ext/transport/chttp2/client/insecure/{channel_create.c → channel_create.cc} +28 -27
  127. data/src/core/ext/transport/chttp2/client/insecure/{channel_create_posix.c → channel_create_posix.cc} +14 -13
  128. data/src/core/ext/transport/chttp2/client/secure/{secure_channel_create.c → secure_channel_create.cc} +68 -66
  129. data/src/core/ext/transport/chttp2/server/{chttp2_server.c → chttp2_server.cc} +76 -77
  130. data/src/core/ext/transport/chttp2/server/chttp2_server.h +11 -3
  131. data/src/core/ext/transport/chttp2/server/insecure/{server_chttp2.c → server_chttp2.cc} +3 -3
  132. data/src/core/ext/transport/chttp2/server/insecure/{server_chttp2_posix.c → server_chttp2_posix.cc} +13 -12
  133. data/src/core/ext/transport/chttp2/server/secure/{server_secure_chttp2.c → server_secure_chttp2.cc} +12 -10
  134. data/src/core/ext/transport/chttp2/transport/{bin_decoder.c → bin_decoder.cc} +7 -7
  135. data/src/core/ext/transport/chttp2/transport/bin_decoder.h +15 -7
  136. data/src/core/ext/transport/chttp2/transport/{bin_encoder.c → bin_encoder.cc} +11 -11
  137. data/src/core/ext/transport/chttp2/transport/bin_encoder.h +8 -0
  138. data/src/core/ext/transport/chttp2/transport/{chttp2_plugin.c → chttp2_plugin.cc} +2 -9
  139. data/src/core/ext/transport/chttp2/transport/{chttp2_transport.c → chttp2_transport.cc} +778 -778
  140. data/src/core/ext/transport/chttp2/transport/chttp2_transport.h +14 -10
  141. data/src/core/ext/transport/chttp2/transport/flow_control.cc +385 -0
  142. data/src/core/ext/transport/chttp2/transport/flow_control.h +337 -0
  143. data/src/core/ext/transport/chttp2/transport/frame.h +8 -0
  144. data/src/core/ext/transport/chttp2/transport/{frame_data.c → frame_data.cc} +34 -34
  145. data/src/core/ext/transport/chttp2/transport/frame_data.h +25 -17
  146. data/src/core/ext/transport/chttp2/transport/{frame_goaway.c → frame_goaway.cc} +18 -18
  147. data/src/core/ext/transport/chttp2/transport/frame_goaway.h +18 -10
  148. data/src/core/ext/transport/chttp2/transport/{frame_ping.c → frame_ping.cc} +18 -19
  149. data/src/core/ext/transport/chttp2/transport/frame_ping.h +12 -4
  150. data/src/core/ext/transport/chttp2/transport/{frame_rst_stream.c → frame_rst_stream.cc} +16 -16
  151. data/src/core/ext/transport/chttp2/transport/frame_rst_stream.h +16 -8
  152. data/src/core/ext/transport/chttp2/transport/{frame_settings.c → frame_settings.cc} +23 -24
  153. data/src/core/ext/transport/chttp2/transport/frame_settings.h +17 -9
  154. data/src/core/ext/transport/chttp2/transport/{frame_window_update.c → frame_window_update.cc} +22 -24
  155. data/src/core/ext/transport/chttp2/transport/frame_window_update.h +14 -6
  156. data/src/core/ext/transport/chttp2/transport/{hpack_encoder.c → hpack_encoder.cc} +206 -161
  157. data/src/core/ext/transport/chttp2/transport/hpack_encoder.h +23 -13
  158. data/src/core/ext/transport/chttp2/transport/{hpack_parser.c → hpack_parser.cc} +340 -334
  159. data/src/core/ext/transport/chttp2/transport/hpack_parser.h +30 -22
  160. data/src/core/ext/transport/chttp2/transport/{hpack_table.c → hpack_table.cc} +25 -25
  161. data/src/core/ext/transport/chttp2/transport/hpack_table.h +19 -11
  162. data/src/core/ext/transport/chttp2/transport/{http2_settings.c → http2_settings.cc} +1 -1
  163. data/src/core/ext/transport/chttp2/transport/http2_settings.h +10 -2
  164. data/src/core/ext/transport/chttp2/transport/{huffsyms.c → huffsyms.cc} +0 -0
  165. data/src/core/ext/transport/chttp2/transport/huffsyms.h +8 -0
  166. data/src/core/ext/transport/chttp2/transport/{incoming_metadata.c → incoming_metadata.cc} +14 -13
  167. data/src/core/ext/transport/chttp2/transport/incoming_metadata.h +18 -10
  168. data/src/core/ext/transport/chttp2/transport/internal.h +214 -340
  169. data/src/core/ext/transport/chttp2/transport/{parsing.c → parsing.cc} +152 -141
  170. data/src/core/ext/transport/chttp2/transport/{stream_lists.c → stream_lists.cc} +53 -53
  171. data/src/core/ext/transport/chttp2/transport/{stream_map.c → stream_map.cc} +35 -34
  172. data/src/core/ext/transport/chttp2/transport/stream_map.h +22 -14
  173. data/src/core/ext/transport/chttp2/transport/{varint.c → varint.cc} +0 -0
  174. data/src/core/ext/transport/chttp2/transport/varint.h +8 -0
  175. data/src/core/ext/transport/chttp2/transport/writing.cc +636 -0
  176. data/src/core/ext/transport/inproc/{inproc_plugin.c → inproc_plugin.cc} +5 -6
  177. data/src/core/ext/transport/inproc/{inproc_transport.c → inproc_transport.cc} +479 -544
  178. data/src/core/ext/transport/inproc/inproc_transport.h +4 -4
  179. data/src/core/lib/backoff/backoff.cc +80 -0
  180. data/src/core/lib/backoff/backoff.h +83 -0
  181. data/src/core/lib/channel/{channel_args.c → channel_args.cc} +92 -92
  182. data/src/core/lib/channel/channel_args.h +45 -37
  183. data/src/core/lib/channel/{channel_stack.c → channel_stack.cc} +67 -68
  184. data/src/core/lib/channel/channel_stack.h +76 -75
  185. data/src/core/lib/channel/{channel_stack_builder.c → channel_stack_builder.cc} +91 -91
  186. data/src/core/lib/channel/channel_stack_builder.h +45 -45
  187. data/src/core/lib/channel/{connected_channel.c → connected_channel.cc} +70 -70
  188. data/src/core/lib/channel/connected_channel.h +12 -4
  189. data/src/core/lib/channel/context.h +2 -2
  190. data/src/core/lib/channel/{handshaker.c → handshaker.cc} +7 -9
  191. data/src/core/lib/channel/handshaker.h +9 -1
  192. data/src/core/lib/channel/{handshaker_factory.c → handshaker_factory.cc} +7 -7
  193. data/src/core/lib/channel/handshaker_factory.h +18 -10
  194. data/src/core/lib/channel/{handshaker_registry.c → handshaker_registry.cc} +0 -0
  195. data/src/core/lib/channel/handshaker_registry.h +8 -0
  196. data/src/core/lib/compression/algorithm_metadata.h +8 -0
  197. data/src/core/lib/compression/{compression.c → compression.cc} +9 -9
  198. data/src/core/lib/compression/{message_compress.c → message_compress.cc} +0 -0
  199. data/src/core/lib/compression/message_compress.h +8 -0
  200. data/src/core/lib/compression/{stream_compression.c → stream_compression.cc} +12 -12
  201. data/src/core/lib/compression/stream_compression.h +27 -19
  202. data/src/core/lib/compression/{stream_compression_gzip.c → stream_compression_gzip.cc} +35 -36
  203. data/src/core/lib/compression/stream_compression_gzip.h +8 -0
  204. data/src/core/lib/compression/{stream_compression_identity.c → stream_compression_identity.cc} +19 -20
  205. data/src/core/lib/compression/stream_compression_identity.h +8 -0
  206. data/src/core/lib/debug/{stats.c → stats.cc} +19 -19
  207. data/src/core/lib/debug/stats.h +17 -9
  208. data/src/core/lib/debug/{stats_data.c → stats_data.cc} +45 -22
  209. data/src/core/lib/debug/stats_data.h +58 -19
  210. data/src/core/lib/debug/trace.cc +142 -0
  211. data/src/core/lib/debug/trace.h +74 -14
  212. data/src/core/lib/http/{format_request.c → format_request.cc} +10 -10
  213. data/src/core/lib/http/format_request.h +12 -4
  214. data/src/core/lib/http/{httpcli.c → httpcli.cc} +80 -80
  215. data/src/core/lib/http/httpcli.h +41 -33
  216. data/src/core/lib/http/{httpcli_security_connector.c → httpcli_security_connector.cc} +69 -55
  217. data/src/core/lib/http/{parser.c → parser.cc} +42 -42
  218. data/src/core/lib/http/parser.h +28 -20
  219. data/src/core/lib/{support → iomgr}/block_annotate.h +17 -8
  220. data/src/core/lib/iomgr/{call_combiner.c → call_combiner.cc} +29 -17
  221. data/src/core/lib/iomgr/call_combiner.h +9 -1
  222. data/src/core/lib/iomgr/closure.h +220 -62
  223. data/src/core/lib/iomgr/{combiner.c → combiner.cc} +63 -62
  224. data/src/core/lib/iomgr/combiner.h +16 -8
  225. data/src/core/lib/iomgr/{endpoint.c → endpoint.cc} +6 -0
  226. data/src/core/lib/iomgr/endpoint.h +47 -32
  227. data/src/core/lib/iomgr/endpoint_pair.h +12 -4
  228. data/src/core/lib/iomgr/{endpoint_pair_posix.c → endpoint_pair_posix.cc} +3 -3
  229. data/src/core/lib/iomgr/{endpoint_pair_uv.c → endpoint_pair_uv.cc} +2 -2
  230. data/src/core/lib/iomgr/{endpoint_pair_windows.c → endpoint_pair_windows.cc} +6 -6
  231. data/src/core/lib/iomgr/{error.c → error.cc} +125 -124
  232. data/src/core/lib/iomgr/error.h +32 -27
  233. data/src/core/lib/iomgr/error_internal.h +11 -2
  234. data/src/core/lib/iomgr/{ev_epoll1_linux.c → ev_epoll1_linux.cc} +214 -215
  235. data/src/core/lib/iomgr/ev_epoll1_linux.h +9 -1
  236. data/src/core/lib/iomgr/ev_epollex_linux.cc +1488 -0
  237. data/src/core/lib/iomgr/ev_epollex_linux.h +9 -1
  238. data/src/core/lib/iomgr/{ev_epollsig_linux.c → ev_epollsig_linux.cc} +304 -305
  239. data/src/core/lib/iomgr/ev_epollsig_linux.h +12 -4
  240. data/src/core/lib/iomgr/{ev_poll_posix.c → ev_poll_posix.cc} +272 -283
  241. data/src/core/lib/iomgr/ev_poll_posix.h +10 -2
  242. data/src/core/lib/iomgr/ev_posix.cc +288 -0
  243. data/src/core/lib/iomgr/ev_posix.h +75 -67
  244. data/src/core/lib/iomgr/{ev_windows.c → ev_windows.cc} +2 -2
  245. data/src/core/lib/iomgr/exec_ctx.cc +177 -0
  246. data/src/core/lib/iomgr/exec_ctx.h +35 -13
  247. data/src/core/lib/iomgr/{executor.c → executor.cc} +34 -35
  248. data/src/core/lib/iomgr/executor.h +12 -4
  249. data/src/core/lib/iomgr/{fork_posix.c → fork_posix.cc} +0 -0
  250. data/src/core/lib/iomgr/{fork_windows.c → fork_windows.cc} +0 -0
  251. data/src/core/lib/iomgr/gethostname.h +9 -1
  252. data/src/core/lib/iomgr/{gethostname_fallback.c → gethostname_fallback.cc} +2 -1
  253. data/src/core/lib/iomgr/{gethostname_host_name_max.c → gethostname_host_name_max.cc} +4 -3
  254. data/src/core/lib/iomgr/{gethostname_sysconf.c → gethostname_sysconf.cc} +3 -2
  255. data/src/core/lib/iomgr/{iocp_windows.c → iocp_windows.cc} +23 -25
  256. data/src/core/lib/iomgr/iocp_windows.h +17 -3
  257. data/src/core/lib/iomgr/{iomgr.c → iomgr.cc} +25 -19
  258. data/src/core/lib/iomgr/iomgr.h +11 -3
  259. data/src/core/lib/iomgr/iomgr_internal.h +13 -5
  260. data/src/core/lib/iomgr/{iomgr_posix.c → iomgr_posix.cc} +0 -1
  261. data/src/core/lib/iomgr/{iomgr_uv.c → iomgr_uv.cc} +1 -1
  262. data/src/core/lib/iomgr/iomgr_uv.h +8 -0
  263. data/src/core/lib/iomgr/{iomgr_windows.c → iomgr_windows.cc} +0 -0
  264. data/src/core/lib/iomgr/{is_epollexclusive_available.c → is_epollexclusive_available.cc} +1 -1
  265. data/src/core/lib/iomgr/is_epollexclusive_available.h +8 -0
  266. data/src/core/lib/iomgr/{load_file.c → load_file.cc} +12 -12
  267. data/src/core/lib/iomgr/load_file.h +2 -2
  268. data/src/core/lib/iomgr/{lockfree_event.c → lockfree_event.cc} +76 -68
  269. data/src/core/lib/iomgr/lockfree_event.h +30 -11
  270. data/src/core/lib/iomgr/{network_status_tracker.c → network_status_tracker.cc} +3 -2
  271. data/src/core/lib/iomgr/network_status_tracker.h +2 -2
  272. data/src/core/lib/iomgr/{polling_entity.c → polling_entity.cc} +18 -18
  273. data/src/core/lib/iomgr/polling_entity.h +21 -13
  274. data/src/core/lib/iomgr/pollset.h +17 -11
  275. data/src/core/lib/iomgr/pollset_set.h +23 -15
  276. data/src/core/lib/iomgr/{pollset_set_uv.c → pollset_set_uv.cc} +0 -0
  277. data/src/core/lib/iomgr/{pollset_set_windows.c → pollset_set_windows.cc} +0 -0
  278. data/src/core/lib/iomgr/{pollset_uv.c → pollset_uv.cc} +31 -29
  279. data/src/core/lib/iomgr/pollset_uv.h +8 -0
  280. data/src/core/lib/iomgr/{pollset_windows.c → pollset_windows.cc} +24 -24
  281. data/src/core/lib/iomgr/pollset_windows.h +17 -4
  282. data/src/core/lib/iomgr/port.h +10 -0
  283. data/src/core/lib/iomgr/resolve_address.h +18 -10
  284. data/src/core/lib/iomgr/{resolve_address_posix.c → resolve_address_posix.cc} +40 -40
  285. data/src/core/lib/iomgr/{resolve_address_uv.c → resolve_address_uv.cc} +61 -56
  286. data/src/core/lib/iomgr/{resolve_address_windows.c → resolve_address_windows.cc} +36 -34
  287. data/src/core/lib/iomgr/{resource_quota.c → resource_quota.cc} +209 -180
  288. data/src/core/lib/iomgr/resource_quota.h +45 -37
  289. data/src/core/lib/iomgr/{sockaddr_utils.c → sockaddr_utils.cc} +61 -61
  290. data/src/core/lib/iomgr/sockaddr_utils.h +23 -15
  291. data/src/core/lib/iomgr/sockaddr_windows.h +6 -0
  292. data/src/core/lib/iomgr/{socket_factory_posix.c → socket_factory_posix.cc} +20 -20
  293. data/src/core/lib/iomgr/socket_factory_posix.h +15 -15
  294. data/src/core/lib/iomgr/{socket_mutator.c → socket_mutator.cc} +18 -18
  295. data/src/core/lib/iomgr/socket_mutator.h +11 -11
  296. data/src/core/lib/iomgr/socket_utils.h +9 -1
  297. data/src/core/lib/iomgr/{socket_utils_common_posix.c → socket_utils_common_posix.cc} +28 -28
  298. data/src/core/lib/iomgr/{socket_utils_linux.c → socket_utils_linux.cc} +3 -3
  299. data/src/core/lib/iomgr/{socket_utils_posix.c → socket_utils_posix.cc} +3 -3
  300. data/src/core/lib/iomgr/socket_utils_posix.h +26 -18
  301. data/src/core/lib/iomgr/{socket_utils_uv.c → socket_utils_uv.cc} +1 -1
  302. data/src/core/lib/iomgr/{socket_utils_windows.c → socket_utils_windows.cc} +2 -2
  303. data/src/core/lib/iomgr/{socket_windows.c → socket_windows.cc} +18 -18
  304. data/src/core/lib/iomgr/socket_windows.h +26 -13
  305. data/src/core/lib/iomgr/tcp_client.h +14 -6
  306. data/src/core/lib/iomgr/{tcp_client_posix.c → tcp_client_posix.cc} +69 -70
  307. data/src/core/lib/iomgr/tcp_client_posix.h +11 -3
  308. data/src/core/lib/iomgr/{tcp_client_uv.c → tcp_client_uv.cc} +47 -48
  309. data/src/core/lib/iomgr/{tcp_client_windows.c → tcp_client_windows.cc} +46 -44
  310. data/src/core/lib/iomgr/{tcp_posix.c → tcp_posix.cc} +198 -175
  311. data/src/core/lib/iomgr/tcp_posix.h +15 -7
  312. data/src/core/lib/iomgr/tcp_server.h +31 -23
  313. data/src/core/lib/iomgr/{tcp_server_posix.c → tcp_server_posix.cc} +78 -77
  314. data/src/core/lib/iomgr/tcp_server_utils_posix.h +27 -19
  315. data/src/core/lib/iomgr/{tcp_server_utils_posix_common.c → tcp_server_utils_posix_common.cc} +27 -27
  316. data/src/core/lib/iomgr/{tcp_server_utils_posix_ifaddrs.c → tcp_server_utils_posix_ifaddrs.cc} +25 -25
  317. data/src/core/lib/iomgr/{tcp_server_utils_posix_noifaddrs.c → tcp_server_utils_posix_noifaddrs.cc} +2 -2
  318. data/src/core/lib/iomgr/{tcp_server_uv.c → tcp_server_uv.cc} +133 -105
  319. data/src/core/lib/iomgr/{tcp_server_windows.c → tcp_server_windows.cc} +81 -77
  320. data/src/core/lib/iomgr/tcp_uv.cc +420 -0
  321. data/src/core/lib/iomgr/tcp_uv.h +18 -4
  322. data/src/core/lib/iomgr/{tcp_windows.c → tcp_windows.cc} +90 -79
  323. data/src/core/lib/iomgr/tcp_windows.h +17 -4
  324. data/src/core/lib/iomgr/{time_averaged_stats.c → time_averaged_stats.cc} +0 -0
  325. data/src/core/lib/iomgr/time_averaged_stats.h +8 -0
  326. data/src/core/lib/iomgr/timer.h +16 -9
  327. data/src/core/lib/iomgr/{timer_generic.c → timer_generic.cc} +130 -171
  328. data/src/core/lib/iomgr/timer_generic.h +4 -4
  329. data/src/core/lib/iomgr/{timer_heap.c → timer_heap.cc} +20 -21
  330. data/src/core/lib/iomgr/timer_heap.h +16 -8
  331. data/src/core/lib/iomgr/{timer_manager.c → timer_manager.cc} +54 -52
  332. data/src/core/lib/iomgr/timer_manager.h +8 -0
  333. data/src/core/lib/iomgr/{timer_uv.c → timer_uv.cc} +22 -24
  334. data/src/core/lib/iomgr/timer_uv.h +2 -2
  335. data/src/core/lib/iomgr/{udp_server.c → udp_server.cc} +75 -75
  336. data/src/core/lib/iomgr/udp_server.h +25 -17
  337. data/src/core/lib/iomgr/{unix_sockets_posix.c → unix_sockets_posix.cc} +22 -21
  338. data/src/core/lib/iomgr/unix_sockets_posix.h +14 -6
  339. data/src/core/lib/iomgr/{unix_sockets_posix_noop.c → unix_sockets_posix_noop.cc} +5 -5
  340. data/src/core/lib/iomgr/{wakeup_fd_cv.c → wakeup_fd_cv.cc} +2 -2
  341. data/src/core/lib/iomgr/wakeup_fd_cv.h +10 -0
  342. data/src/core/lib/iomgr/{wakeup_fd_eventfd.c → wakeup_fd_eventfd.cc} +0 -0
  343. data/src/core/lib/iomgr/{wakeup_fd_nospecial.c → wakeup_fd_nospecial.cc} +0 -0
  344. data/src/core/lib/iomgr/{wakeup_fd_pipe.c → wakeup_fd_pipe.cc} +1 -0
  345. data/src/core/lib/iomgr/wakeup_fd_pipe.h +9 -1
  346. data/src/core/lib/iomgr/{wakeup_fd_posix.c → wakeup_fd_posix.cc} +6 -7
  347. data/src/core/lib/iomgr/wakeup_fd_posix.h +8 -0
  348. data/src/core/lib/json/{json.c → json.cc} +0 -0
  349. data/src/core/lib/json/json.h +8 -0
  350. data/src/core/lib/json/{json_reader.c → json_reader.cc} +18 -18
  351. data/src/core/lib/json/json_reader.h +26 -18
  352. data/src/core/lib/json/{json_string.c → json_string.cc} +57 -57
  353. data/src/core/lib/json/{json_writer.c → json_writer.cc} +20 -20
  354. data/src/core/lib/json/json_writer.h +23 -15
  355. data/src/core/lib/profiling/{basic_timers.c → basic_timers.cc} +34 -34
  356. data/src/core/lib/profiling/{stap_timers.c → stap_timers.cc} +5 -5
  357. data/src/core/lib/profiling/timers.h +6 -6
  358. data/src/core/lib/security/context/{security_context.c → security_context.cc} +98 -95
  359. data/src/core/lib/security/context/security_context.h +27 -29
  360. data/src/core/lib/security/credentials/composite/{composite_credentials.c → composite_credentials.cc} +79 -73
  361. data/src/core/lib/security/credentials/composite/composite_credentials.h +17 -9
  362. data/src/core/lib/security/credentials/{credentials.c → credentials.cc} +97 -92
  363. data/src/core/lib/security/credentials/credentials.h +83 -75
  364. data/src/core/lib/security/credentials/{credentials_metadata.c → credentials_metadata.cc} +7 -6
  365. data/src/core/lib/security/credentials/fake/{fake_credentials.c → fake_credentials.cc} +39 -36
  366. data/src/core/lib/security/credentials/fake/fake_credentials.h +13 -5
  367. data/src/core/lib/security/credentials/google_default/{credentials_generic.c → credentials_generic.cc} +5 -5
  368. data/src/core/lib/security/credentials/google_default/{google_default_credentials.c → google_default_credentials.cc} +55 -55
  369. data/src/core/lib/security/credentials/google_default/google_default_credentials.h +9 -1
  370. data/src/core/lib/security/credentials/iam/{iam_credentials.c → iam_credentials.cc} +19 -18
  371. data/src/core/lib/security/credentials/jwt/{json_token.c → json_token.cc} +80 -75
  372. data/src/core/lib/security/credentials/jwt/json_token.h +23 -15
  373. data/src/core/lib/security/credentials/jwt/{jwt_credentials.c → jwt_credentials.cc} +45 -41
  374. data/src/core/lib/security/credentials/jwt/jwt_credentials.h +11 -3
  375. data/src/core/lib/security/credentials/jwt/{jwt_verifier.c → jwt_verifier.cc} +262 -252
  376. data/src/core/lib/security/credentials/jwt/jwt_verifier.h +38 -30
  377. data/src/core/lib/security/credentials/oauth2/{oauth2_credentials.c → oauth2_credentials.cc} +138 -141
  378. data/src/core/lib/security/credentials/oauth2/oauth2_credentials.h +30 -22
  379. data/src/core/lib/security/credentials/plugin/{plugin_credentials.c → plugin_credentials.cc} +52 -53
  380. data/src/core/lib/security/credentials/plugin/plugin_credentials.h +7 -7
  381. data/src/core/lib/security/credentials/ssl/ssl_credentials.cc +344 -0
  382. data/src/core/lib/security/credentials/ssl/ssl_credentials.h +27 -0
  383. data/src/core/lib/security/transport/auth_filters.h +16 -0
  384. data/src/core/lib/security/transport/{client_auth_filter.c → client_auth_filter.cc} +127 -115
  385. data/src/core/lib/security/transport/{lb_targets_info.c → lb_targets_info.cc} +16 -13
  386. data/src/core/lib/security/transport/lb_targets_info.h +11 -3
  387. data/src/core/lib/security/transport/{secure_endpoint.c → secure_endpoint.cc} +84 -76
  388. data/src/core/lib/security/transport/secure_endpoint.h +13 -5
  389. data/src/core/lib/security/transport/security_connector.cc +1121 -0
  390. data/src/core/lib/security/transport/security_connector.h +97 -79
  391. data/src/core/lib/security/transport/{security_handshaker.c → security_handshaker.cc} +139 -132
  392. data/src/core/lib/security/transport/security_handshaker.h +11 -3
  393. data/src/core/lib/security/transport/{server_auth_filter.c → server_auth_filter.cc} +68 -68
  394. data/src/core/lib/security/transport/{tsi_error.c → tsi_error.cc} +1 -1
  395. data/src/core/lib/security/transport/tsi_error.h +9 -1
  396. data/src/core/lib/security/util/{json_util.c → json_util.cc} +11 -11
  397. data/src/core/lib/security/util/json_util.h +12 -4
  398. data/src/core/lib/slice/{b64.c → b64.cc} +15 -15
  399. data/src/core/lib/slice/b64.h +12 -4
  400. data/src/core/lib/slice/{percent_encoding.c → percent_encoding.cc} +15 -15
  401. data/src/core/lib/slice/percent_encoding.h +11 -3
  402. data/src/core/lib/slice/{slice.c → slice.cc} +64 -64
  403. data/src/core/lib/slice/{slice_buffer.c → slice_buffer.cc} +38 -38
  404. data/src/core/lib/slice/{slice_hash_table.c → slice_hash_table.cc} +7 -7
  405. data/src/core/lib/slice/slice_hash_table.h +19 -11
  406. data/src/core/lib/slice/{slice_intern.c → slice_intern.cc} +35 -34
  407. data/src/core/lib/slice/slice_internal.h +17 -6
  408. data/src/core/lib/slice/{slice_string_helpers.c → slice_string_helpers.cc} +9 -9
  409. data/src/core/lib/slice/slice_string_helpers.h +3 -3
  410. data/src/core/lib/support/abstract.h +29 -0
  411. data/src/core/lib/support/{alloc.c → alloc.cc} +22 -22
  412. data/src/core/lib/support/{arena.c → arena.cc} +12 -12
  413. data/src/core/lib/support/arena.h +11 -3
  414. data/src/core/lib/support/{atm.c → atm.cc} +1 -1
  415. data/src/core/lib/support/{avl.c → avl.cc} +71 -70
  416. data/src/core/lib/support/{cmdline.c → cmdline.cc} +62 -62
  417. data/src/core/lib/support/{cpu_iphone.c → cpu_iphone.cc} +2 -0
  418. data/src/core/lib/support/{cpu_linux.c → cpu_linux.cc} +10 -0
  419. data/src/core/lib/support/{cpu_posix.c → cpu_posix.cc} +27 -4
  420. data/src/core/lib/support/{cpu_windows.c → cpu_windows.cc} +1 -0
  421. data/src/core/lib/support/env.h +3 -3
  422. data/src/core/lib/support/{env_linux.c → env_linux.cc} +11 -11
  423. data/src/core/lib/support/{env_posix.c → env_posix.cc} +4 -4
  424. data/src/core/lib/support/{env_windows.c → env_windows.cc} +5 -5
  425. data/src/core/lib/support/{fork.c → fork.cc} +2 -2
  426. data/src/core/lib/support/{histogram.c → histogram.cc} +25 -26
  427. data/src/core/lib/support/{host_port.c → host_port.cc} +16 -16
  428. data/src/core/lib/support/{log.c → log.cc} +8 -8
  429. data/src/core/lib/support/{log_android.c → log_android.cc} +7 -7
  430. data/src/core/lib/support/{log_linux.c → log_linux.cc} +8 -8
  431. data/src/core/lib/support/{log_posix.c → log_posix.cc} +9 -10
  432. data/src/core/lib/support/{log_windows.c → log_windows.cc} +7 -7
  433. data/src/core/lib/support/manual_constructor.h +211 -0
  434. data/src/core/lib/support/memory.h +41 -0
  435. data/src/core/lib/support/mpscq.cc +114 -0
  436. data/src/core/lib/support/mpscq.h +45 -7
  437. data/src/core/lib/support/{murmur_hash.c → murmur_hash.cc} +9 -12
  438. data/src/core/lib/support/murmur_hash.h +9 -1
  439. data/src/core/lib/support/spinlock.h +8 -1
  440. data/src/core/lib/support/{string.c → string.cc} +56 -55
  441. data/src/core/lib/support/string.h +21 -21
  442. data/src/core/lib/support/{string_posix.c → string_posix.cc} +5 -4
  443. data/src/core/lib/support/{string_util_windows.c → string_util_windows.cc} +9 -6
  444. data/src/core/lib/support/{string_windows.c → string_windows.cc} +3 -2
  445. data/src/core/lib/support/string_windows.h +8 -0
  446. data/src/core/lib/support/{subprocess_posix.c → subprocess_posix.cc} +13 -13
  447. data/src/core/lib/support/{subprocess_windows.c → subprocess_windows.cc} +9 -9
  448. data/src/core/lib/support/{sync.c → sync.cc} +22 -22
  449. data/src/core/lib/support/{sync_posix.c → sync_posix.cc} +6 -2
  450. data/src/core/lib/support/{sync_windows.c → sync_windows.cc} +14 -14
  451. data/src/core/lib/support/{thd.c → thd.cc} +0 -0
  452. data/src/core/lib/support/{thd_posix.c → thd_posix.cc} +10 -10
  453. data/src/core/lib/support/{thd_windows.c → thd_windows.cc} +10 -10
  454. data/src/core/lib/support/{time.c → time.cc} +0 -0
  455. data/src/core/lib/support/{time_posix.c → time_posix.cc} +5 -6
  456. data/src/core/lib/support/{time_precise.c → time_precise.cc} +6 -4
  457. data/src/core/lib/support/time_precise.h +9 -1
  458. data/src/core/lib/support/{time_windows.c → time_windows.cc} +2 -3
  459. data/src/core/lib/support/{tls_pthread.c → tls_pthread.cc} +2 -2
  460. data/src/core/lib/support/tmpfile.h +1 -1
  461. data/src/core/lib/support/{tmpfile_msys.c → tmpfile_msys.cc} +2 -2
  462. data/src/core/lib/support/{tmpfile_posix.c → tmpfile_posix.cc} +7 -7
  463. data/src/core/lib/support/{tmpfile_windows.c → tmpfile_windows.cc} +2 -2
  464. data/src/core/lib/support/{wrap_memcpy.c → wrap_memcpy.cc} +4 -2
  465. data/src/core/lib/surface/{alarm.c → alarm.cc} +32 -31
  466. data/src/core/lib/surface/alarm_internal.h +10 -2
  467. data/src/core/lib/surface/{api_trace.c → api_trace.cc} +1 -1
  468. data/src/core/lib/surface/api_trace.h +2 -2
  469. data/src/core/lib/surface/{byte_buffer.c → byte_buffer.cc} +13 -13
  470. data/src/core/lib/surface/{byte_buffer_reader.c → byte_buffer_reader.cc} +9 -9
  471. data/src/core/lib/surface/{call.c → call.cc} +379 -372
  472. data/src/core/lib/surface/call.h +37 -38
  473. data/src/core/lib/surface/{call_details.c → call_details.cc} +0 -0
  474. data/src/core/lib/surface/{call_log_batch.c → call_log_batch.cc} +13 -11
  475. data/src/core/lib/surface/call_test_only.h +5 -5
  476. data/src/core/lib/surface/{channel.c → channel.cc} +94 -95
  477. data/src/core/lib/surface/channel.h +29 -21
  478. data/src/core/lib/surface/{channel_init.c → channel_init.cc} +13 -13
  479. data/src/core/lib/surface/channel_init.h +6 -6
  480. data/src/core/lib/surface/{channel_ping.c → channel_ping.cc} +12 -12
  481. data/src/core/lib/surface/{channel_stack_type.c → channel_stack_type.cc} +1 -1
  482. data/src/core/lib/surface/channel_stack_type.h +9 -1
  483. data/src/core/lib/surface/{completion_queue.c → completion_queue.cc} +416 -379
  484. data/src/core/lib/surface/completion_queue.h +29 -29
  485. data/src/core/lib/surface/{completion_queue_factory.c → completion_queue_factory.cc} +1 -1
  486. data/src/core/lib/surface/completion_queue_factory.h +8 -0
  487. data/src/core/lib/surface/{event_string.c → event_string.cc} +9 -9
  488. data/src/core/lib/surface/event_string.h +9 -1
  489. data/src/core/lib/surface/{init.c → init.cc} +16 -39
  490. data/src/core/lib/surface/init.h +8 -0
  491. data/src/core/lib/surface/{init_secure.c → init_secure.cc} +12 -25
  492. data/src/core/lib/surface/lame_client.cc +38 -40
  493. data/src/core/lib/surface/lame_client.h +8 -0
  494. data/src/core/lib/surface/{metadata_array.c → metadata_array.cc} +0 -0
  495. data/src/core/lib/surface/{server.c → server.cc} +340 -404
  496. data/src/core/lib/surface/server.h +22 -14
  497. data/src/core/lib/surface/{validate_metadata.c → validate_metadata.cc} +10 -9
  498. data/src/core/lib/surface/validate_metadata.h +10 -2
  499. data/src/core/lib/surface/{version.c → version.cc} +2 -2
  500. data/src/core/lib/transport/bdp_estimator.cc +84 -0
  501. data/src/core/lib/transport/bdp_estimator.h +67 -42
  502. data/src/core/lib/transport/{byte_stream.c → byte_stream.cc} +51 -51
  503. data/src/core/lib/transport/byte_stream.h +41 -33
  504. data/src/core/lib/transport/{connectivity_state.c → connectivity_state.cc} +36 -40
  505. data/src/core/lib/transport/connectivity_state.h +29 -21
  506. data/src/core/lib/transport/{error_utils.c → error_utils.cc} +26 -22
  507. data/src/core/lib/transport/error_utils.h +18 -6
  508. data/src/core/lib/transport/{metadata.c → metadata.cc} +92 -88
  509. data/src/core/lib/transport/metadata.h +22 -20
  510. data/src/core/lib/transport/{metadata_batch.c → metadata_batch.cc} +78 -79
  511. data/src/core/lib/transport/metadata_batch.h +46 -45
  512. data/src/core/lib/transport/pid_controller.cc +48 -0
  513. data/src/core/lib/transport/pid_controller.h +84 -32
  514. data/src/core/lib/transport/{service_config.c → service_config.cc} +66 -48
  515. data/src/core/lib/transport/service_config.h +11 -2
  516. data/src/core/lib/transport/{static_metadata.c → static_metadata.cc} +2 -2
  517. data/src/core/lib/transport/static_metadata.h +30 -23
  518. data/src/core/lib/transport/{status_conversion.c → status_conversion.cc} +4 -3
  519. data/src/core/lib/transport/status_conversion.h +12 -2
  520. data/src/core/lib/transport/{timeout_encoding.c → timeout_encoding.cc} +28 -61
  521. data/src/core/lib/transport/timeout_encoding.h +11 -2
  522. data/src/core/lib/transport/{transport.c → transport.cc} +79 -79
  523. data/src/core/lib/transport/transport.h +78 -80
  524. data/src/core/lib/transport/transport_impl.h +27 -19
  525. data/src/core/lib/transport/{transport_op_string.c → transport_op_string.cc} +32 -30
  526. data/src/core/plugin_registry/{grpc_plugin_registry.c → grpc_plugin_registry.cc} +34 -38
  527. data/src/core/tsi/{fake_transport_security.c → fake_transport_security.cc} +141 -132
  528. data/src/core/tsi/fake_transport_security.h +5 -5
  529. data/src/core/tsi/{gts_transport_security.c → gts_transport_security.cc} +4 -4
  530. data/src/core/tsi/gts_transport_security.h +11 -3
  531. data/src/core/tsi/{ssl_transport_security.c → ssl_transport_security.cc} +309 -300
  532. data/src/core/tsi/ssl_transport_security.h +25 -25
  533. data/src/core/tsi/ssl_types.h +8 -0
  534. data/src/core/tsi/{transport_security.c → transport_security.cc} +94 -87
  535. data/src/core/tsi/transport_security.h +55 -55
  536. data/src/core/tsi/{transport_security_adapter.c → transport_security_adapter.cc} +58 -55
  537. data/src/core/tsi/transport_security_adapter.h +2 -2
  538. data/src/core/tsi/{transport_security_grpc.c → transport_security_grpc.cc} +21 -21
  539. data/src/core/tsi/transport_security_grpc.h +19 -19
  540. data/src/core/tsi/transport_security_interface.h +41 -41
  541. data/src/ruby/ext/grpc/extconf.rb +4 -2
  542. data/src/ruby/ext/grpc/rb_byte_buffer.c +5 -5
  543. data/src/ruby/ext/grpc/rb_byte_buffer.h +2 -2
  544. data/src/ruby/ext/grpc/rb_call.c +41 -42
  545. data/src/ruby/ext/grpc/rb_call.h +6 -6
  546. data/src/ruby/ext/grpc/rb_call_credentials.c +30 -30
  547. data/src/ruby/ext/grpc/rb_channel.c +87 -87
  548. data/src/ruby/ext/grpc/rb_channel_credentials.c +23 -23
  549. data/src/ruby/ext/grpc/rb_completion_queue.c +11 -11
  550. data/src/ruby/ext/grpc/rb_completion_queue.h +3 -3
  551. data/src/ruby/ext/grpc/rb_compression_options.c +20 -20
  552. data/src/ruby/ext/grpc/rb_event_thread.c +14 -14
  553. data/src/ruby/ext/grpc/rb_event_thread.h +1 -1
  554. data/src/ruby/ext/grpc/rb_grpc.c +8 -8
  555. data/src/ruby/ext/grpc/rb_grpc_imports.generated.c +16 -58
  556. data/src/ruby/ext/grpc/rb_grpc_imports.generated.h +242 -306
  557. data/src/ruby/ext/grpc/rb_server.c +23 -23
  558. data/src/ruby/ext/grpc/rb_server_credentials.c +13 -13
  559. data/src/ruby/lib/grpc/generic/rpc_server.rb +25 -12
  560. data/src/ruby/lib/grpc/version.rb +1 -1
  561. data/src/ruby/pb/grpc/health/checker.rb +14 -0
  562. data/src/ruby/spec/pb/health/checker_spec.rb +29 -0
  563. data/third_party/cares/config_freebsd/ares_config.h +502 -0
  564. data/third_party/cares/config_openbsd/ares_config.h +502 -0
  565. metadata +302 -328
  566. data/src/core/ext/census/aggregation.h +0 -51
  567. data/src/core/ext/census/base_resources.c +0 -56
  568. data/src/core/ext/census/base_resources.h +0 -24
  569. data/src/core/ext/census/census_interface.h +0 -61
  570. data/src/core/ext/census/census_rpc_stats.h +0 -86
  571. data/src/core/ext/census/context.c +0 -496
  572. data/src/core/ext/census/gen/census.pb.c +0 -161
  573. data/src/core/ext/census/gen/census.pb.h +0 -280
  574. data/src/core/ext/census/gen/trace_context.pb.c +0 -39
  575. data/src/core/ext/census/gen/trace_context.pb.h +0 -78
  576. data/src/core/ext/census/grpc_filter.c +0 -196
  577. data/src/core/ext/census/grpc_plugin.c +0 -70
  578. data/src/core/ext/census/initialize.c +0 -51
  579. data/src/core/ext/census/intrusive_hash_map.c +0 -305
  580. data/src/core/ext/census/intrusive_hash_map.h +0 -152
  581. data/src/core/ext/census/intrusive_hash_map_internal.h +0 -48
  582. data/src/core/ext/census/mlog.c +0 -586
  583. data/src/core/ext/census/mlog.h +0 -80
  584. data/src/core/ext/census/operation.c +0 -48
  585. data/src/core/ext/census/placeholders.c +0 -49
  586. data/src/core/ext/census/resource.c +0 -303
  587. data/src/core/ext/census/resource.h +0 -48
  588. data/src/core/ext/census/rpc_metric_id.h +0 -36
  589. data/src/core/ext/census/trace_context.c +0 -71
  590. data/src/core/ext/census/trace_context.h +0 -56
  591. data/src/core/ext/census/trace_label.h +0 -46
  592. data/src/core/ext/census/trace_propagation.h +0 -48
  593. data/src/core/ext/census/trace_status.h +0 -30
  594. data/src/core/ext/census/trace_string.h +0 -35
  595. data/src/core/ext/census/tracing.c +0 -55
  596. data/src/core/ext/census/tracing.h +0 -109
  597. data/src/core/ext/filters/client_channel/lb_policy/pick_first/pick_first.c +0 -714
  598. data/src/core/ext/filters/client_channel/lb_policy/round_robin/round_robin.c +0 -924
  599. data/src/core/ext/filters/client_channel/resolver/dns/c_ares/grpc_ares_wrapper_fallback.c +0 -60
  600. data/src/core/ext/transport/chttp2/transport/flow_control.c +0 -502
  601. data/src/core/ext/transport/chttp2/transport/writing.c +0 -534
  602. data/src/core/lib/debug/trace.c +0 -146
  603. data/src/core/lib/iomgr/closure.c +0 -219
  604. data/src/core/lib/iomgr/ev_epollex_linux.c +0 -1461
  605. data/src/core/lib/iomgr/ev_posix.c +0 -266
  606. data/src/core/lib/iomgr/exec_ctx.c +0 -113
  607. data/src/core/lib/iomgr/tcp_uv.c +0 -381
  608. data/src/core/lib/security/credentials/ssl/ssl_credentials.c +0 -194
  609. data/src/core/lib/security/transport/security_connector.c +0 -914
  610. data/src/core/lib/support/backoff.c +0 -72
  611. data/src/core/lib/support/backoff.h +0 -56
  612. data/src/core/lib/support/mpscq.c +0 -79
  613. data/src/core/lib/support/stack_lockfree.c +0 -137
  614. data/src/core/lib/support/stack_lockfree.h +0 -38
  615. data/src/core/lib/transport/bdp_estimator.c +0 -110
  616. data/src/core/lib/transport/pid_controller.c +0 -63
@@ -23,8 +23,16 @@
23
23
  #include "src/core/lib/iomgr/ev_posix.h"
24
24
  #include "src/core/lib/iomgr/tcp_client.h"
25
25
 
26
- grpc_endpoint *grpc_tcp_client_create_from_fd(
27
- grpc_exec_ctx *exec_ctx, grpc_fd *fd, const grpc_channel_args *channel_args,
28
- const char *addr_str);
26
+ #ifdef __cplusplus
27
+ extern "C" {
28
+ #endif
29
+
30
+ grpc_endpoint* grpc_tcp_client_create_from_fd(
31
+ grpc_exec_ctx* exec_ctx, grpc_fd* fd, const grpc_channel_args* channel_args,
32
+ const char* addr_str);
33
+
34
+ #ifdef __cplusplus
35
+ }
36
+ #endif
29
37
 
30
38
  #endif /* GRPC_CORE_LIB_IOMGR_TCP_CLIENT_POSIX_H */
@@ -32,35 +32,35 @@
32
32
  #include "src/core/lib/iomgr/tcp_uv.h"
33
33
  #include "src/core/lib/iomgr/timer.h"
34
34
 
35
- extern grpc_tracer_flag grpc_tcp_trace;
35
+ extern grpc_core::TraceFlag grpc_tcp_trace;
36
36
 
37
37
  typedef struct grpc_uv_tcp_connect {
38
38
  uv_connect_t connect_req;
39
39
  grpc_timer alarm;
40
40
  grpc_closure on_alarm;
41
- uv_tcp_t *tcp_handle;
42
- grpc_closure *closure;
43
- grpc_endpoint **endpoint;
41
+ uv_tcp_t* tcp_handle;
42
+ grpc_closure* closure;
43
+ grpc_endpoint** endpoint;
44
44
  int refs;
45
- char *addr_name;
46
- grpc_resource_quota *resource_quota;
45
+ char* addr_name;
46
+ grpc_resource_quota* resource_quota;
47
47
  } grpc_uv_tcp_connect;
48
48
 
49
- static void uv_tcp_connect_cleanup(grpc_exec_ctx *exec_ctx,
50
- grpc_uv_tcp_connect *connect) {
49
+ static void uv_tcp_connect_cleanup(grpc_exec_ctx* exec_ctx,
50
+ grpc_uv_tcp_connect* connect) {
51
51
  grpc_resource_quota_unref_internal(exec_ctx, connect->resource_quota);
52
52
  gpr_free(connect->addr_name);
53
53
  gpr_free(connect);
54
54
  }
55
55
 
56
- static void tcp_close_callback(uv_handle_t *handle) { gpr_free(handle); }
56
+ static void tcp_close_callback(uv_handle_t* handle) { gpr_free(handle); }
57
57
 
58
- static void uv_tc_on_alarm(grpc_exec_ctx *exec_ctx, void *acp,
59
- grpc_error *error) {
58
+ static void uv_tc_on_alarm(grpc_exec_ctx* exec_ctx, void* acp,
59
+ grpc_error* error) {
60
60
  int done;
61
- grpc_uv_tcp_connect *connect = acp;
62
- if (GRPC_TRACER_ON(grpc_tcp_trace)) {
63
- const char *str = grpc_error_string(error);
61
+ grpc_uv_tcp_connect* connect = (grpc_uv_tcp_connect*)acp;
62
+ if (grpc_tcp_trace.enabled()) {
63
+ const char* str = grpc_error_string(error);
64
64
  gpr_log(GPR_DEBUG, "CLIENT_CONNECT: %s: on_alarm: error=%s",
65
65
  connect->addr_name, str);
66
66
  }
@@ -68,7 +68,7 @@ static void uv_tc_on_alarm(grpc_exec_ctx *exec_ctx, void *acp,
68
68
  /* error == NONE implies that the timer ran out, and wasn't cancelled. If
69
69
  it was cancelled, then the handler that cancelled it also should close
70
70
  the handle, if applicable */
71
- uv_close((uv_handle_t *)connect->tcp_handle, tcp_close_callback);
71
+ uv_close((uv_handle_t*)connect->tcp_handle, tcp_close_callback);
72
72
  }
73
73
  done = (--connect->refs == 0);
74
74
  if (done) {
@@ -76,12 +76,12 @@ static void uv_tc_on_alarm(grpc_exec_ctx *exec_ctx, void *acp,
76
76
  }
77
77
  }
78
78
 
79
- static void uv_tc_on_connect(uv_connect_t *req, int status) {
80
- grpc_uv_tcp_connect *connect = req->data;
79
+ static void uv_tc_on_connect(uv_connect_t* req, int status) {
80
+ grpc_uv_tcp_connect* connect = (grpc_uv_tcp_connect*)req->data;
81
81
  grpc_exec_ctx exec_ctx = GRPC_EXEC_CTX_INIT;
82
- grpc_error *error = GRPC_ERROR_NONE;
82
+ grpc_error* error = GRPC_ERROR_NONE;
83
83
  int done;
84
- grpc_closure *closure = connect->closure;
84
+ grpc_closure* closure = connect->closure;
85
85
  grpc_timer_cancel(&exec_ctx, &connect->alarm);
86
86
  if (status == 0) {
87
87
  *connect->endpoint = grpc_tcp_create(
@@ -102,7 +102,7 @@ static void uv_tc_on_connect(uv_connect_t *req, int status) {
102
102
  error = grpc_error_set_str(
103
103
  error, GRPC_ERROR_STR_OS_ERROR,
104
104
  grpc_slice_from_static_string(uv_strerror(status)));
105
- uv_close((uv_handle_t *)connect->tcp_handle, tcp_close_callback);
105
+ uv_close((uv_handle_t*)connect->tcp_handle, tcp_close_callback);
106
106
  }
107
107
  }
108
108
  done = (--connect->refs == 0);
@@ -114,14 +114,14 @@ static void uv_tc_on_connect(uv_connect_t *req, int status) {
114
114
  grpc_exec_ctx_finish(&exec_ctx);
115
115
  }
116
116
 
117
- static void tcp_client_connect_impl(grpc_exec_ctx *exec_ctx,
118
- grpc_closure *closure, grpc_endpoint **ep,
119
- grpc_pollset_set *interested_parties,
120
- const grpc_channel_args *channel_args,
121
- const grpc_resolved_address *resolved_addr,
122
- gpr_timespec deadline) {
123
- grpc_uv_tcp_connect *connect;
124
- grpc_resource_quota *resource_quota = grpc_resource_quota_create(NULL);
117
+ static void tcp_client_connect_impl(grpc_exec_ctx* exec_ctx,
118
+ grpc_closure* closure, grpc_endpoint** ep,
119
+ grpc_pollset_set* interested_parties,
120
+ const grpc_channel_args* channel_args,
121
+ const grpc_resolved_address* resolved_addr,
122
+ grpc_millis deadline) {
123
+ grpc_uv_tcp_connect* connect;
124
+ grpc_resource_quota* resource_quota = grpc_resource_quota_create(NULL);
125
125
  (void)channel_args;
126
126
  (void)interested_parties;
127
127
 
@@ -132,50 +132,49 @@ static void tcp_client_connect_impl(grpc_exec_ctx *exec_ctx,
132
132
  if (0 == strcmp(channel_args->args[i].key, GRPC_ARG_RESOURCE_QUOTA)) {
133
133
  grpc_resource_quota_unref_internal(exec_ctx, resource_quota);
134
134
  resource_quota = grpc_resource_quota_ref_internal(
135
- channel_args->args[i].value.pointer.p);
135
+ (grpc_resource_quota*)channel_args->args[i].value.pointer.p);
136
136
  }
137
137
  }
138
138
  }
139
139
 
140
- connect = gpr_zalloc(sizeof(grpc_uv_tcp_connect));
140
+ connect = (grpc_uv_tcp_connect*)gpr_zalloc(sizeof(grpc_uv_tcp_connect));
141
141
  connect->closure = closure;
142
142
  connect->endpoint = ep;
143
- connect->tcp_handle = gpr_malloc(sizeof(uv_tcp_t));
143
+ connect->tcp_handle = (uv_tcp_t*)gpr_malloc(sizeof(uv_tcp_t));
144
144
  connect->addr_name = grpc_sockaddr_to_uri(resolved_addr);
145
145
  connect->resource_quota = resource_quota;
146
146
  uv_tcp_init(uv_default_loop(), connect->tcp_handle);
147
147
  connect->connect_req.data = connect;
148
148
  connect->refs = 2; // One for the connect operation, one for the timer.
149
149
 
150
- if (GRPC_TRACER_ON(grpc_tcp_trace)) {
150
+ if (grpc_tcp_trace.enabled()) {
151
151
  gpr_log(GPR_DEBUG, "CLIENT_CONNECT: %s: asynchronously connecting",
152
152
  connect->addr_name);
153
153
  }
154
154
 
155
155
  // TODO(murgatroid99): figure out what the return value here means
156
156
  uv_tcp_connect(&connect->connect_req, connect->tcp_handle,
157
- (const struct sockaddr *)resolved_addr->addr,
158
- uv_tc_on_connect);
157
+ (const struct sockaddr*)resolved_addr->addr, uv_tc_on_connect);
159
158
  GRPC_CLOSURE_INIT(&connect->on_alarm, uv_tc_on_alarm, connect,
160
159
  grpc_schedule_on_exec_ctx);
161
- grpc_timer_init(exec_ctx, &connect->alarm,
162
- gpr_convert_clock_type(deadline, GPR_CLOCK_MONOTONIC),
163
- &connect->on_alarm, gpr_now(GPR_CLOCK_MONOTONIC));
160
+ grpc_timer_init(exec_ctx, &connect->alarm, deadline, &connect->on_alarm);
164
161
  }
165
162
 
166
163
  // overridden by api_fuzzer.c
164
+ extern "C" {
167
165
  void (*grpc_tcp_client_connect_impl)(
168
- grpc_exec_ctx *exec_ctx, grpc_closure *closure, grpc_endpoint **ep,
169
- grpc_pollset_set *interested_parties, const grpc_channel_args *channel_args,
170
- const grpc_resolved_address *addr,
171
- gpr_timespec deadline) = tcp_client_connect_impl;
172
-
173
- void grpc_tcp_client_connect(grpc_exec_ctx *exec_ctx, grpc_closure *closure,
174
- grpc_endpoint **ep,
175
- grpc_pollset_set *interested_parties,
176
- const grpc_channel_args *channel_args,
177
- const grpc_resolved_address *addr,
178
- gpr_timespec deadline) {
166
+ grpc_exec_ctx* exec_ctx, grpc_closure* closure, grpc_endpoint** ep,
167
+ grpc_pollset_set* interested_parties, const grpc_channel_args* channel_args,
168
+ const grpc_resolved_address* addr,
169
+ grpc_millis deadline) = tcp_client_connect_impl;
170
+ }
171
+
172
+ void grpc_tcp_client_connect(grpc_exec_ctx* exec_ctx, grpc_closure* closure,
173
+ grpc_endpoint** ep,
174
+ grpc_pollset_set* interested_parties,
175
+ const grpc_channel_args* channel_args,
176
+ const grpc_resolved_address* addr,
177
+ grpc_millis deadline) {
179
178
  grpc_tcp_client_connect_impl(exec_ctx, closure, ep, interested_parties,
180
179
  channel_args, addr, deadline);
181
180
  }
@@ -18,6 +18,8 @@
18
18
 
19
19
  #include "src/core/lib/iomgr/port.h"
20
20
 
21
+ #include <inttypes.h>
22
+
21
23
  #ifdef GRPC_WINSOCK_SOCKET
22
24
 
23
25
  #include "src/core/lib/iomgr/sockaddr_windows.h"
@@ -38,22 +40,21 @@
38
40
  #include "src/core/lib/iomgr/timer.h"
39
41
 
40
42
  typedef struct {
41
- grpc_closure *on_done;
43
+ grpc_closure* on_done;
42
44
  gpr_mu mu;
43
- grpc_winsocket *socket;
44
- gpr_timespec deadline;
45
+ grpc_winsocket* socket;
45
46
  grpc_timer alarm;
46
47
  grpc_closure on_alarm;
47
- char *addr_name;
48
+ char* addr_name;
48
49
  int refs;
49
50
  grpc_closure on_connect;
50
- grpc_endpoint **endpoint;
51
- grpc_channel_args *channel_args;
51
+ grpc_endpoint** endpoint;
52
+ grpc_channel_args* channel_args;
52
53
  } async_connect;
53
54
 
54
- static void async_connect_unlock_and_cleanup(grpc_exec_ctx *exec_ctx,
55
- async_connect *ac,
56
- grpc_winsocket *socket) {
55
+ static void async_connect_unlock_and_cleanup(grpc_exec_ctx* exec_ctx,
56
+ async_connect* ac,
57
+ grpc_winsocket* socket) {
57
58
  int done = (--ac->refs == 0);
58
59
  gpr_mu_unlock(&ac->mu);
59
60
  if (done) {
@@ -65,10 +66,10 @@ static void async_connect_unlock_and_cleanup(grpc_exec_ctx *exec_ctx,
65
66
  if (socket != NULL) grpc_winsocket_destroy(socket);
66
67
  }
67
68
 
68
- static void on_alarm(grpc_exec_ctx *exec_ctx, void *acp, grpc_error *error) {
69
- async_connect *ac = acp;
69
+ static void on_alarm(grpc_exec_ctx* exec_ctx, void* acp, grpc_error* error) {
70
+ async_connect* ac = (async_connect*)acp;
70
71
  gpr_mu_lock(&ac->mu);
71
- grpc_winsocket *socket = ac->socket;
72
+ grpc_winsocket* socket = ac->socket;
72
73
  ac->socket = NULL;
73
74
  if (socket != NULL) {
74
75
  grpc_winsocket_shutdown(socket);
@@ -76,16 +77,16 @@ static void on_alarm(grpc_exec_ctx *exec_ctx, void *acp, grpc_error *error) {
76
77
  async_connect_unlock_and_cleanup(exec_ctx, ac, socket);
77
78
  }
78
79
 
79
- static void on_connect(grpc_exec_ctx *exec_ctx, void *acp, grpc_error *error) {
80
- async_connect *ac = acp;
81
- grpc_endpoint **ep = ac->endpoint;
80
+ static void on_connect(grpc_exec_ctx* exec_ctx, void* acp, grpc_error* error) {
81
+ async_connect* ac = (async_connect*)acp;
82
+ grpc_endpoint** ep = ac->endpoint;
82
83
  GPR_ASSERT(*ep == NULL);
83
- grpc_closure *on_done = ac->on_done;
84
+ grpc_closure* on_done = ac->on_done;
84
85
 
85
86
  GRPC_ERROR_REF(error);
86
87
 
87
88
  gpr_mu_lock(&ac->mu);
88
- grpc_winsocket *socket = ac->socket;
89
+ grpc_winsocket* socket = ac->socket;
89
90
  ac->socket = NULL;
90
91
  gpr_mu_unlock(&ac->mu);
91
92
 
@@ -122,21 +123,21 @@ static void on_connect(grpc_exec_ctx *exec_ctx, void *acp, grpc_error *error) {
122
123
  /* Tries to issue one async connection, then schedules both an IOCP
123
124
  notification request for the connection, and one timeout alert. */
124
125
  static void tcp_client_connect_impl(
125
- grpc_exec_ctx *exec_ctx, grpc_closure *on_done, grpc_endpoint **endpoint,
126
- grpc_pollset_set *interested_parties, const grpc_channel_args *channel_args,
127
- const grpc_resolved_address *addr, gpr_timespec deadline) {
126
+ grpc_exec_ctx* exec_ctx, grpc_closure* on_done, grpc_endpoint** endpoint,
127
+ grpc_pollset_set* interested_parties, const grpc_channel_args* channel_args,
128
+ const grpc_resolved_address* addr, grpc_millis deadline) {
128
129
  SOCKET sock = INVALID_SOCKET;
129
130
  BOOL success;
130
131
  int status;
131
132
  grpc_resolved_address addr6_v4mapped;
132
133
  grpc_resolved_address local_address;
133
- async_connect *ac;
134
- grpc_winsocket *socket = NULL;
134
+ async_connect* ac;
135
+ grpc_winsocket* socket = NULL;
135
136
  LPFN_CONNECTEX ConnectEx;
136
137
  GUID guid = WSAID_CONNECTEX;
137
138
  DWORD ioctl_num_bytes;
138
- grpc_winsocket_callback_info *info;
139
- grpc_error *error = GRPC_ERROR_NONE;
139
+ grpc_winsocket_callback_info* info;
140
+ grpc_error* error = GRPC_ERROR_NONE;
140
141
 
141
142
  *endpoint = NULL;
142
143
 
@@ -171,8 +172,8 @@ static void tcp_client_connect_impl(
171
172
 
172
173
  grpc_sockaddr_make_wildcard6(0, &local_address);
173
174
 
174
- status = bind(sock, (struct sockaddr *)&local_address.addr,
175
- (int)local_address.len);
175
+ status =
176
+ bind(sock, (struct sockaddr*)&local_address.addr, (int)local_address.len);
176
177
  if (status != 0) {
177
178
  error = GRPC_WSA_ERROR(WSAGetLastError(), "bind");
178
179
  goto failure;
@@ -180,8 +181,8 @@ static void tcp_client_connect_impl(
180
181
 
181
182
  socket = grpc_winsocket_create(sock, "client");
182
183
  info = &socket->write_info;
183
- success = ConnectEx(sock, (struct sockaddr *)&addr->addr, (int)addr->len,
184
- NULL, 0, NULL, &info->overlapped);
184
+ success = ConnectEx(sock, (struct sockaddr*)&addr->addr, (int)addr->len, NULL,
185
+ 0, NULL, &info->overlapped);
185
186
 
186
187
  /* It wouldn't be unusual to get a success immediately. But we'll still get
187
188
  an IOCP notification, so let's ignore it. */
@@ -193,7 +194,7 @@ static void tcp_client_connect_impl(
193
194
  }
194
195
  }
195
196
 
196
- ac = gpr_malloc(sizeof(async_connect));
197
+ ac = (async_connect*)gpr_malloc(sizeof(async_connect));
197
198
  ac->on_done = on_done;
198
199
  ac->socket = socket;
199
200
  gpr_mu_init(&ac->mu);
@@ -204,15 +205,14 @@ static void tcp_client_connect_impl(
204
205
  GRPC_CLOSURE_INIT(&ac->on_connect, on_connect, ac, grpc_schedule_on_exec_ctx);
205
206
 
206
207
  GRPC_CLOSURE_INIT(&ac->on_alarm, on_alarm, ac, grpc_schedule_on_exec_ctx);
207
- grpc_timer_init(exec_ctx, &ac->alarm, deadline, &ac->on_alarm,
208
- gpr_now(GPR_CLOCK_MONOTONIC));
208
+ grpc_timer_init(exec_ctx, &ac->alarm, deadline, &ac->on_alarm);
209
209
  grpc_socket_notify_on_write(exec_ctx, socket, &ac->on_connect);
210
210
  return;
211
211
 
212
212
  failure:
213
213
  GPR_ASSERT(error != GRPC_ERROR_NONE);
214
- char *target_uri = grpc_sockaddr_to_uri(addr);
215
- grpc_error *final_error = grpc_error_set_str(
214
+ char* target_uri = grpc_sockaddr_to_uri(addr);
215
+ grpc_error* final_error = grpc_error_set_str(
216
216
  GRPC_ERROR_CREATE_REFERENCING_FROM_STATIC_STRING("Failed to connect",
217
217
  &error, 1),
218
218
  GRPC_ERROR_STR_TARGET_ADDRESS, grpc_slice_from_copied_string(target_uri));
@@ -226,18 +226,20 @@ failure:
226
226
  }
227
227
 
228
228
  // overridden by api_fuzzer.c
229
+ extern "C" {
229
230
  void (*grpc_tcp_client_connect_impl)(
230
- grpc_exec_ctx *exec_ctx, grpc_closure *closure, grpc_endpoint **ep,
231
- grpc_pollset_set *interested_parties, const grpc_channel_args *channel_args,
232
- const grpc_resolved_address *addr,
233
- gpr_timespec deadline) = tcp_client_connect_impl;
234
-
235
- void grpc_tcp_client_connect(grpc_exec_ctx *exec_ctx, grpc_closure *closure,
236
- grpc_endpoint **ep,
237
- grpc_pollset_set *interested_parties,
238
- const grpc_channel_args *channel_args,
239
- const grpc_resolved_address *addr,
240
- gpr_timespec deadline) {
231
+ grpc_exec_ctx* exec_ctx, grpc_closure* closure, grpc_endpoint** ep,
232
+ grpc_pollset_set* interested_parties, const grpc_channel_args* channel_args,
233
+ const grpc_resolved_address* addr,
234
+ grpc_millis deadline) = tcp_client_connect_impl;
235
+ }
236
+
237
+ void grpc_tcp_client_connect(grpc_exec_ctx* exec_ctx, grpc_closure* closure,
238
+ grpc_endpoint** ep,
239
+ grpc_pollset_set* interested_parties,
240
+ const grpc_channel_args* channel_args,
241
+ const grpc_resolved_address* addr,
242
+ grpc_millis deadline) {
241
243
  grpc_tcp_client_connect_impl(exec_ctx, closure, ep, interested_parties,
242
244
  channel_args, addr, deadline);
243
245
  }
@@ -61,11 +61,11 @@ typedef GRPC_MSG_IOVLEN_TYPE msg_iovlen_type;
61
61
  typedef size_t msg_iovlen_type;
62
62
  #endif
63
63
 
64
- grpc_tracer_flag grpc_tcp_trace = GRPC_TRACER_INITIALIZER(false, "tcp");
64
+ grpc_core::TraceFlag grpc_tcp_trace(false, "tcp");
65
65
 
66
66
  typedef struct {
67
67
  grpc_endpoint base;
68
- grpc_fd *em_fd;
68
+ grpc_fd* em_fd;
69
69
  int fd;
70
70
  bool finished_edge;
71
71
  double target_length;
@@ -79,69 +79,65 @@ typedef struct {
79
79
  /* garbage after the last read */
80
80
  grpc_slice_buffer last_read_buffer;
81
81
 
82
- grpc_slice_buffer *incoming_buffer;
83
- grpc_slice_buffer *outgoing_buffer;
84
- /** slice within outgoing_buffer to write next */
85
- size_t outgoing_slice_idx;
86
- /** byte within outgoing_buffer->slices[outgoing_slice_idx] to write next */
82
+ grpc_slice_buffer* incoming_buffer;
83
+ grpc_slice_buffer* outgoing_buffer;
84
+ /** byte within outgoing_buffer->slices[0] to write next */
87
85
  size_t outgoing_byte_idx;
88
86
 
89
- grpc_closure *read_cb;
90
- grpc_closure *write_cb;
91
- grpc_closure *release_fd_cb;
92
- int *release_fd;
87
+ grpc_closure* read_cb;
88
+ grpc_closure* write_cb;
89
+ grpc_closure* release_fd_cb;
90
+ int* release_fd;
93
91
 
94
92
  grpc_closure read_done_closure;
95
93
  grpc_closure write_done_closure;
96
94
 
97
- char *peer_string;
95
+ char* peer_string;
98
96
 
99
- grpc_resource_user *resource_user;
97
+ grpc_resource_user* resource_user;
100
98
  grpc_resource_user_slice_allocator slice_allocator;
101
99
  } grpc_tcp;
102
100
 
103
101
  typedef struct backup_poller {
104
- gpr_mu *pollset_mu;
102
+ gpr_mu* pollset_mu;
105
103
  grpc_closure run_poller;
106
104
  } backup_poller;
107
105
 
108
- #define BACKUP_POLLER_POLLSET(b) ((grpc_pollset *)((b) + 1))
106
+ #define BACKUP_POLLER_POLLSET(b) ((grpc_pollset*)((b) + 1))
109
107
 
110
108
  static gpr_atm g_uncovered_notifications_pending;
111
109
  static gpr_atm g_backup_poller; /* backup_poller* */
112
110
 
113
- static void tcp_handle_read(grpc_exec_ctx *exec_ctx, void *arg /* grpc_tcp */,
114
- grpc_error *error);
115
- static void tcp_handle_write(grpc_exec_ctx *exec_ctx, void *arg /* grpc_tcp */,
116
- grpc_error *error);
117
- static void tcp_drop_uncovered_then_handle_write(grpc_exec_ctx *exec_ctx,
118
- void *arg /* grpc_tcp */,
119
- grpc_error *error);
120
-
121
- static void done_poller(grpc_exec_ctx *exec_ctx, void *bp,
122
- grpc_error *error_ignored) {
123
- backup_poller *p = (backup_poller *)bp;
124
- if (GRPC_TRACER_ON(grpc_tcp_trace)) {
111
+ static void tcp_handle_read(grpc_exec_ctx* exec_ctx, void* arg /* grpc_tcp */,
112
+ grpc_error* error);
113
+ static void tcp_handle_write(grpc_exec_ctx* exec_ctx, void* arg /* grpc_tcp */,
114
+ grpc_error* error);
115
+ static void tcp_drop_uncovered_then_handle_write(grpc_exec_ctx* exec_ctx,
116
+ void* arg /* grpc_tcp */,
117
+ grpc_error* error);
118
+
119
+ static void done_poller(grpc_exec_ctx* exec_ctx, void* bp,
120
+ grpc_error* error_ignored) {
121
+ backup_poller* p = (backup_poller*)bp;
122
+ if (grpc_tcp_trace.enabled()) {
125
123
  gpr_log(GPR_DEBUG, "BACKUP_POLLER:%p destroy", p);
126
124
  }
127
125
  grpc_pollset_destroy(exec_ctx, BACKUP_POLLER_POLLSET(p));
128
126
  gpr_free(p);
129
127
  }
130
128
 
131
- static void run_poller(grpc_exec_ctx *exec_ctx, void *bp,
132
- grpc_error *error_ignored) {
133
- backup_poller *p = (backup_poller *)bp;
134
- if (GRPC_TRACER_ON(grpc_tcp_trace)) {
129
+ static void run_poller(grpc_exec_ctx* exec_ctx, void* bp,
130
+ grpc_error* error_ignored) {
131
+ backup_poller* p = (backup_poller*)bp;
132
+ if (grpc_tcp_trace.enabled()) {
135
133
  gpr_log(GPR_DEBUG, "BACKUP_POLLER:%p run", p);
136
134
  }
137
135
  gpr_mu_lock(p->pollset_mu);
138
- gpr_timespec now = gpr_now(GPR_CLOCK_MONOTONIC);
139
- gpr_timespec deadline =
140
- gpr_time_add(now, gpr_time_from_seconds(10, GPR_TIMESPAN));
136
+ grpc_millis deadline = grpc_exec_ctx_now(exec_ctx) + 13 * GPR_MS_PER_SEC;
141
137
  GRPC_STATS_INC_TCP_BACKUP_POLLER_POLLS(exec_ctx);
142
- GRPC_LOG_IF_ERROR("backup_poller:pollset_work",
143
- grpc_pollset_work(exec_ctx, BACKUP_POLLER_POLLSET(p), NULL,
144
- now, deadline));
138
+ GRPC_LOG_IF_ERROR(
139
+ "backup_poller:pollset_work",
140
+ grpc_pollset_work(exec_ctx, BACKUP_POLLER_POLLSET(p), nullptr, deadline));
145
141
  gpr_mu_unlock(p->pollset_mu);
146
142
  /* last "uncovered" notification is the ref that keeps us polling, if we get
147
143
  * there try a cas to release it */
@@ -149,47 +145,47 @@ static void run_poller(grpc_exec_ctx *exec_ctx, void *bp,
149
145
  gpr_atm_full_cas(&g_uncovered_notifications_pending, 1, 0)) {
150
146
  gpr_mu_lock(p->pollset_mu);
151
147
  bool cas_ok = gpr_atm_full_cas(&g_backup_poller, (gpr_atm)p, 0);
152
- if (GRPC_TRACER_ON(grpc_tcp_trace)) {
148
+ if (grpc_tcp_trace.enabled()) {
153
149
  gpr_log(GPR_DEBUG, "BACKUP_POLLER:%p done cas_ok=%d", p, cas_ok);
154
150
  }
155
151
  gpr_mu_unlock(p->pollset_mu);
156
- if (GRPC_TRACER_ON(grpc_tcp_trace)) {
152
+ if (grpc_tcp_trace.enabled()) {
157
153
  gpr_log(GPR_DEBUG, "BACKUP_POLLER:%p shutdown", p);
158
154
  }
159
155
  grpc_pollset_shutdown(exec_ctx, BACKUP_POLLER_POLLSET(p),
160
156
  GRPC_CLOSURE_INIT(&p->run_poller, done_poller, p,
161
157
  grpc_schedule_on_exec_ctx));
162
158
  } else {
163
- if (GRPC_TRACER_ON(grpc_tcp_trace)) {
159
+ if (grpc_tcp_trace.enabled()) {
164
160
  gpr_log(GPR_DEBUG, "BACKUP_POLLER:%p reschedule", p);
165
161
  }
166
162
  GRPC_CLOSURE_SCHED(exec_ctx, &p->run_poller, GRPC_ERROR_NONE);
167
163
  }
168
164
  }
169
165
 
170
- static void drop_uncovered(grpc_exec_ctx *exec_ctx, grpc_tcp *tcp) {
171
- backup_poller *p = (backup_poller *)gpr_atm_acq_load(&g_backup_poller);
166
+ static void drop_uncovered(grpc_exec_ctx* exec_ctx, grpc_tcp* tcp) {
167
+ backup_poller* p = (backup_poller*)gpr_atm_acq_load(&g_backup_poller);
172
168
  gpr_atm old_count =
173
169
  gpr_atm_no_barrier_fetch_add(&g_uncovered_notifications_pending, -1);
174
- if (GRPC_TRACER_ON(grpc_tcp_trace)) {
170
+ if (grpc_tcp_trace.enabled()) {
175
171
  gpr_log(GPR_DEBUG, "BACKUP_POLLER:%p uncover cnt %d->%d", p, (int)old_count,
176
172
  (int)old_count - 1);
177
173
  }
178
174
  GPR_ASSERT(old_count != 1);
179
175
  }
180
176
 
181
- static void cover_self(grpc_exec_ctx *exec_ctx, grpc_tcp *tcp) {
182
- backup_poller *p;
177
+ static void cover_self(grpc_exec_ctx* exec_ctx, grpc_tcp* tcp) {
178
+ backup_poller* p;
183
179
  gpr_atm old_count =
184
180
  gpr_atm_no_barrier_fetch_add(&g_uncovered_notifications_pending, 2);
185
- if (GRPC_TRACER_ON(grpc_tcp_trace)) {
181
+ if (grpc_tcp_trace.enabled()) {
186
182
  gpr_log(GPR_DEBUG, "BACKUP_POLLER: cover cnt %d->%d", (int)old_count,
187
183
  2 + (int)old_count);
188
184
  }
189
185
  if (old_count == 0) {
190
186
  GRPC_STATS_INC_TCP_BACKUP_POLLERS_CREATED(exec_ctx);
191
- p = (backup_poller *)gpr_malloc(sizeof(*p) + grpc_pollset_size());
192
- if (GRPC_TRACER_ON(grpc_tcp_trace)) {
187
+ p = (backup_poller*)gpr_zalloc(sizeof(*p) + grpc_pollset_size());
188
+ if (grpc_tcp_trace.enabled()) {
193
189
  gpr_log(GPR_DEBUG, "BACKUP_POLLER:%p create", p);
194
190
  }
195
191
  grpc_pollset_init(BACKUP_POLLER_POLLSET(p), &p->pollset_mu);
@@ -200,11 +196,12 @@ static void cover_self(grpc_exec_ctx *exec_ctx, grpc_tcp *tcp) {
200
196
  grpc_executor_scheduler(GRPC_EXECUTOR_LONG)),
201
197
  GRPC_ERROR_NONE);
202
198
  } else {
203
- while ((p = (backup_poller *)gpr_atm_acq_load(&g_backup_poller)) == NULL) {
199
+ while ((p = (backup_poller*)gpr_atm_acq_load(&g_backup_poller)) ==
200
+ nullptr) {
204
201
  // spin waiting for backup poller
205
202
  }
206
203
  }
207
- if (GRPC_TRACER_ON(grpc_tcp_trace)) {
204
+ if (grpc_tcp_trace.enabled()) {
208
205
  gpr_log(GPR_DEBUG, "BACKUP_POLLER:%p add %p", p, tcp);
209
206
  }
210
207
  grpc_pollset_add_fd(exec_ctx, BACKUP_POLLER_POLLSET(p), tcp->em_fd);
@@ -213,8 +210,8 @@ static void cover_self(grpc_exec_ctx *exec_ctx, grpc_tcp *tcp) {
213
210
  }
214
211
  }
215
212
 
216
- static void notify_on_read(grpc_exec_ctx *exec_ctx, grpc_tcp *tcp) {
217
- if (GRPC_TRACER_ON(grpc_tcp_trace)) {
213
+ static void notify_on_read(grpc_exec_ctx* exec_ctx, grpc_tcp* tcp) {
214
+ if (grpc_tcp_trace.enabled()) {
218
215
  gpr_log(GPR_DEBUG, "TCP:%p notify_on_read", tcp);
219
216
  }
220
217
  GRPC_CLOSURE_INIT(&tcp->read_done_closure, tcp_handle_read, tcp,
@@ -222,8 +219,8 @@ static void notify_on_read(grpc_exec_ctx *exec_ctx, grpc_tcp *tcp) {
222
219
  grpc_fd_notify_on_read(exec_ctx, tcp->em_fd, &tcp->read_done_closure);
223
220
  }
224
221
 
225
- static void notify_on_write(grpc_exec_ctx *exec_ctx, grpc_tcp *tcp) {
226
- if (GRPC_TRACER_ON(grpc_tcp_trace)) {
222
+ static void notify_on_write(grpc_exec_ctx* exec_ctx, grpc_tcp* tcp) {
223
+ if (grpc_tcp_trace.enabled()) {
227
224
  gpr_log(GPR_DEBUG, "TCP:%p notify_on_write", tcp);
228
225
  }
229
226
  cover_self(exec_ctx, tcp);
@@ -233,20 +230,20 @@ static void notify_on_write(grpc_exec_ctx *exec_ctx, grpc_tcp *tcp) {
233
230
  grpc_fd_notify_on_write(exec_ctx, tcp->em_fd, &tcp->write_done_closure);
234
231
  }
235
232
 
236
- static void tcp_drop_uncovered_then_handle_write(grpc_exec_ctx *exec_ctx,
237
- void *arg, grpc_error *error) {
238
- if (GRPC_TRACER_ON(grpc_tcp_trace)) {
233
+ static void tcp_drop_uncovered_then_handle_write(grpc_exec_ctx* exec_ctx,
234
+ void* arg, grpc_error* error) {
235
+ if (grpc_tcp_trace.enabled()) {
239
236
  gpr_log(GPR_DEBUG, "TCP:%p got_write: %s", arg, grpc_error_string(error));
240
237
  }
241
- drop_uncovered(exec_ctx, (grpc_tcp *)arg);
238
+ drop_uncovered(exec_ctx, (grpc_tcp*)arg);
242
239
  tcp_handle_write(exec_ctx, arg, error);
243
240
  }
244
241
 
245
- static void add_to_estimate(grpc_tcp *tcp, size_t bytes) {
242
+ static void add_to_estimate(grpc_tcp* tcp, size_t bytes) {
246
243
  tcp->bytes_read_this_round += (double)bytes;
247
244
  }
248
245
 
249
- static void finish_estimate(grpc_tcp *tcp) {
246
+ static void finish_estimate(grpc_tcp* tcp) {
250
247
  /* If we read >80% of the target buffer in one read loop, increase the size
251
248
  of the target buffer to either the amount read, or twice its previous
252
249
  value */
@@ -260,8 +257,8 @@ static void finish_estimate(grpc_tcp *tcp) {
260
257
  tcp->bytes_read_this_round = 0;
261
258
  }
262
259
 
263
- static size_t get_target_read_size(grpc_tcp *tcp) {
264
- grpc_resource_quota *rq = grpc_resource_user_quota(tcp->resource_user);
260
+ static size_t get_target_read_size(grpc_tcp* tcp) {
261
+ grpc_resource_quota* rq = grpc_resource_user_quota(tcp->resource_user);
265
262
  double pressure = grpc_resource_quota_get_memory_pressure(rq);
266
263
  double target =
267
264
  tcp->target_length * (pressure > 0.8 ? (1.0 - pressure) / 0.2 : 1.0);
@@ -278,26 +275,26 @@ static size_t get_target_read_size(grpc_tcp *tcp) {
278
275
  return sz;
279
276
  }
280
277
 
281
- static grpc_error *tcp_annotate_error(grpc_error *src_error, grpc_tcp *tcp) {
278
+ static grpc_error* tcp_annotate_error(grpc_error* src_error, grpc_tcp* tcp) {
282
279
  return grpc_error_set_str(
283
280
  grpc_error_set_int(src_error, GRPC_ERROR_INT_FD, tcp->fd),
284
281
  GRPC_ERROR_STR_TARGET_ADDRESS,
285
282
  grpc_slice_from_copied_string(tcp->peer_string));
286
283
  }
287
284
 
288
- static void tcp_handle_read(grpc_exec_ctx *exec_ctx, void *arg /* grpc_tcp */,
289
- grpc_error *error);
290
- static void tcp_handle_write(grpc_exec_ctx *exec_ctx, void *arg /* grpc_tcp */,
291
- grpc_error *error);
285
+ static void tcp_handle_read(grpc_exec_ctx* exec_ctx, void* arg /* grpc_tcp */,
286
+ grpc_error* error);
287
+ static void tcp_handle_write(grpc_exec_ctx* exec_ctx, void* arg /* grpc_tcp */,
288
+ grpc_error* error);
292
289
 
293
- static void tcp_shutdown(grpc_exec_ctx *exec_ctx, grpc_endpoint *ep,
294
- grpc_error *why) {
295
- grpc_tcp *tcp = (grpc_tcp *)ep;
290
+ static void tcp_shutdown(grpc_exec_ctx* exec_ctx, grpc_endpoint* ep,
291
+ grpc_error* why) {
292
+ grpc_tcp* tcp = (grpc_tcp*)ep;
296
293
  grpc_fd_shutdown(exec_ctx, tcp->em_fd, why);
297
294
  grpc_resource_user_shutdown(exec_ctx, tcp->resource_user);
298
295
  }
299
296
 
300
- static void tcp_free(grpc_exec_ctx *exec_ctx, grpc_tcp *tcp) {
297
+ static void tcp_free(grpc_exec_ctx* exec_ctx, grpc_tcp* tcp) {
301
298
  grpc_fd_orphan(exec_ctx, tcp->em_fd, tcp->release_fd_cb, tcp->release_fd,
302
299
  false /* already_closed */, "tcp_unref_orphan");
303
300
  grpc_slice_buffer_destroy_internal(exec_ctx, &tcp->last_read_buffer);
@@ -310,9 +307,9 @@ static void tcp_free(grpc_exec_ctx *exec_ctx, grpc_tcp *tcp) {
310
307
  #define TCP_UNREF(cl, tcp, reason) \
311
308
  tcp_unref((cl), (tcp), (reason), __FILE__, __LINE__)
312
309
  #define TCP_REF(tcp, reason) tcp_ref((tcp), (reason), __FILE__, __LINE__)
313
- static void tcp_unref(grpc_exec_ctx *exec_ctx, grpc_tcp *tcp,
314
- const char *reason, const char *file, int line) {
315
- if (GRPC_TRACER_ON(grpc_tcp_trace)) {
310
+ static void tcp_unref(grpc_exec_ctx* exec_ctx, grpc_tcp* tcp,
311
+ const char* reason, const char* file, int line) {
312
+ if (grpc_tcp_trace.enabled()) {
316
313
  gpr_atm val = gpr_atm_no_barrier_load(&tcp->refcount.count);
317
314
  gpr_log(file, line, GPR_LOG_SEVERITY_DEBUG,
318
315
  "TCP unref %p : %s %" PRIdPTR " -> %" PRIdPTR, tcp, reason, val,
@@ -323,9 +320,9 @@ static void tcp_unref(grpc_exec_ctx *exec_ctx, grpc_tcp *tcp,
323
320
  }
324
321
  }
325
322
 
326
- static void tcp_ref(grpc_tcp *tcp, const char *reason, const char *file,
323
+ static void tcp_ref(grpc_tcp* tcp, const char* reason, const char* file,
327
324
  int line) {
328
- if (GRPC_TRACER_ON(grpc_tcp_trace)) {
325
+ if (grpc_tcp_trace.enabled()) {
329
326
  gpr_atm val = gpr_atm_no_barrier_load(&tcp->refcount.count);
330
327
  gpr_log(file, line, GPR_LOG_SEVERITY_DEBUG,
331
328
  "TCP ref %p : %s %" PRIdPTR " -> %" PRIdPTR, tcp, reason, val,
@@ -336,47 +333,47 @@ static void tcp_ref(grpc_tcp *tcp, const char *reason, const char *file,
336
333
  #else
337
334
  #define TCP_UNREF(cl, tcp, reason) tcp_unref((cl), (tcp))
338
335
  #define TCP_REF(tcp, reason) tcp_ref((tcp))
339
- static void tcp_unref(grpc_exec_ctx *exec_ctx, grpc_tcp *tcp) {
336
+ static void tcp_unref(grpc_exec_ctx* exec_ctx, grpc_tcp* tcp) {
340
337
  if (gpr_unref(&tcp->refcount)) {
341
338
  tcp_free(exec_ctx, tcp);
342
339
  }
343
340
  }
344
341
 
345
- static void tcp_ref(grpc_tcp *tcp) { gpr_ref(&tcp->refcount); }
342
+ static void tcp_ref(grpc_tcp* tcp) { gpr_ref(&tcp->refcount); }
346
343
  #endif
347
344
 
348
- static void tcp_destroy(grpc_exec_ctx *exec_ctx, grpc_endpoint *ep) {
345
+ static void tcp_destroy(grpc_exec_ctx* exec_ctx, grpc_endpoint* ep) {
349
346
  grpc_network_status_unregister_endpoint(ep);
350
- grpc_tcp *tcp = (grpc_tcp *)ep;
347
+ grpc_tcp* tcp = (grpc_tcp*)ep;
351
348
  grpc_slice_buffer_reset_and_unref_internal(exec_ctx, &tcp->last_read_buffer);
352
349
  TCP_UNREF(exec_ctx, tcp, "destroy");
353
350
  }
354
351
 
355
- static void call_read_cb(grpc_exec_ctx *exec_ctx, grpc_tcp *tcp,
356
- grpc_error *error) {
357
- grpc_closure *cb = tcp->read_cb;
352
+ static void call_read_cb(grpc_exec_ctx* exec_ctx, grpc_tcp* tcp,
353
+ grpc_error* error) {
354
+ grpc_closure* cb = tcp->read_cb;
358
355
 
359
- if (GRPC_TRACER_ON(grpc_tcp_trace)) {
356
+ if (grpc_tcp_trace.enabled()) {
360
357
  gpr_log(GPR_DEBUG, "TCP:%p call_cb %p %p:%p", tcp, cb, cb->cb, cb->cb_arg);
361
358
  size_t i;
362
- const char *str = grpc_error_string(error);
359
+ const char* str = grpc_error_string(error);
363
360
  gpr_log(GPR_DEBUG, "read: error=%s", str);
364
361
 
365
362
  for (i = 0; i < tcp->incoming_buffer->count; i++) {
366
- char *dump = grpc_dump_slice(tcp->incoming_buffer->slices[i],
363
+ char* dump = grpc_dump_slice(tcp->incoming_buffer->slices[i],
367
364
  GPR_DUMP_HEX | GPR_DUMP_ASCII);
368
365
  gpr_log(GPR_DEBUG, "READ %p (peer=%s): %s", tcp, tcp->peer_string, dump);
369
366
  gpr_free(dump);
370
367
  }
371
368
  }
372
369
 
373
- tcp->read_cb = NULL;
374
- tcp->incoming_buffer = NULL;
370
+ tcp->read_cb = nullptr;
371
+ tcp->incoming_buffer = nullptr;
375
372
  GRPC_CLOSURE_RUN(exec_ctx, cb, error);
376
373
  }
377
374
 
378
375
  #define MAX_READ_IOVEC 4
379
- static void tcp_do_read(grpc_exec_ctx *exec_ctx, grpc_tcp *tcp) {
376
+ static void tcp_do_read(grpc_exec_ctx* exec_ctx, grpc_tcp* tcp) {
380
377
  struct msghdr msg;
381
378
  struct iovec iov[MAX_READ_IOVEC];
382
379
  ssize_t read_bytes;
@@ -391,11 +388,11 @@ static void tcp_do_read(grpc_exec_ctx *exec_ctx, grpc_tcp *tcp) {
391
388
  iov[i].iov_len = GRPC_SLICE_LENGTH(tcp->incoming_buffer->slices[i]);
392
389
  }
393
390
 
394
- msg.msg_name = NULL;
391
+ msg.msg_name = nullptr;
395
392
  msg.msg_namelen = 0;
396
393
  msg.msg_iov = iov;
397
394
  msg.msg_iovlen = (msg_iovlen_type)tcp->incoming_buffer->count;
398
- msg.msg_control = NULL;
395
+ msg.msg_control = nullptr;
399
396
  msg.msg_controllen = 0;
400
397
  msg.msg_flags = 0;
401
398
 
@@ -449,10 +446,10 @@ static void tcp_do_read(grpc_exec_ctx *exec_ctx, grpc_tcp *tcp) {
449
446
  GPR_TIMER_END("tcp_continue_read", 0);
450
447
  }
451
448
 
452
- static void tcp_read_allocation_done(grpc_exec_ctx *exec_ctx, void *tcpp,
453
- grpc_error *error) {
454
- grpc_tcp *tcp = (grpc_tcp *)tcpp;
455
- if (GRPC_TRACER_ON(grpc_tcp_trace)) {
449
+ static void tcp_read_allocation_done(grpc_exec_ctx* exec_ctx, void* tcpp,
450
+ grpc_error* error) {
451
+ grpc_tcp* tcp = (grpc_tcp*)tcpp;
452
+ if (grpc_tcp_trace.enabled()) {
456
453
  gpr_log(GPR_DEBUG, "TCP:%p read_allocation_done: %s", tcp,
457
454
  grpc_error_string(error));
458
455
  }
@@ -467,28 +464,28 @@ static void tcp_read_allocation_done(grpc_exec_ctx *exec_ctx, void *tcpp,
467
464
  }
468
465
  }
469
466
 
470
- static void tcp_continue_read(grpc_exec_ctx *exec_ctx, grpc_tcp *tcp) {
467
+ static void tcp_continue_read(grpc_exec_ctx* exec_ctx, grpc_tcp* tcp) {
471
468
  size_t target_read_size = get_target_read_size(tcp);
472
469
  if (tcp->incoming_buffer->length < target_read_size &&
473
470
  tcp->incoming_buffer->count < MAX_READ_IOVEC) {
474
- if (GRPC_TRACER_ON(grpc_tcp_trace)) {
471
+ if (grpc_tcp_trace.enabled()) {
475
472
  gpr_log(GPR_DEBUG, "TCP:%p alloc_slices", tcp);
476
473
  }
477
474
  grpc_resource_user_alloc_slices(exec_ctx, &tcp->slice_allocator,
478
475
  target_read_size, 1, tcp->incoming_buffer);
479
476
  } else {
480
- if (GRPC_TRACER_ON(grpc_tcp_trace)) {
477
+ if (grpc_tcp_trace.enabled()) {
481
478
  gpr_log(GPR_DEBUG, "TCP:%p do_read", tcp);
482
479
  }
483
480
  tcp_do_read(exec_ctx, tcp);
484
481
  }
485
482
  }
486
483
 
487
- static void tcp_handle_read(grpc_exec_ctx *exec_ctx, void *arg /* grpc_tcp */,
488
- grpc_error *error) {
489
- grpc_tcp *tcp = (grpc_tcp *)arg;
484
+ static void tcp_handle_read(grpc_exec_ctx* exec_ctx, void* arg /* grpc_tcp */,
485
+ grpc_error* error) {
486
+ grpc_tcp* tcp = (grpc_tcp*)arg;
490
487
  GPR_ASSERT(!tcp->finished_edge);
491
- if (GRPC_TRACER_ON(grpc_tcp_trace)) {
488
+ if (grpc_tcp_trace.enabled()) {
492
489
  gpr_log(GPR_DEBUG, "TCP:%p got_read: %s", tcp, grpc_error_string(error));
493
490
  }
494
491
 
@@ -503,10 +500,10 @@ static void tcp_handle_read(grpc_exec_ctx *exec_ctx, void *arg /* grpc_tcp */,
503
500
  }
504
501
  }
505
502
 
506
- static void tcp_read(grpc_exec_ctx *exec_ctx, grpc_endpoint *ep,
507
- grpc_slice_buffer *incoming_buffer, grpc_closure *cb) {
508
- grpc_tcp *tcp = (grpc_tcp *)ep;
509
- GPR_ASSERT(tcp->read_cb == NULL);
503
+ static void tcp_read(grpc_exec_ctx* exec_ctx, grpc_endpoint* ep,
504
+ grpc_slice_buffer* incoming_buffer, grpc_closure* cb) {
505
+ grpc_tcp* tcp = (grpc_tcp*)ep;
506
+ GPR_ASSERT(tcp->read_cb == nullptr);
510
507
  tcp->read_cb = cb;
511
508
  tcp->incoming_buffer = incoming_buffer;
512
509
  grpc_slice_buffer_reset_and_unref_internal(exec_ctx, incoming_buffer);
@@ -522,8 +519,8 @@ static void tcp_read(grpc_exec_ctx *exec_ctx, grpc_endpoint *ep,
522
519
 
523
520
  /* returns true if done, false if pending; if returning true, *error is set */
524
521
  #define MAX_WRITE_IOVEC 1000
525
- static bool tcp_flush(grpc_exec_ctx *exec_ctx, grpc_tcp *tcp,
526
- grpc_error **error) {
522
+ static bool tcp_flush(grpc_exec_ctx* exec_ctx, grpc_tcp* tcp,
523
+ grpc_error** error) {
527
524
  struct msghdr msg;
528
525
  struct iovec iov[MAX_WRITE_IOVEC];
529
526
  msg_iovlen_type iov_size;
@@ -533,32 +530,35 @@ static bool tcp_flush(grpc_exec_ctx *exec_ctx, grpc_tcp *tcp,
533
530
  size_t unwind_slice_idx;
534
531
  size_t unwind_byte_idx;
535
532
 
533
+ // We always start at zero, because we eagerly unref and trim the slice
534
+ // buffer as we write
535
+ size_t outgoing_slice_idx = 0;
536
+
536
537
  for (;;) {
537
538
  sending_length = 0;
538
- unwind_slice_idx = tcp->outgoing_slice_idx;
539
+ unwind_slice_idx = outgoing_slice_idx;
539
540
  unwind_byte_idx = tcp->outgoing_byte_idx;
540
- for (iov_size = 0; tcp->outgoing_slice_idx != tcp->outgoing_buffer->count &&
541
+ for (iov_size = 0; outgoing_slice_idx != tcp->outgoing_buffer->count &&
541
542
  iov_size != MAX_WRITE_IOVEC;
542
543
  iov_size++) {
543
544
  iov[iov_size].iov_base =
544
545
  GRPC_SLICE_START_PTR(
545
- tcp->outgoing_buffer->slices[tcp->outgoing_slice_idx]) +
546
+ tcp->outgoing_buffer->slices[outgoing_slice_idx]) +
546
547
  tcp->outgoing_byte_idx;
547
548
  iov[iov_size].iov_len =
548
- GRPC_SLICE_LENGTH(
549
- tcp->outgoing_buffer->slices[tcp->outgoing_slice_idx]) -
549
+ GRPC_SLICE_LENGTH(tcp->outgoing_buffer->slices[outgoing_slice_idx]) -
550
550
  tcp->outgoing_byte_idx;
551
551
  sending_length += iov[iov_size].iov_len;
552
- tcp->outgoing_slice_idx++;
552
+ outgoing_slice_idx++;
553
553
  tcp->outgoing_byte_idx = 0;
554
554
  }
555
555
  GPR_ASSERT(iov_size > 0);
556
556
 
557
- msg.msg_name = NULL;
557
+ msg.msg_name = nullptr;
558
558
  msg.msg_namelen = 0;
559
559
  msg.msg_iov = iov;
560
560
  msg.msg_iovlen = iov_size;
561
- msg.msg_control = NULL;
561
+ msg.msg_control = nullptr;
562
562
  msg.msg_controllen = 0;
563
563
  msg.msg_flags = 0;
564
564
 
@@ -575,16 +575,25 @@ static bool tcp_flush(grpc_exec_ctx *exec_ctx, grpc_tcp *tcp,
575
575
 
576
576
  if (sent_length < 0) {
577
577
  if (errno == EAGAIN) {
578
- tcp->outgoing_slice_idx = unwind_slice_idx;
579
578
  tcp->outgoing_byte_idx = unwind_byte_idx;
579
+ // unref all and forget about all slices that have been written to this
580
+ // point
581
+ for (size_t idx = 0; idx < unwind_slice_idx; ++idx) {
582
+ grpc_slice_unref_internal(
583
+ exec_ctx, grpc_slice_buffer_take_first(tcp->outgoing_buffer));
584
+ }
580
585
  return false;
581
586
  } else if (errno == EPIPE) {
582
587
  *error = grpc_error_set_int(GRPC_OS_ERROR(errno, "sendmsg"),
583
588
  GRPC_ERROR_INT_GRPC_STATUS,
584
589
  GRPC_STATUS_UNAVAILABLE);
590
+ grpc_slice_buffer_reset_and_unref_internal(exec_ctx,
591
+ tcp->outgoing_buffer);
585
592
  return true;
586
593
  } else {
587
594
  *error = tcp_annotate_error(GRPC_OS_ERROR(errno, "sendmsg"), tcp);
595
+ grpc_slice_buffer_reset_and_unref_internal(exec_ctx,
596
+ tcp->outgoing_buffer);
588
597
  return true;
589
598
  }
590
599
  }
@@ -594,9 +603,9 @@ static bool tcp_flush(grpc_exec_ctx *exec_ctx, grpc_tcp *tcp,
594
603
  while (trailing > 0) {
595
604
  size_t slice_length;
596
605
 
597
- tcp->outgoing_slice_idx--;
598
- slice_length = GRPC_SLICE_LENGTH(
599
- tcp->outgoing_buffer->slices[tcp->outgoing_slice_idx]);
606
+ outgoing_slice_idx--;
607
+ slice_length =
608
+ GRPC_SLICE_LENGTH(tcp->outgoing_buffer->slices[outgoing_slice_idx]);
600
609
  if (slice_length > trailing) {
601
610
  tcp->outgoing_byte_idx = slice_length - trailing;
602
611
  break;
@@ -605,36 +614,38 @@ static bool tcp_flush(grpc_exec_ctx *exec_ctx, grpc_tcp *tcp,
605
614
  }
606
615
  }
607
616
 
608
- if (tcp->outgoing_slice_idx == tcp->outgoing_buffer->count) {
617
+ if (outgoing_slice_idx == tcp->outgoing_buffer->count) {
609
618
  *error = GRPC_ERROR_NONE;
619
+ grpc_slice_buffer_reset_and_unref_internal(exec_ctx,
620
+ tcp->outgoing_buffer);
610
621
  return true;
611
622
  }
612
- };
623
+ }
613
624
  }
614
625
 
615
- static void tcp_handle_write(grpc_exec_ctx *exec_ctx, void *arg /* grpc_tcp */,
616
- grpc_error *error) {
617
- grpc_tcp *tcp = (grpc_tcp *)arg;
618
- grpc_closure *cb;
626
+ static void tcp_handle_write(grpc_exec_ctx* exec_ctx, void* arg /* grpc_tcp */,
627
+ grpc_error* error) {
628
+ grpc_tcp* tcp = (grpc_tcp*)arg;
629
+ grpc_closure* cb;
619
630
 
620
631
  if (error != GRPC_ERROR_NONE) {
621
632
  cb = tcp->write_cb;
622
- tcp->write_cb = NULL;
633
+ tcp->write_cb = nullptr;
623
634
  cb->cb(exec_ctx, cb->cb_arg, error);
624
635
  TCP_UNREF(exec_ctx, tcp, "write");
625
636
  return;
626
637
  }
627
638
 
628
639
  if (!tcp_flush(exec_ctx, tcp, &error)) {
629
- if (GRPC_TRACER_ON(grpc_tcp_trace)) {
640
+ if (grpc_tcp_trace.enabled()) {
630
641
  gpr_log(GPR_DEBUG, "write: delayed");
631
642
  }
632
643
  notify_on_write(exec_ctx, tcp);
633
644
  } else {
634
645
  cb = tcp->write_cb;
635
- tcp->write_cb = NULL;
636
- if (GRPC_TRACER_ON(grpc_tcp_trace)) {
637
- const char *str = grpc_error_string(error);
646
+ tcp->write_cb = nullptr;
647
+ if (grpc_tcp_trace.enabled()) {
648
+ const char* str = grpc_error_string(error);
638
649
  gpr_log(GPR_DEBUG, "write: %s", str);
639
650
  }
640
651
 
@@ -643,16 +654,16 @@ static void tcp_handle_write(grpc_exec_ctx *exec_ctx, void *arg /* grpc_tcp */,
643
654
  }
644
655
  }
645
656
 
646
- static void tcp_write(grpc_exec_ctx *exec_ctx, grpc_endpoint *ep,
647
- grpc_slice_buffer *buf, grpc_closure *cb) {
648
- grpc_tcp *tcp = (grpc_tcp *)ep;
649
- grpc_error *error = GRPC_ERROR_NONE;
657
+ static void tcp_write(grpc_exec_ctx* exec_ctx, grpc_endpoint* ep,
658
+ grpc_slice_buffer* buf, grpc_closure* cb) {
659
+ grpc_tcp* tcp = (grpc_tcp*)ep;
660
+ grpc_error* error = GRPC_ERROR_NONE;
650
661
 
651
- if (GRPC_TRACER_ON(grpc_tcp_trace)) {
662
+ if (grpc_tcp_trace.enabled()) {
652
663
  size_t i;
653
664
 
654
665
  for (i = 0; i < buf->count; i++) {
655
- char *data =
666
+ char* data =
656
667
  grpc_dump_slice(buf->slices[i], GPR_DUMP_HEX | GPR_DUMP_ASCII);
657
668
  gpr_log(GPR_DEBUG, "WRITE %p (peer=%s): %s", tcp, tcp->peer_string, data);
658
669
  gpr_free(data);
@@ -660,7 +671,7 @@ static void tcp_write(grpc_exec_ctx *exec_ctx, grpc_endpoint *ep,
660
671
  }
661
672
 
662
673
  GPR_TIMER_BEGIN("tcp_write", 0);
663
- GPR_ASSERT(tcp->write_cb == NULL);
674
+ GPR_ASSERT(tcp->write_cb == nullptr);
664
675
 
665
676
  if (buf->length == 0) {
666
677
  GPR_TIMER_END("tcp_write", 0);
@@ -673,19 +684,18 @@ static void tcp_write(grpc_exec_ctx *exec_ctx, grpc_endpoint *ep,
673
684
  return;
674
685
  }
675
686
  tcp->outgoing_buffer = buf;
676
- tcp->outgoing_slice_idx = 0;
677
687
  tcp->outgoing_byte_idx = 0;
678
688
 
679
689
  if (!tcp_flush(exec_ctx, tcp, &error)) {
680
690
  TCP_REF(tcp, "write");
681
691
  tcp->write_cb = cb;
682
- if (GRPC_TRACER_ON(grpc_tcp_trace)) {
692
+ if (grpc_tcp_trace.enabled()) {
683
693
  gpr_log(GPR_DEBUG, "write: delayed");
684
694
  }
685
695
  notify_on_write(exec_ctx, tcp);
686
696
  } else {
687
- if (GRPC_TRACER_ON(grpc_tcp_trace)) {
688
- const char *str = grpc_error_string(error);
697
+ if (grpc_tcp_trace.enabled()) {
698
+ const char* str = grpc_error_string(error);
689
699
  gpr_log(GPR_DEBUG, "write: %s", str);
690
700
  }
691
701
  GRPC_CLOSURE_SCHED(exec_ctx, cb, error);
@@ -694,48 +704,61 @@ static void tcp_write(grpc_exec_ctx *exec_ctx, grpc_endpoint *ep,
694
704
  GPR_TIMER_END("tcp_write", 0);
695
705
  }
696
706
 
697
- static void tcp_add_to_pollset(grpc_exec_ctx *exec_ctx, grpc_endpoint *ep,
698
- grpc_pollset *pollset) {
699
- grpc_tcp *tcp = (grpc_tcp *)ep;
707
+ static void tcp_add_to_pollset(grpc_exec_ctx* exec_ctx, grpc_endpoint* ep,
708
+ grpc_pollset* pollset) {
709
+ grpc_tcp* tcp = (grpc_tcp*)ep;
700
710
  grpc_pollset_add_fd(exec_ctx, pollset, tcp->em_fd);
701
711
  }
702
712
 
703
- static void tcp_add_to_pollset_set(grpc_exec_ctx *exec_ctx, grpc_endpoint *ep,
704
- grpc_pollset_set *pollset_set) {
705
- grpc_tcp *tcp = (grpc_tcp *)ep;
713
+ static void tcp_add_to_pollset_set(grpc_exec_ctx* exec_ctx, grpc_endpoint* ep,
714
+ grpc_pollset_set* pollset_set) {
715
+ grpc_tcp* tcp = (grpc_tcp*)ep;
706
716
  grpc_pollset_set_add_fd(exec_ctx, pollset_set, tcp->em_fd);
707
717
  }
708
718
 
709
- static char *tcp_get_peer(grpc_endpoint *ep) {
710
- grpc_tcp *tcp = (grpc_tcp *)ep;
719
+ static void tcp_delete_from_pollset_set(grpc_exec_ctx* exec_ctx,
720
+ grpc_endpoint* ep,
721
+ grpc_pollset_set* pollset_set) {
722
+ grpc_tcp* tcp = (grpc_tcp*)ep;
723
+ grpc_pollset_set_del_fd(exec_ctx, pollset_set, tcp->em_fd);
724
+ }
725
+
726
+ static char* tcp_get_peer(grpc_endpoint* ep) {
727
+ grpc_tcp* tcp = (grpc_tcp*)ep;
711
728
  return gpr_strdup(tcp->peer_string);
712
729
  }
713
730
 
714
- static int tcp_get_fd(grpc_endpoint *ep) {
715
- grpc_tcp *tcp = (grpc_tcp *)ep;
731
+ static int tcp_get_fd(grpc_endpoint* ep) {
732
+ grpc_tcp* tcp = (grpc_tcp*)ep;
716
733
  return tcp->fd;
717
734
  }
718
735
 
719
- static grpc_resource_user *tcp_get_resource_user(grpc_endpoint *ep) {
720
- grpc_tcp *tcp = (grpc_tcp *)ep;
736
+ static grpc_resource_user* tcp_get_resource_user(grpc_endpoint* ep) {
737
+ grpc_tcp* tcp = (grpc_tcp*)ep;
721
738
  return tcp->resource_user;
722
739
  }
723
740
 
724
- static const grpc_endpoint_vtable vtable = {
725
- tcp_read, tcp_write, tcp_add_to_pollset, tcp_add_to_pollset_set,
726
- tcp_shutdown, tcp_destroy, tcp_get_resource_user, tcp_get_peer,
727
- tcp_get_fd};
741
+ static const grpc_endpoint_vtable vtable = {tcp_read,
742
+ tcp_write,
743
+ tcp_add_to_pollset,
744
+ tcp_add_to_pollset_set,
745
+ tcp_delete_from_pollset_set,
746
+ tcp_shutdown,
747
+ tcp_destroy,
748
+ tcp_get_resource_user,
749
+ tcp_get_peer,
750
+ tcp_get_fd};
728
751
 
729
752
  #define MAX_CHUNK_SIZE 32 * 1024 * 1024
730
753
 
731
- grpc_endpoint *grpc_tcp_create(grpc_exec_ctx *exec_ctx, grpc_fd *em_fd,
732
- const grpc_channel_args *channel_args,
733
- const char *peer_string) {
754
+ grpc_endpoint* grpc_tcp_create(grpc_exec_ctx* exec_ctx, grpc_fd* em_fd,
755
+ const grpc_channel_args* channel_args,
756
+ const char* peer_string) {
734
757
  int tcp_read_chunk_size = GRPC_TCP_DEFAULT_READ_SLICE_SIZE;
735
758
  int tcp_max_read_chunk_size = 4 * 1024 * 1024;
736
759
  int tcp_min_read_chunk_size = 256;
737
- grpc_resource_quota *resource_quota = grpc_resource_quota_create(NULL);
738
- if (channel_args != NULL) {
760
+ grpc_resource_quota* resource_quota = grpc_resource_quota_create(nullptr);
761
+ if (channel_args != nullptr) {
739
762
  for (size_t i = 0; i < channel_args->num_args; i++) {
740
763
  if (0 ==
741
764
  strcmp(channel_args->args[i].key, GRPC_ARG_TCP_READ_CHUNK_SIZE)) {
@@ -759,7 +782,7 @@ grpc_endpoint *grpc_tcp_create(grpc_exec_ctx *exec_ctx, grpc_fd *em_fd,
759
782
  strcmp(channel_args->args[i].key, GRPC_ARG_RESOURCE_QUOTA)) {
760
783
  grpc_resource_quota_unref_internal(exec_ctx, resource_quota);
761
784
  resource_quota = grpc_resource_quota_ref_internal(
762
- (grpc_resource_quota *)channel_args->args[i].value.pointer.p);
785
+ (grpc_resource_quota*)channel_args->args[i].value.pointer.p);
763
786
  }
764
787
  }
765
788
  }
@@ -770,15 +793,15 @@ grpc_endpoint *grpc_tcp_create(grpc_exec_ctx *exec_ctx, grpc_fd *em_fd,
770
793
  tcp_read_chunk_size = GPR_CLAMP(tcp_read_chunk_size, tcp_min_read_chunk_size,
771
794
  tcp_max_read_chunk_size);
772
795
 
773
- grpc_tcp *tcp = (grpc_tcp *)gpr_malloc(sizeof(grpc_tcp));
796
+ grpc_tcp* tcp = (grpc_tcp*)gpr_malloc(sizeof(grpc_tcp));
774
797
  tcp->base.vtable = &vtable;
775
798
  tcp->peer_string = gpr_strdup(peer_string);
776
799
  tcp->fd = grpc_fd_wrapped_fd(em_fd);
777
- tcp->read_cb = NULL;
778
- tcp->write_cb = NULL;
779
- tcp->release_fd_cb = NULL;
780
- tcp->release_fd = NULL;
781
- tcp->incoming_buffer = NULL;
800
+ tcp->read_cb = nullptr;
801
+ tcp->write_cb = nullptr;
802
+ tcp->release_fd_cb = nullptr;
803
+ tcp->release_fd = nullptr;
804
+ tcp->incoming_buffer = nullptr;
782
805
  tcp->target_length = (double)tcp_read_chunk_size;
783
806
  tcp->min_read_chunk_size = tcp_min_read_chunk_size;
784
807
  tcp->max_read_chunk_size = tcp_max_read_chunk_size;
@@ -799,16 +822,16 @@ grpc_endpoint *grpc_tcp_create(grpc_exec_ctx *exec_ctx, grpc_fd *em_fd,
799
822
  return &tcp->base;
800
823
  }
801
824
 
802
- int grpc_tcp_fd(grpc_endpoint *ep) {
803
- grpc_tcp *tcp = (grpc_tcp *)ep;
825
+ int grpc_tcp_fd(grpc_endpoint* ep) {
826
+ grpc_tcp* tcp = (grpc_tcp*)ep;
804
827
  GPR_ASSERT(ep->vtable == &vtable);
805
828
  return grpc_fd_wrapped_fd(tcp->em_fd);
806
829
  }
807
830
 
808
- void grpc_tcp_destroy_and_release_fd(grpc_exec_ctx *exec_ctx, grpc_endpoint *ep,
809
- int *fd, grpc_closure *done) {
831
+ void grpc_tcp_destroy_and_release_fd(grpc_exec_ctx* exec_ctx, grpc_endpoint* ep,
832
+ int* fd, grpc_closure* done) {
810
833
  grpc_network_status_unregister_endpoint(ep);
811
- grpc_tcp *tcp = (grpc_tcp *)ep;
834
+ grpc_tcp* tcp = (grpc_tcp*)ep;
812
835
  GPR_ASSERT(ep->vtable == &vtable);
813
836
  tcp->release_fd = fd;
814
837
  tcp->release_fd_cb = done;