passenger 6.0.16 → 6.0.17

Sign up to get free protection for your applications and to get access to all the features.
Files changed (286) hide show
  1. checksums.yaml +4 -4
  2. data/CHANGELOG +22 -1
  3. data/build/integration_tests.rb +6 -6
  4. data/build/ruby_tests.rb +1 -1
  5. data/build/test_basics.rb +0 -1
  6. data/src/agent/Core/Config.h +1 -1
  7. data/src/agent/Core/Controller/Config.h +1 -1
  8. data/src/agent/Core/SpawningKit/PipeWatcher.h +18 -3
  9. data/src/agent/Watchdog/Config.h +1 -1
  10. data/src/cxx_supportlib/Constants.h +1 -1
  11. data/src/cxx_supportlib/vendor-modified/boost/align/aligned_alloc.hpp +1 -1
  12. data/src/cxx_supportlib/vendor-modified/boost/array.hpp +1 -1
  13. data/src/cxx_supportlib/vendor-modified/boost/asio/any_completion_executor.hpp +344 -0
  14. data/src/cxx_supportlib/vendor-modified/boost/asio/any_completion_handler.hpp +686 -0
  15. data/src/cxx_supportlib/vendor-modified/boost/asio/any_io_executor.hpp +56 -0
  16. data/src/cxx_supportlib/vendor-modified/boost/asio/associated_allocator.hpp +81 -25
  17. data/src/cxx_supportlib/vendor-modified/boost/asio/associated_cancellation_slot.hpp +68 -8
  18. data/src/cxx_supportlib/vendor-modified/boost/asio/associated_executor.hpp +46 -11
  19. data/src/cxx_supportlib/vendor-modified/boost/asio/basic_datagram_socket.hpp +4 -4
  20. data/src/cxx_supportlib/vendor-modified/boost/asio/basic_deadline_timer.hpp +2 -2
  21. data/src/cxx_supportlib/vendor-modified/boost/asio/basic_file.hpp +1 -1
  22. data/src/cxx_supportlib/vendor-modified/boost/asio/basic_random_access_file.hpp +2 -2
  23. data/src/cxx_supportlib/vendor-modified/boost/asio/basic_raw_socket.hpp +4 -4
  24. data/src/cxx_supportlib/vendor-modified/boost/asio/basic_readable_pipe.hpp +2 -2
  25. data/src/cxx_supportlib/vendor-modified/boost/asio/basic_seq_packet_socket.hpp +2 -2
  26. data/src/cxx_supportlib/vendor-modified/boost/asio/basic_serial_port.hpp +3 -3
  27. data/src/cxx_supportlib/vendor-modified/boost/asio/basic_signal_set.hpp +2 -2
  28. data/src/cxx_supportlib/vendor-modified/boost/asio/basic_socket.hpp +3 -3
  29. data/src/cxx_supportlib/vendor-modified/boost/asio/basic_socket_acceptor.hpp +4 -4
  30. data/src/cxx_supportlib/vendor-modified/boost/asio/basic_stream_file.hpp +2 -2
  31. data/src/cxx_supportlib/vendor-modified/boost/asio/basic_stream_socket.hpp +2 -2
  32. data/src/cxx_supportlib/vendor-modified/boost/asio/basic_waitable_timer.hpp +2 -2
  33. data/src/cxx_supportlib/vendor-modified/boost/asio/basic_writable_pipe.hpp +2 -2
  34. data/src/cxx_supportlib/vendor-modified/boost/asio/bind_allocator.hpp +13 -3
  35. data/src/cxx_supportlib/vendor-modified/boost/asio/bind_cancellation_slot.hpp +14 -3
  36. data/src/cxx_supportlib/vendor-modified/boost/asio/bind_executor.hpp +13 -3
  37. data/src/cxx_supportlib/vendor-modified/boost/asio/compose.hpp +30 -305
  38. data/src/cxx_supportlib/vendor-modified/boost/asio/consign.hpp +90 -0
  39. data/src/cxx_supportlib/vendor-modified/boost/asio/defer.hpp +17 -18
  40. data/src/cxx_supportlib/vendor-modified/boost/asio/detail/bind_handler.hpp +98 -24
  41. data/src/cxx_supportlib/vendor-modified/boost/asio/detail/composed_work.hpp +330 -0
  42. data/src/cxx_supportlib/vendor-modified/boost/asio/detail/config.hpp +81 -15
  43. data/src/cxx_supportlib/vendor-modified/boost/asio/detail/handler_alloc_helpers.hpp +4 -4
  44. data/src/cxx_supportlib/vendor-modified/boost/asio/detail/handler_work.hpp +19 -11
  45. data/src/cxx_supportlib/vendor-modified/boost/asio/detail/impl/descriptor_ops.ipp +37 -0
  46. data/src/cxx_supportlib/vendor-modified/boost/asio/detail/impl/handler_tracking.ipp +3 -1
  47. data/src/cxx_supportlib/vendor-modified/boost/asio/detail/impl/select_reactor.ipp +1 -1
  48. data/src/cxx_supportlib/vendor-modified/boost/asio/detail/impl/socket_ops.ipp +10 -2
  49. data/src/cxx_supportlib/vendor-modified/boost/asio/detail/impl/strand_executor_service.hpp +14 -1
  50. data/src/cxx_supportlib/vendor-modified/boost/asio/detail/memory.hpp +18 -0
  51. data/src/cxx_supportlib/vendor-modified/boost/asio/detail/utility.hpp +1 -2
  52. data/src/cxx_supportlib/vendor-modified/boost/asio/detail/work_dispatcher.hpp +7 -3
  53. data/src/cxx_supportlib/vendor-modified/boost/asio/dispatch.hpp +4 -14
  54. data/src/cxx_supportlib/vendor-modified/boost/asio/execution/allocator.hpp +22 -3
  55. data/src/cxx_supportlib/vendor-modified/boost/asio/execution/any_executor.hpp +447 -142
  56. data/src/cxx_supportlib/vendor-modified/boost/asio/execution/blocking.hpp +57 -8
  57. data/src/cxx_supportlib/vendor-modified/boost/asio/execution/blocking_adaptation.hpp +51 -6
  58. data/src/cxx_supportlib/vendor-modified/boost/asio/execution/bulk_execute.hpp +5 -0
  59. data/src/cxx_supportlib/vendor-modified/boost/asio/execution/bulk_guarantee.hpp +41 -4
  60. data/src/cxx_supportlib/vendor-modified/boost/asio/execution/connect.hpp +5 -0
  61. data/src/cxx_supportlib/vendor-modified/boost/asio/execution/context.hpp +13 -2
  62. data/src/cxx_supportlib/vendor-modified/boost/asio/execution/context_as.hpp +13 -2
  63. data/src/cxx_supportlib/vendor-modified/boost/asio/execution/detail/as_operation.hpp +4 -0
  64. data/src/cxx_supportlib/vendor-modified/boost/asio/execution/execute.hpp +9 -2
  65. data/src/cxx_supportlib/vendor-modified/boost/asio/execution/executor.hpp +11 -1
  66. data/src/cxx_supportlib/vendor-modified/boost/asio/execution/mapping.hpp +52 -8
  67. data/src/cxx_supportlib/vendor-modified/boost/asio/execution/occupancy.hpp +13 -2
  68. data/src/cxx_supportlib/vendor-modified/boost/asio/execution/operation_state.hpp +5 -0
  69. data/src/cxx_supportlib/vendor-modified/boost/asio/execution/outstanding_work.hpp +39 -6
  70. data/src/cxx_supportlib/vendor-modified/boost/asio/execution/receiver.hpp +5 -0
  71. data/src/cxx_supportlib/vendor-modified/boost/asio/execution/relationship.hpp +39 -6
  72. data/src/cxx_supportlib/vendor-modified/boost/asio/execution/schedule.hpp +5 -0
  73. data/src/cxx_supportlib/vendor-modified/boost/asio/execution/scheduler.hpp +5 -0
  74. data/src/cxx_supportlib/vendor-modified/boost/asio/execution/sender.hpp +5 -0
  75. data/src/cxx_supportlib/vendor-modified/boost/asio/execution/set_done.hpp +5 -0
  76. data/src/cxx_supportlib/vendor-modified/boost/asio/execution/set_error.hpp +5 -0
  77. data/src/cxx_supportlib/vendor-modified/boost/asio/execution/set_value.hpp +5 -0
  78. data/src/cxx_supportlib/vendor-modified/boost/asio/execution/start.hpp +5 -0
  79. data/src/cxx_supportlib/vendor-modified/boost/asio/execution/submit.hpp +5 -0
  80. data/src/cxx_supportlib/vendor-modified/boost/asio/executor_work_guard.hpp +6 -9
  81. data/src/cxx_supportlib/vendor-modified/boost/asio/experimental/basic_channel.hpp +3 -3
  82. data/src/cxx_supportlib/vendor-modified/boost/asio/experimental/basic_concurrent_channel.hpp +3 -3
  83. data/src/cxx_supportlib/vendor-modified/boost/asio/experimental/channel_traits.hpp +70 -0
  84. data/src/cxx_supportlib/vendor-modified/boost/asio/experimental/co_composed.hpp +146 -0
  85. data/src/cxx_supportlib/vendor-modified/boost/asio/experimental/coro.hpp +35 -5
  86. data/src/cxx_supportlib/vendor-modified/boost/asio/experimental/detail/channel_handler.hpp +13 -3
  87. data/src/cxx_supportlib/vendor-modified/boost/asio/experimental/detail/channel_operation.hpp +7 -0
  88. data/src/cxx_supportlib/vendor-modified/boost/asio/experimental/detail/channel_service.hpp +180 -0
  89. data/src/cxx_supportlib/vendor-modified/boost/asio/experimental/detail/coro_completion_handler.hpp +171 -0
  90. data/src/cxx_supportlib/vendor-modified/boost/asio/experimental/detail/coro_promise_allocator.hpp +89 -66
  91. data/src/cxx_supportlib/vendor-modified/boost/asio/experimental/detail/partial_promise.hpp +66 -45
  92. data/src/cxx_supportlib/vendor-modified/boost/asio/experimental/impl/as_single.hpp +13 -3
  93. data/src/cxx_supportlib/vendor-modified/boost/asio/experimental/impl/co_composed.hpp +1134 -0
  94. data/src/cxx_supportlib/vendor-modified/boost/asio/experimental/impl/coro.hpp +130 -106
  95. data/src/cxx_supportlib/vendor-modified/boost/asio/experimental/impl/parallel_group.hpp +377 -3
  96. data/src/cxx_supportlib/vendor-modified/boost/asio/experimental/impl/promise.hpp +168 -29
  97. data/src/cxx_supportlib/vendor-modified/boost/asio/experimental/impl/use_coro.hpp +149 -203
  98. data/src/cxx_supportlib/vendor-modified/boost/asio/experimental/impl/use_promise.hpp +68 -0
  99. data/src/cxx_supportlib/vendor-modified/boost/asio/experimental/parallel_group.hpp +256 -0
  100. data/src/cxx_supportlib/vendor-modified/boost/asio/experimental/promise.hpp +76 -80
  101. data/src/cxx_supportlib/vendor-modified/boost/asio/experimental/use_coro.hpp +40 -14
  102. data/src/cxx_supportlib/vendor-modified/boost/asio/experimental/use_promise.hpp +113 -0
  103. data/src/cxx_supportlib/vendor-modified/boost/asio/impl/any_completion_executor.ipp +132 -0
  104. data/src/cxx_supportlib/vendor-modified/boost/asio/impl/any_io_executor.ipp +12 -0
  105. data/src/cxx_supportlib/vendor-modified/boost/asio/impl/append.hpp +12 -3
  106. data/src/cxx_supportlib/vendor-modified/boost/asio/impl/as_tuple.hpp +12 -3
  107. data/src/cxx_supportlib/vendor-modified/boost/asio/impl/buffered_read_stream.hpp +25 -6
  108. data/src/cxx_supportlib/vendor-modified/boost/asio/impl/buffered_write_stream.hpp +25 -6
  109. data/src/cxx_supportlib/vendor-modified/boost/asio/impl/co_spawn.hpp +34 -45
  110. data/src/cxx_supportlib/vendor-modified/boost/asio/impl/connect.hpp +28 -6
  111. data/src/cxx_supportlib/vendor-modified/boost/asio/impl/consign.hpp +204 -0
  112. data/src/cxx_supportlib/vendor-modified/boost/asio/impl/defer.hpp +33 -1
  113. data/src/cxx_supportlib/vendor-modified/boost/asio/impl/deferred.hpp +13 -3
  114. data/src/cxx_supportlib/vendor-modified/boost/asio/impl/dispatch.hpp +21 -9
  115. data/src/cxx_supportlib/vendor-modified/boost/asio/impl/handler_alloc_hook.ipp +1 -1
  116. data/src/cxx_supportlib/vendor-modified/boost/asio/impl/post.hpp +33 -1
  117. data/src/cxx_supportlib/vendor-modified/boost/asio/impl/prepend.hpp +12 -3
  118. data/src/cxx_supportlib/vendor-modified/boost/asio/impl/read.hpp +40 -9
  119. data/src/cxx_supportlib/vendor-modified/boost/asio/impl/read_at.hpp +27 -6
  120. data/src/cxx_supportlib/vendor-modified/boost/asio/impl/read_until.hpp +104 -24
  121. data/src/cxx_supportlib/vendor-modified/boost/asio/impl/redirect_error.hpp +12 -3
  122. data/src/cxx_supportlib/vendor-modified/boost/asio/impl/spawn.hpp +70 -15
  123. data/src/cxx_supportlib/vendor-modified/boost/asio/impl/src.hpp +1 -0
  124. data/src/cxx_supportlib/vendor-modified/boost/asio/impl/use_future.hpp +25 -0
  125. data/src/cxx_supportlib/vendor-modified/boost/asio/impl/write.hpp +38 -30
  126. data/src/cxx_supportlib/vendor-modified/boost/asio/impl/write_at.hpp +27 -6
  127. data/src/cxx_supportlib/vendor-modified/boost/asio/io_context.hpp +0 -13
  128. data/src/cxx_supportlib/vendor-modified/boost/asio/ip/impl/network_v4.ipp +3 -1
  129. data/src/cxx_supportlib/vendor-modified/boost/asio/ip/impl/network_v6.ipp +3 -1
  130. data/src/cxx_supportlib/vendor-modified/boost/asio/posix/basic_descriptor.hpp +2 -2
  131. data/src/cxx_supportlib/vendor-modified/boost/asio/posix/basic_stream_descriptor.hpp +2 -2
  132. data/src/cxx_supportlib/vendor-modified/boost/asio/post.hpp +17 -18
  133. data/src/cxx_supportlib/vendor-modified/boost/asio/spawn.hpp +3 -1
  134. data/src/cxx_supportlib/vendor-modified/boost/asio/ssl/detail/io.hpp +13 -3
  135. data/src/cxx_supportlib/vendor-modified/boost/asio/strand.hpp +11 -7
  136. data/src/cxx_supportlib/vendor-modified/boost/asio/system_executor.hpp +0 -13
  137. data/src/cxx_supportlib/vendor-modified/boost/asio/thread_pool.hpp +23 -18
  138. data/src/cxx_supportlib/vendor-modified/boost/asio/version.hpp +1 -1
  139. data/src/cxx_supportlib/vendor-modified/boost/asio/windows/basic_object_handle.hpp +2 -2
  140. data/src/cxx_supportlib/vendor-modified/boost/asio/windows/basic_overlapped_handle.hpp +1 -1
  141. data/src/cxx_supportlib/vendor-modified/boost/asio/windows/basic_random_access_handle.hpp +2 -2
  142. data/src/cxx_supportlib/vendor-modified/boost/asio/windows/basic_stream_handle.hpp +2 -2
  143. data/src/cxx_supportlib/vendor-modified/boost/asio.hpp +4 -0
  144. data/src/cxx_supportlib/vendor-modified/boost/bind/bind.hpp +1 -1
  145. data/src/cxx_supportlib/vendor-modified/boost/chrono/config.hpp +1 -0
  146. data/src/cxx_supportlib/vendor-modified/boost/chrono/detail/inlined/mac/chrono.hpp +4 -4
  147. data/src/cxx_supportlib/vendor-modified/boost/chrono/detail/scan_keyword.hpp +4 -2
  148. data/src/cxx_supportlib/vendor-modified/boost/chrono/duration.hpp +2 -2
  149. data/src/cxx_supportlib/vendor-modified/boost/chrono/io/duration_io.hpp +3 -3
  150. data/src/cxx_supportlib/vendor-modified/boost/chrono/io/duration_put.hpp +5 -5
  151. data/src/cxx_supportlib/vendor-modified/boost/chrono/io/duration_units.hpp +2 -2
  152. data/src/cxx_supportlib/vendor-modified/boost/chrono/io/time_point_io.hpp +2 -2
  153. data/src/cxx_supportlib/vendor-modified/boost/chrono/io/utility/ios_base_state_ptr.hpp +7 -7
  154. data/src/cxx_supportlib/vendor-modified/boost/chrono/time_point.hpp +1 -1
  155. data/src/cxx_supportlib/vendor-modified/boost/circular_buffer/details.hpp +5 -1
  156. data/src/cxx_supportlib/vendor-modified/boost/config/compiler/clang.hpp +10 -3
  157. data/src/cxx_supportlib/vendor-modified/boost/config/compiler/clang_version.hpp +9 -3
  158. data/src/cxx_supportlib/vendor-modified/boost/config/compiler/gcc.hpp +9 -3
  159. data/src/cxx_supportlib/vendor-modified/boost/config/compiler/sunpro_cc.hpp +6 -0
  160. data/src/cxx_supportlib/vendor-modified/boost/config/compiler/visualc.hpp +8 -0
  161. data/src/cxx_supportlib/vendor-modified/boost/config/compiler/xlcpp.hpp +4 -0
  162. data/src/cxx_supportlib/vendor-modified/boost/config/detail/suffix.hpp +33 -0
  163. data/src/cxx_supportlib/vendor-modified/boost/config/header_deprecated.hpp +1 -1
  164. data/src/cxx_supportlib/vendor-modified/boost/config/stdlib/libcpp.hpp +9 -0
  165. data/src/cxx_supportlib/vendor-modified/boost/config/stdlib/libstdcpp3.hpp +4 -2
  166. data/src/cxx_supportlib/vendor-modified/boost/container/allocator.hpp +1 -1
  167. data/src/cxx_supportlib/vendor-modified/boost/container/container_fwd.hpp +29 -0
  168. data/src/cxx_supportlib/vendor-modified/boost/container/deque.hpp +13 -13
  169. data/src/cxx_supportlib/vendor-modified/boost/container/detail/advanced_insert_int.hpp +80 -95
  170. data/src/cxx_supportlib/vendor-modified/boost/container/detail/config_begin.hpp +10 -0
  171. data/src/cxx_supportlib/vendor-modified/boost/container/detail/config_end.hpp +3 -0
  172. data/src/cxx_supportlib/vendor-modified/boost/container/detail/copy_move_algo.hpp +738 -34
  173. data/src/cxx_supportlib/vendor-modified/boost/container/detail/destroyers.hpp +38 -10
  174. data/src/cxx_supportlib/vendor-modified/boost/container/detail/flat_tree.hpp +1 -0
  175. data/src/cxx_supportlib/vendor-modified/boost/container/detail/iterator.hpp +2 -0
  176. data/src/cxx_supportlib/vendor-modified/boost/container/detail/workaround.hpp +3 -4
  177. data/src/cxx_supportlib/vendor-modified/boost/container/devector.hpp +1150 -1213
  178. data/src/cxx_supportlib/vendor-modified/boost/container/node_allocator.hpp +1 -1
  179. data/src/cxx_supportlib/vendor-modified/boost/container/options.hpp +104 -12
  180. data/src/cxx_supportlib/vendor-modified/boost/container/stable_vector.hpp +1 -0
  181. data/src/cxx_supportlib/vendor-modified/boost/container/string.hpp +11 -1
  182. data/src/cxx_supportlib/vendor-modified/boost/container/vector.hpp +31 -331
  183. data/src/cxx_supportlib/vendor-modified/boost/container_hash/detail/hash_mix.hpp +113 -0
  184. data/src/cxx_supportlib/vendor-modified/boost/container_hash/detail/hash_range.hpp +173 -0
  185. data/src/cxx_supportlib/vendor-modified/boost/container_hash/detail/hash_tuple.hpp +133 -0
  186. data/src/cxx_supportlib/vendor-modified/boost/container_hash/hash.hpp +461 -566
  187. data/src/cxx_supportlib/vendor-modified/boost/container_hash/hash_fwd.hpp +24 -24
  188. data/src/cxx_supportlib/vendor-modified/boost/container_hash/is_contiguous_range.hpp +91 -0
  189. data/src/cxx_supportlib/vendor-modified/boost/container_hash/is_described_class.hpp +38 -0
  190. data/src/cxx_supportlib/vendor-modified/boost/container_hash/is_range.hpp +73 -0
  191. data/src/cxx_supportlib/vendor-modified/boost/container_hash/is_unordered_range.hpp +39 -0
  192. data/src/cxx_supportlib/vendor-modified/boost/core/bit.hpp +32 -4
  193. data/src/cxx_supportlib/vendor-modified/boost/core/detail/string_view.hpp +16 -0
  194. data/src/cxx_supportlib/vendor-modified/boost/core/empty_value.hpp +16 -16
  195. data/src/cxx_supportlib/vendor-modified/boost/core/fclose_deleter.hpp +46 -0
  196. data/src/cxx_supportlib/vendor-modified/boost/date_time/date.hpp +1 -1
  197. data/src/cxx_supportlib/vendor-modified/boost/date_time/gregorian/formatters.hpp +3 -3
  198. data/src/cxx_supportlib/vendor-modified/boost/date_time/gregorian/formatters_limited.hpp +3 -3
  199. data/src/cxx_supportlib/vendor-modified/boost/date_time/gregorian/greg_date.hpp +12 -13
  200. data/src/cxx_supportlib/vendor-modified/boost/date_time/gregorian/parsers.hpp +2 -2
  201. data/src/cxx_supportlib/vendor-modified/boost/date_time/gregorian_calendar.ipp +2 -2
  202. data/src/cxx_supportlib/vendor-modified/boost/date_time/iso_format.hpp +13 -13
  203. data/src/cxx_supportlib/vendor-modified/boost/date_time/local_time/local_date_time.hpp +2 -2
  204. data/src/cxx_supportlib/vendor-modified/boost/date_time/posix_time/time_formatters.hpp +4 -4
  205. data/src/cxx_supportlib/vendor-modified/boost/date_time/posix_time/time_formatters_limited.hpp +2 -2
  206. data/src/cxx_supportlib/vendor-modified/boost/date_time/special_values_parser.hpp +1 -1
  207. data/src/cxx_supportlib/vendor-modified/boost/date_time/time_facet.hpp +1 -1
  208. data/src/cxx_supportlib/vendor-modified/boost/date_time/time_parsing.hpp +2 -2
  209. data/src/cxx_supportlib/vendor-modified/boost/describe/bases.hpp +50 -0
  210. data/src/cxx_supportlib/vendor-modified/boost/describe/detail/config.hpp +40 -0
  211. data/src/cxx_supportlib/vendor-modified/boost/describe/detail/cx_streq.hpp +30 -0
  212. data/src/cxx_supportlib/vendor-modified/boost/describe/detail/void_t.hpp +32 -0
  213. data/src/cxx_supportlib/vendor-modified/boost/describe/members.hpp +159 -0
  214. data/src/cxx_supportlib/vendor-modified/boost/describe/modifiers.hpp +33 -0
  215. data/src/cxx_supportlib/vendor-modified/boost/intrusive/avltree_algorithms.hpp +9 -9
  216. data/src/cxx_supportlib/vendor-modified/boost/intrusive/bstree_algorithms.hpp +45 -45
  217. data/src/cxx_supportlib/vendor-modified/boost/intrusive/detail/any_node_and_algorithms.hpp +8 -8
  218. data/src/cxx_supportlib/vendor-modified/boost/intrusive/detail/bstree_algorithms_base.hpp +37 -38
  219. data/src/cxx_supportlib/vendor-modified/boost/intrusive/detail/iterator.hpp +16 -0
  220. data/src/cxx_supportlib/vendor-modified/boost/intrusive/detail/workaround.hpp +1 -1
  221. data/src/cxx_supportlib/vendor-modified/boost/intrusive/hashtable.hpp +145 -90
  222. data/src/cxx_supportlib/vendor-modified/boost/intrusive/pack_options.hpp +2 -0
  223. data/src/cxx_supportlib/vendor-modified/boost/intrusive/rbtree_algorithms.hpp +7 -7
  224. data/src/cxx_supportlib/vendor-modified/boost/intrusive/sgtree_algorithms.hpp +5 -5
  225. data/src/cxx_supportlib/vendor-modified/boost/intrusive/splaytree_algorithms.hpp +11 -9
  226. data/src/cxx_supportlib/vendor-modified/boost/intrusive/treap_algorithms.hpp +7 -7
  227. data/src/cxx_supportlib/vendor-modified/boost/iterator/iterator_facade.hpp +106 -25
  228. data/src/cxx_supportlib/vendor-modified/boost/lexical_cast/detail/converter_lexical_streams.hpp +1 -1
  229. data/src/cxx_supportlib/vendor-modified/boost/lexical_cast/detail/converter_numeric.hpp +8 -5
  230. data/src/cxx_supportlib/vendor-modified/boost/lexical_cast/detail/lcast_unsigned_converters.hpp +1 -1
  231. data/src/cxx_supportlib/vendor-modified/boost/move/algo/detail/adaptive_sort_merge.hpp +4 -2
  232. data/src/cxx_supportlib/vendor-modified/boost/move/algo/detail/pdqsort.hpp +2 -1
  233. data/src/cxx_supportlib/vendor-modified/boost/move/detail/type_traits.hpp +8 -4
  234. data/src/cxx_supportlib/vendor-modified/boost/mp11/bind.hpp +111 -0
  235. data/src/cxx_supportlib/vendor-modified/boost/mp11/version.hpp +1 -1
  236. data/src/cxx_supportlib/vendor-modified/boost/numeric/conversion/detail/int_float_mixture.hpp +5 -5
  237. data/src/cxx_supportlib/vendor-modified/boost/numeric/conversion/detail/sign_mixture.hpp +5 -5
  238. data/src/cxx_supportlib/vendor-modified/boost/numeric/conversion/detail/udt_builtin_mixture.hpp +5 -5
  239. data/src/cxx_supportlib/vendor-modified/boost/preprocessor/variadic/has_opt.hpp +6 -2
  240. data/src/cxx_supportlib/vendor-modified/boost/smart_ptr/detail/spinlock_gcc_atomic.hpp +11 -2
  241. data/src/cxx_supportlib/vendor-modified/boost/smart_ptr/intrusive_ptr.hpp +1 -1
  242. data/src/cxx_supportlib/vendor-modified/boost/system/detail/config.hpp +7 -1
  243. data/src/cxx_supportlib/vendor-modified/boost/system/detail/error_category.hpp +2 -2
  244. data/src/cxx_supportlib/vendor-modified/boost/system/detail/error_category_impl.hpp +10 -1
  245. data/src/cxx_supportlib/vendor-modified/boost/system/detail/error_code.hpp +38 -43
  246. data/src/cxx_supportlib/vendor-modified/boost/system/detail/error_condition.hpp +52 -0
  247. data/src/cxx_supportlib/vendor-modified/boost/throw_exception.hpp +1 -1
  248. data/src/cxx_supportlib/vendor-modified/boost/type_traits/detail/is_function_ptr_helper.hpp +27 -27
  249. data/src/cxx_supportlib/vendor-modified/boost/type_traits/detail/is_mem_fun_pointer_impl.hpp +27 -27
  250. data/src/cxx_supportlib/vendor-modified/boost/type_traits/intrinsics.hpp +22 -8
  251. data/src/cxx_supportlib/vendor-modified/boost/unordered/detail/fca.hpp +37 -7
  252. data/src/cxx_supportlib/vendor-modified/boost/unordered/detail/foa.hpp +1921 -0
  253. data/src/cxx_supportlib/vendor-modified/boost/unordered/detail/implementation.hpp +66 -82
  254. data/src/cxx_supportlib/vendor-modified/boost/unordered/detail/prime_fmod.hpp +6 -0
  255. data/src/cxx_supportlib/vendor-modified/boost/unordered/detail/type_traits.hpp +109 -0
  256. data/src/cxx_supportlib/vendor-modified/boost/unordered/detail/xmx.hpp +75 -0
  257. data/src/cxx_supportlib/vendor-modified/boost/unordered/hash_traits.hpp +45 -0
  258. data/src/cxx_supportlib/vendor-modified/boost/unordered/unordered_flat_map.hpp +732 -0
  259. data/src/cxx_supportlib/vendor-modified/boost/unordered/unordered_flat_map_fwd.hpp +49 -0
  260. data/src/cxx_supportlib/vendor-modified/boost/unordered/unordered_flat_set.hpp +586 -0
  261. data/src/cxx_supportlib/vendor-modified/boost/unordered/unordered_flat_set_fwd.hpp +49 -0
  262. data/src/cxx_supportlib/vendor-modified/boost/unordered/unordered_map.hpp +166 -66
  263. data/src/cxx_supportlib/vendor-modified/boost/unordered/unordered_set.hpp +145 -28
  264. data/src/cxx_supportlib/vendor-modified/boost/version.hpp +2 -2
  265. data/src/cxx_supportlib/vendor-modified/websocketpp/websocketpp/common/md5.hpp +1 -1
  266. data/src/ruby_native_extension/extconf.rb +1 -1
  267. data/src/ruby_supportlib/phusion_passenger/platform_info/operating_system.rb +1 -1
  268. data/src/ruby_supportlib/phusion_passenger.rb +5 -5
  269. metadata +36 -19
  270. data/src/cxx_supportlib/vendor-modified/boost/align/align.hpp +0 -19
  271. data/src/cxx_supportlib/vendor-modified/boost/align/alignment_of.hpp +0 -54
  272. data/src/cxx_supportlib/vendor-modified/boost/align/alignment_of_forward.hpp +0 -20
  273. data/src/cxx_supportlib/vendor-modified/boost/align/detail/align_cxx11.hpp +0 -21
  274. data/src/cxx_supportlib/vendor-modified/boost/align/detail/aligned_alloc.hpp +0 -52
  275. data/src/cxx_supportlib/vendor-modified/boost/align/detail/alignment_of.hpp +0 -31
  276. data/src/cxx_supportlib/vendor-modified/boost/align/detail/alignment_of_cxx11.hpp +0 -23
  277. data/src/cxx_supportlib/vendor-modified/boost/align/detail/element_type.hpp +0 -91
  278. data/src/cxx_supportlib/vendor-modified/boost/align/detail/integral_constant.hpp +0 -53
  279. data/src/cxx_supportlib/vendor-modified/boost/align/detail/min_size.hpp +0 -26
  280. data/src/cxx_supportlib/vendor-modified/boost/asio/experimental/detail/completion_handler_erasure.hpp +0 -196
  281. data/src/cxx_supportlib/vendor-modified/boost/asio/impl/compose.hpp +0 -709
  282. data/src/cxx_supportlib/vendor-modified/boost/container_hash/detail/float_functions.hpp +0 -336
  283. data/src/cxx_supportlib/vendor-modified/boost/container_hash/detail/hash_float.hpp +0 -271
  284. data/src/cxx_supportlib/vendor-modified/boost/container_hash/detail/limits.hpp +0 -62
  285. data/src/cxx_supportlib/vendor-modified/boost/container_hash/extensions.hpp +0 -361
  286. data/src/cxx_supportlib/vendor-modified/boost/detail/container_fwd.hpp +0 -157
@@ -0,0 +1,171 @@
1
+ //
2
+ // experimental/detail/coro_completion_handler.hpp
3
+ // ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
4
+ //
5
+ // Copyright (c) 2021-2022 Klemens D. Morgenstern
6
+ // (klemens dot morgenstern at gmx dot net)
7
+ //
8
+ // Distributed under the Boost Software License, Version 1.0. (See accompanying
9
+ // file LICENSE_1_0.txt or copy at http://www.boost.org/LICENSE_1_0.txt)
10
+ //
11
+
12
+ #ifndef BOOST_ASIO_EXPERIMENTAL_DETAIL_CORO_COMPLETION_HANDLER_HPP
13
+ #define BOOST_ASIO_EXPERIMENTAL_DETAIL_CORO_COMPLETION_HANDLER_HPP
14
+
15
+ #if defined(_MSC_VER) && (_MSC_VER >= 1200)
16
+ # pragma once
17
+ #endif // defined(_MSC_VER) && (_MSC_VER >= 1200)
18
+
19
+ #include <boost/asio/detail/config.hpp>
20
+ #include <boost/asio/deferred.hpp>
21
+ #include <boost/asio/experimental/coro.hpp>
22
+
23
+ #include <boost/asio/detail/push_options.hpp>
24
+
25
+ namespace boost {
26
+ namespace asio {
27
+ namespace experimental {
28
+ namespace detail {
29
+
30
+ template <typename Promise, typename... Args>
31
+ struct coro_completion_handler
32
+ {
33
+ coro_completion_handler(coroutine_handle<Promise> h,
34
+ std::optional<std::tuple<Args...>>& result)
35
+ : self(h),
36
+ result(result)
37
+ {
38
+ }
39
+
40
+ coro_completion_handler(coro_completion_handler&&) = default;
41
+
42
+ coroutine_handle<Promise> self;
43
+
44
+ std::optional<std::tuple<Args...>>& result;
45
+
46
+ using promise_type = Promise;
47
+
48
+ void operator()(Args... args)
49
+ {
50
+ result.emplace(std::move(args)...);
51
+ self.resume();
52
+ }
53
+
54
+ using allocator_type = typename promise_type::allocator_type;
55
+ allocator_type get_allocator() const noexcept
56
+ {
57
+ return self.promise().get_allocator();
58
+ }
59
+
60
+ using executor_type = typename promise_type::executor_type;
61
+ executor_type get_executor() const noexcept
62
+ {
63
+ return self.promise().get_executor();
64
+ }
65
+
66
+ using cancellation_slot_type = typename promise_type::cancellation_slot_type;
67
+ cancellation_slot_type get_cancellation_slot() const noexcept
68
+ {
69
+ return self.promise().get_cancellation_slot();
70
+ }
71
+ };
72
+
73
+ template <typename Signature>
74
+ struct coro_completion_handler_type;
75
+
76
+ template <typename... Args>
77
+ struct coro_completion_handler_type<void(Args...)>
78
+ {
79
+ using type = std::tuple<Args...>;
80
+
81
+ template <typename Promise>
82
+ using completion_handler = coro_completion_handler<Promise, Args...>;
83
+ };
84
+
85
+ template <typename Signature>
86
+ using coro_completion_handler_type_t =
87
+ typename coro_completion_handler_type<Signature>::type;
88
+
89
+ inline void coro_interpret_result(std::tuple<>&&)
90
+ {
91
+ }
92
+
93
+ template <typename... Args>
94
+ inline auto coro_interpret_result(std::tuple<Args...>&& args)
95
+ {
96
+ return std::move(args);
97
+ }
98
+
99
+ template <typename... Args>
100
+ auto coro_interpret_result(std::tuple<std::exception_ptr, Args...>&& args)
101
+ {
102
+ if (std::get<0>(args))
103
+ std::rethrow_exception(std::get<0>(args));
104
+
105
+ return std::apply(
106
+ [](auto, auto&&... rest)
107
+ {
108
+ return std::make_tuple(std::move(rest)...);
109
+ });
110
+ }
111
+
112
+ template <typename... Args>
113
+ auto coro_interpret_result(
114
+ std::tuple<boost::system::error_code, Args...>&& args)
115
+ {
116
+ if (std::get<0>(args))
117
+ boost::asio::detail::throw_exception(
118
+ boost::system::system_error(std::get<0>(args)));
119
+
120
+ return std::apply(
121
+ [](auto, auto&&... rest)
122
+ {
123
+ return std::make_tuple(std::move(rest)...);
124
+ });
125
+ }
126
+
127
+ template <typename Arg>
128
+ inline auto coro_interpret_result(std::tuple<Arg>&& args)
129
+ {
130
+ return std::get<0>(std::move(args));
131
+ }
132
+
133
+ template <typename Arg>
134
+ auto coro_interpret_result(std::tuple<std::exception_ptr, Arg>&& args)
135
+ {
136
+ if (std::get<0>(args))
137
+ std::rethrow_exception(std::get<0>(args));
138
+ return std::get<1>(std::move(args));
139
+ }
140
+
141
+ inline auto coro_interpret_result(
142
+ std::tuple<boost::system::error_code>&& args)
143
+ {
144
+ if (std::get<0>(args))
145
+ boost::asio::detail::throw_exception(
146
+ boost::system::system_error(std::get<0>(args)));
147
+ }
148
+
149
+ inline auto coro_interpret_result(std::tuple<std::exception_ptr>&& args)
150
+ {
151
+ if (std::get<0>(args))
152
+ std::rethrow_exception(std::get<0>(args));
153
+ }
154
+
155
+ template <typename Arg>
156
+ auto coro_interpret_result(std::tuple<boost::system::error_code, Arg>&& args)
157
+ {
158
+ if (std::get<0>(args))
159
+ boost::asio::detail::throw_exception(
160
+ boost::system::system_error(std::get<0>(args)));
161
+ return std::get<1>(std::move(args));
162
+ }
163
+
164
+ } // namespace detail
165
+ } // namespace experimental
166
+ } // namespace asio
167
+ } // namespace boost
168
+
169
+ #include <boost/asio/detail/pop_options.hpp>
170
+
171
+ #endif // BOOST_ASIO_EXPERIMENTAL_DETAIL_CORO_COMPLETION_HANDLER_HPP
@@ -20,95 +20,118 @@ namespace asio {
20
20
  namespace experimental {
21
21
  namespace detail {
22
22
 
23
- template <typename Coroutine,
24
- typename Executor = typename Coroutine::executor_type,
25
- typename Allocator = typename std::allocator_traits<
26
- associated_allocator_t<Executor>>:: template rebind_alloc<std::byte>,
27
- bool Noexcept = noexcept(std::declval<Allocator>().allocate(0u))>
28
- struct coro_promise_allocator
23
+ /// Allocate the memory and put the allocator behind the coro memory
24
+ template <typename AllocatorType>
25
+ void* allocate_coroutine(const std::size_t size, AllocatorType alloc_)
29
26
  {
30
- using allocator_type = Allocator;
27
+ using alloc_type = typename std::allocator_traits<AllocatorType>::template
28
+ rebind_alloc<unsigned char>;
29
+ alloc_type alloc{alloc_};
30
+
31
+ const auto align_needed = size % alignof(alloc_type);
32
+ const auto align_offset = align_needed != 0
33
+ ? alignof(alloc_type) - align_needed : 0ull;
34
+ const auto alloc_size = size + sizeof(alloc_type) + align_offset;
35
+ const auto raw =
36
+ std::allocator_traits<alloc_type>::allocate(alloc, alloc_size);
37
+ new(raw + size + align_offset) alloc_type(std::move(alloc));
38
+
39
+ return raw;
40
+ }
41
+
42
+ /// Deallocate the memory and destroy the allocator in the coro memory.
43
+ template <typename AllocatorType>
44
+ void deallocate_coroutine(void* raw_, const std::size_t size)
45
+ {
46
+ using alloc_type = typename std::allocator_traits<AllocatorType>::template
47
+ rebind_alloc<unsigned char>;
31
48
 
32
- template <typename... Args>
33
- void* operator new(const std::size_t size, Executor executor, Args&&...)
34
- {
35
- static_assert(std::is_nothrow_move_constructible_v<allocator_type>);
36
- allocator_type alloc{get_associated_allocator(executor)};
37
-
38
- const auto csize = size + sizeof(alloc);
39
- const auto raw =
40
- std::allocator_traits<allocator_type>::allocate(alloc, csize);
41
- new (raw) allocator_type(std::move(alloc));
42
- return static_cast<std::byte*>(raw) + sizeof(alloc);
43
- }
49
+ const auto raw = static_cast<unsigned char *>(raw_);
44
50
 
45
- template <execution_context Context, typename... Args>
46
- void* operator new(const std::size_t size, Context&& ctx, Args&&... args)
47
- {
48
- return coro_promise_allocator::operator new(size,
49
- ctx.get_executor(), std::forward<Args>(args)...);
50
- }
51
+ const auto align_needed = size % alignof(alloc_type);
52
+ const auto align_offset = align_needed != 0
53
+ ? alignof(alloc_type) - align_needed : 0ull;
54
+ const auto alloc_size = size + sizeof(alloc_type) + align_offset;
51
55
 
52
- void operator delete(void* raw, std::size_t size )
53
- {
54
- auto * alloc_p = static_cast<allocator_type*>(raw);
56
+ auto alloc_p = reinterpret_cast<alloc_type *>(raw + size + align_offset);
57
+ auto alloc = std::move(*alloc_p);
58
+ alloc_p->~alloc_type();
59
+ std::allocator_traits<alloc_type>::deallocate(alloc, raw, alloc_size);
60
+ }
61
+
62
+ template <typename T>
63
+ constexpr std::size_t variadic_first(std::size_t = 0u)
64
+ {
65
+ return std::numeric_limits<std::size_t>::max();
66
+ }
55
67
 
56
- auto alloc = std::move(*alloc_p);
57
- alloc_p->~allocator_type();
58
- std::allocator_traits<allocator_type>::deallocate(alloc,
59
- static_cast<std::byte*>(raw), size + sizeof(allocator_type));
60
- }
61
- };
62
68
 
63
- template <typename Coroutine, typename Executor>
64
- struct coro_promise_allocator<Coroutine,
65
- Executor, std::allocator<std::byte>, false>
69
+ template <typename T, typename First, typename... Args>
70
+ constexpr std::size_t variadic_first(std::size_t pos = 0u)
66
71
  {
72
+ if constexpr (std::is_same_v<std::decay_t<First>, T>)
73
+ return pos;
74
+ else
75
+ return variadic_first<T, Args...>(pos+1);
76
+ }
77
+
78
+ template <std::size_t Idx, typename First, typename... Args>
79
+ requires (Idx <= sizeof...(Args))
80
+ constexpr decltype(auto) get_variadic(First&& first, Args&&... args)
81
+ {
82
+ if constexpr (Idx == 0u)
83
+ return static_cast<First>(first);
84
+ else
85
+ return get_variadic<Idx-1u>(static_cast<Args>(args)...);
86
+ }
67
87
 
68
- };
88
+ template <std::size_t Idx>
89
+ constexpr decltype(auto) get_variadic();
69
90
 
70
- template <typename Coroutine, typename Executor, typename Allocator>
71
- struct coro_promise_allocator<Coroutine, Executor, Allocator, true>
91
+ template <typename Allocator>
92
+ struct coro_promise_allocator
72
93
  {
73
94
  using allocator_type = Allocator;
95
+ allocator_type get_allocator() const {return alloc_;}
74
96
 
75
97
  template <typename... Args>
76
- void* operator new(const std::size_t size,
77
- Executor executor, Args&&...) noexcept
98
+ void* operator new(const std::size_t size, Args & ... args)
99
+ {
100
+ return allocate_coroutine(size,
101
+ get_variadic<variadic_first<std::allocator_arg_t,
102
+ std::decay_t<Args>...>() + 1u>(args...));
103
+ }
104
+
105
+ void operator delete(void* raw, const std::size_t size)
78
106
  {
79
- static_assert(std::is_nothrow_move_constructible_v<allocator_type>);
80
- allocator_type alloc{get_associated_allocator(executor)};
81
-
82
- const auto csize = size + sizeof(alloc);
83
- const auto raw =
84
- std::allocator_traits<allocator_type>::allocate(alloc, csize);
85
- if (raw == nullptr)
86
- return nullptr;
87
- new (raw) allocator_type(std::move(alloc));
88
- return static_cast<std::byte*>(raw) + sizeof(alloc);
107
+ deallocate_coroutine<allocator_type>(raw, size);
89
108
  }
90
109
 
91
- template <execution_context Context, typename... Args>
92
- void* operator new(const std::size_t size,
93
- Context&& ctx, Args&&... args) noexcept
110
+ template <typename... Args>
111
+ coro_promise_allocator(Args&& ... args)
112
+ : alloc_(
113
+ get_variadic<variadic_first<std::allocator_arg_t,
114
+ std::decay_t<Args>...>() + 1u>(args...))
94
115
  {
95
- return coro_promise_allocator::operator new(size,
96
- ctx.get_executor(), std::forward<Args>(args)...);
97
116
  }
98
117
 
99
- void operator delete(void* raw, std::size_t size) noexcept
118
+ private:
119
+ allocator_type alloc_;
120
+ };
121
+
122
+ template <>
123
+ struct coro_promise_allocator<std::allocator<void>>
124
+ {
125
+ using allocator_type = std::allocator<void>;
126
+
127
+ template <typename... Args>
128
+ coro_promise_allocator(Args&&...)
100
129
  {
101
- auto * alloc_p = static_cast<allocator_type*>(raw);
102
- auto alloc = std::move(*alloc_p);
103
- alloc_p->~allocator_type();
104
- const auto csize = size + sizeof(allocator_type);
105
- std::allocator_traits<allocator_type>::deallocate(alloc,
106
- static_cast<std::byte*>(raw) - sizeof(allocator_type), csize);
107
130
  }
108
131
 
109
- static auto get_return_object_on_allocation_failure() noexcept -> Coroutine
132
+ allocator_type get_allocator() const
110
133
  {
111
- return Coroutine{};
134
+ return {};
112
135
  }
113
136
  };
114
137
 
@@ -13,6 +13,7 @@
13
13
  #define BOOST_ASIO_EXPERIMENTAL_DETAIL_PARTIAL_PROMISE_HPP
14
14
 
15
15
  #include <boost/asio/detail/config.hpp>
16
+ #include <boost/asio/append.hpp>
16
17
  #include <boost/asio/awaitable.hpp>
17
18
  #include <boost/asio/experimental/coro_traits.hpp>
18
19
 
@@ -45,7 +46,33 @@ using std::experimental::noop_coroutine;
45
46
 
46
47
  #endif // defined(BOOST_ASIO_HAS_STD_COROUTINE)
47
48
 
48
- struct partial_promise
49
+ struct partial_coro
50
+ {
51
+ coroutine_handle<void> handle{nullptr};
52
+ };
53
+
54
+ template <typename Allocator>
55
+ struct partial_promise_base
56
+ {
57
+ template <typename Executor, typename Token, typename... Args>
58
+ void* operator new(const std::size_t size, Executor&, Token& tk, Args&...)
59
+ {
60
+ return allocate_coroutine<Allocator>(size, get_associated_allocator(tk));
61
+ }
62
+
63
+ void operator delete(void* raw, const std::size_t size)
64
+ {
65
+ deallocate_coroutine<Allocator>(raw, size);
66
+ }
67
+ };
68
+
69
+ template <>
70
+ struct partial_promise_base<std::allocator<void>>
71
+ {
72
+ };
73
+
74
+ template <typename Allocator>
75
+ struct partial_promise : partial_promise_base<Allocator>
49
76
  {
50
77
  auto initial_suspend() noexcept
51
78
  {
@@ -62,7 +89,7 @@ struct partial_promise
62
89
 
63
90
  auto await_suspend(boost::asio::detail::coroutine_handle<>) noexcept
64
91
  {
65
- p->get_return_object().destroy();
92
+ p->get_return_object().handle.destroy();
66
93
  }
67
94
 
68
95
  constexpr void await_resume() noexcept {}
@@ -73,9 +100,9 @@ struct partial_promise
73
100
 
74
101
  void return_void() {}
75
102
 
76
- coroutine_handle<partial_promise> get_return_object()
103
+ partial_coro get_return_object()
77
104
  {
78
- return coroutine_handle<partial_promise>::from_promise(*this);
105
+ return partial_coro{coroutine_handle<partial_promise>::from_promise(*this)};
79
106
  }
80
107
 
81
108
  void unhandled_exception()
@@ -84,7 +111,9 @@ struct partial_promise
84
111
  }
85
112
  };
86
113
 
87
- } // namespace detail
114
+
115
+
116
+ }; // namespace detail
88
117
  } // namespace experimental
89
118
  } // namespace asio
90
119
  } // namespace boost
@@ -93,12 +122,14 @@ struct partial_promise
93
122
 
94
123
  namespace std {
95
124
 
96
- template <typename ... Args>
125
+ template <typename Executor, typename Completion, typename... Args>
97
126
  struct coroutine_traits<
98
- coroutine_handle<boost::asio::experimental::detail::partial_promise>,
99
- Args...>
127
+ boost::asio::experimental::detail::partial_coro,
128
+ Executor, Completion, Args...>
100
129
  {
101
- using promise_type = boost::asio::experimental::detail::partial_promise;
130
+ using promise_type =
131
+ boost::asio::experimental::detail::partial_promise<
132
+ boost::asio::associated_allocator_t<Completion>>;
102
133
  };
103
134
 
104
135
  } // namespace std
@@ -107,12 +138,14 @@ struct coroutine_traits<
107
138
 
108
139
  namespace std { namespace experimental {
109
140
 
110
- template <typename... Args>
141
+ template <typename Executor, typename Completion, typename... Args>
111
142
  struct coroutine_traits<
112
- coroutine_handle<boost::asio::experimental::detail::partial_promise>,
113
- Args...>
143
+ boost::asio::experimental::detail::partial_coro,
144
+ Executor, Completion, Args...>
114
145
  {
115
- using promise_type = boost::asio::experimental::detail::partial_promise;
146
+ using promise_type =
147
+ boost::asio::experimental::detail::partial_promise<
148
+ boost::asio::associated_allocator_t<Completion>>;
116
149
  };
117
150
 
118
151
  }} // namespace std::experimental
@@ -124,51 +157,39 @@ namespace asio {
124
157
  namespace experimental {
125
158
  namespace detail {
126
159
 
127
- template <typename CompletionToken>
128
- auto post_coroutine(CompletionToken token) noexcept
129
- -> coroutine_handle<partial_promise>
130
- {
131
- post(std::move(token));
132
- co_return;
133
- }
134
-
135
- template <execution::executor Executor, typename CompletionToken>
136
- auto post_coroutine(Executor exec, CompletionToken token) noexcept
137
- -> coroutine_handle<partial_promise>
138
- {
139
- post(exec, std::move(token));
140
- co_return;
141
- }
142
-
143
- template <detail::execution_context Context, typename CompletionToken>
144
- auto post_coroutine(Context &ctx, CompletionToken token) noexcept
145
- -> coroutine_handle<partial_promise>
160
+ template <execution::executor Executor,
161
+ typename CompletionToken, typename... Args>
162
+ partial_coro post_coroutine(Executor exec,
163
+ CompletionToken token, Args&&... args) noexcept
146
164
  {
147
- post(ctx, std::move(token));
165
+ post(exec, boost::asio::append(std::move(token), std::move(args)...));
148
166
  co_return;
149
167
  }
150
168
 
151
- template <typename CompletionToken>
152
- auto dispatch_coroutine(CompletionToken token) noexcept
153
- -> coroutine_handle<partial_promise>
169
+ template <detail::execution_context Context,
170
+ typename CompletionToken, typename... Args>
171
+ partial_coro post_coroutine(Context& ctx,
172
+ CompletionToken token, Args&&... args) noexcept
154
173
  {
155
- dispatch(std::move(token));
174
+ post(ctx, boost::asio::append(std::move(token), std::move(args)...));
156
175
  co_return;
157
176
  }
158
177
 
159
- template <execution::executor Executor, typename CompletionToken>
160
- auto dispatch_coroutine(Executor exec, CompletionToken token) noexcept
161
- -> coroutine_handle<partial_promise>
178
+ template <execution::executor Executor,
179
+ typename CompletionToken, typename... Args>
180
+ partial_coro dispatch_coroutine(Executor exec,
181
+ CompletionToken token, Args&&... args) noexcept
162
182
  {
163
- dispatch(exec, std::move(token));
183
+ dispatch(exec, boost::asio::append(std::move(token), std::move(args)...));
164
184
  co_return;
165
185
  }
166
186
 
167
- template <detail::execution_context Context, typename CompletionToken>
168
- auto dispatch_coroutine(Context &ctx, CompletionToken token) noexcept
169
- -> coroutine_handle<partial_promise>
187
+ template <detail::execution_context Context,
188
+ typename CompletionToken, typename... Args>
189
+ partial_coro dispatch_coroutine(Context& ctx,
190
+ CompletionToken token, Args &&... args) noexcept
170
191
  {
171
- dispatch(ctx, std::move(token));
192
+ dispatch(ctx, boost::asio::append(std::move(token), std::move(args)...));
172
193
  co_return;
173
194
  }
174
195
 
@@ -213,9 +213,19 @@ struct associator<Associator,
213
213
  experimental::detail::as_single_handler<Handler>, DefaultCandidate>
214
214
  : Associator<Handler, DefaultCandidate>
215
215
  {
216
- static typename Associator<Handler, DefaultCandidate>::type get(
217
- const experimental::detail::as_single_handler<Handler>& h,
218
- const DefaultCandidate& c = DefaultCandidate()) BOOST_ASIO_NOEXCEPT
216
+ static typename Associator<Handler, DefaultCandidate>::type
217
+ get(const experimental::detail::as_single_handler<Handler>& h)
218
+ BOOST_ASIO_NOEXCEPT
219
+ {
220
+ return Associator<Handler, DefaultCandidate>::get(h.handler_);
221
+ }
222
+
223
+ static BOOST_ASIO_AUTO_RETURN_TYPE_PREFIX2(
224
+ typename Associator<Handler, DefaultCandidate>::type)
225
+ get(const experimental::detail::as_single_handler<Handler>& h,
226
+ const DefaultCandidate& c) BOOST_ASIO_NOEXCEPT
227
+ BOOST_ASIO_AUTO_RETURN_TYPE_SUFFIX((
228
+ Associator<Handler, DefaultCandidate>::get(h.handler_, c)))
219
229
  {
220
230
  return Associator<Handler, DefaultCandidate>::get(h.handler_, c);
221
231
  }