passenger 6.0.11 → 6.0.12

Sign up to get free protection for your applications and to get access to all the features.
Files changed (280) hide show
  1. checksums.yaml +4 -4
  2. data/CHANGELOG +24 -1
  3. data/CONTRIBUTORS +3 -0
  4. data/src/agent/Core/Config.h +1 -1
  5. data/src/agent/Core/Controller/CheckoutSession.cpp +24 -13
  6. data/src/agent/Core/Controller/Config.h +1 -1
  7. data/src/agent/Core/Controller/InternalUtils.cpp +32 -6
  8. data/src/agent/Core/Controller.h +4 -1
  9. data/src/agent/Watchdog/Config.h +1 -1
  10. data/src/cxx_supportlib/Constants.h +1 -1
  11. data/src/cxx_supportlib/IOTools/IOUtils.cpp +4 -4
  12. data/src/cxx_supportlib/vendor-modified/boost/align/aligned_alloc.hpp +47 -0
  13. data/src/cxx_supportlib/vendor-modified/boost/align/detail/aligned_alloc_posix.hpp +41 -0
  14. data/src/cxx_supportlib/vendor-modified/boost/align/detail/is_alignment.hpp +28 -0
  15. data/src/cxx_supportlib/vendor-modified/boost/asio/associated_allocator.hpp +53 -1
  16. data/src/cxx_supportlib/vendor-modified/boost/asio/associated_cancellation_slot.hpp +179 -0
  17. data/src/cxx_supportlib/vendor-modified/boost/asio/associated_executor.hpp +57 -1
  18. data/src/cxx_supportlib/vendor-modified/boost/asio/associator.hpp +37 -0
  19. data/src/cxx_supportlib/vendor-modified/boost/asio/async_result.hpp +789 -106
  20. data/src/cxx_supportlib/vendor-modified/boost/asio/awaitable.hpp +1 -1
  21. data/src/cxx_supportlib/vendor-modified/boost/asio/basic_datagram_socket.hpp +80 -0
  22. data/src/cxx_supportlib/vendor-modified/boost/asio/basic_deadline_timer.hpp +10 -0
  23. data/src/cxx_supportlib/vendor-modified/boost/asio/basic_raw_socket.hpp +80 -0
  24. data/src/cxx_supportlib/vendor-modified/boost/asio/basic_seq_packet_socket.hpp +30 -0
  25. data/src/cxx_supportlib/vendor-modified/boost/asio/basic_socket.hpp +20 -0
  26. data/src/cxx_supportlib/vendor-modified/boost/asio/basic_socket_acceptor.hpp +90 -0
  27. data/src/cxx_supportlib/vendor-modified/boost/asio/basic_stream_socket.hpp +60 -0
  28. data/src/cxx_supportlib/vendor-modified/boost/asio/basic_waitable_timer.hpp +10 -0
  29. data/src/cxx_supportlib/vendor-modified/boost/asio/bind_cancellation_slot.hpp +723 -0
  30. data/src/cxx_supportlib/vendor-modified/boost/asio/bind_executor.hpp +191 -12
  31. data/src/cxx_supportlib/vendor-modified/boost/asio/cancellation_signal.hpp +361 -0
  32. data/src/cxx_supportlib/vendor-modified/boost/asio/cancellation_state.hpp +237 -0
  33. data/src/cxx_supportlib/vendor-modified/boost/asio/cancellation_type.hpp +176 -0
  34. data/src/cxx_supportlib/vendor-modified/boost/asio/co_spawn.hpp +30 -2
  35. data/src/cxx_supportlib/vendor-modified/boost/asio/connect.hpp +60 -0
  36. data/src/cxx_supportlib/vendor-modified/boost/asio/detail/base_from_cancellation_state.hpp +165 -0
  37. data/src/cxx_supportlib/vendor-modified/boost/asio/detail/bind_handler.hpp +209 -76
  38. data/src/cxx_supportlib/vendor-modified/boost/asio/detail/config.hpp +149 -60
  39. data/src/cxx_supportlib/vendor-modified/boost/asio/detail/deadline_timer_service.hpp +40 -0
  40. data/src/cxx_supportlib/vendor-modified/boost/asio/detail/dev_poll_reactor.hpp +8 -4
  41. data/src/cxx_supportlib/vendor-modified/boost/asio/detail/epoll_reactor.hpp +14 -4
  42. data/src/cxx_supportlib/vendor-modified/boost/asio/detail/functional.hpp +6 -0
  43. data/src/cxx_supportlib/vendor-modified/boost/asio/detail/handler_alloc_helpers.hpp +14 -10
  44. data/src/cxx_supportlib/vendor-modified/boost/asio/detail/handler_type_requirements.hpp +21 -18
  45. data/src/cxx_supportlib/vendor-modified/boost/asio/detail/handler_work.hpp +30 -19
  46. data/src/cxx_supportlib/vendor-modified/boost/asio/detail/impl/dev_poll_reactor.hpp +8 -0
  47. data/src/cxx_supportlib/vendor-modified/boost/asio/detail/impl/dev_poll_reactor.ipp +14 -0
  48. data/src/cxx_supportlib/vendor-modified/boost/asio/detail/impl/epoll_reactor.hpp +20 -0
  49. data/src/cxx_supportlib/vendor-modified/boost/asio/detail/impl/epoll_reactor.ipp +30 -0
  50. data/src/cxx_supportlib/vendor-modified/boost/asio/detail/impl/kqueue_reactor.hpp +20 -0
  51. data/src/cxx_supportlib/vendor-modified/boost/asio/detail/impl/kqueue_reactor.ipp +29 -0
  52. data/src/cxx_supportlib/vendor-modified/boost/asio/detail/impl/select_reactor.hpp +24 -0
  53. data/src/cxx_supportlib/vendor-modified/boost/asio/detail/impl/select_reactor.ipp +19 -0
  54. data/src/cxx_supportlib/vendor-modified/boost/asio/detail/impl/strand_executor_service.hpp +3 -1
  55. data/src/cxx_supportlib/vendor-modified/boost/asio/detail/impl/timer_queue_ptime.ipp +6 -0
  56. data/src/cxx_supportlib/vendor-modified/boost/asio/detail/kqueue_reactor.hpp +15 -5
  57. data/src/cxx_supportlib/vendor-modified/boost/asio/detail/memory.hpp +60 -0
  58. data/src/cxx_supportlib/vendor-modified/boost/asio/detail/pop_options.hpp +8 -0
  59. data/src/cxx_supportlib/vendor-modified/boost/asio/detail/push_options.hpp +27 -0
  60. data/src/cxx_supportlib/vendor-modified/boost/asio/detail/reactive_descriptor_service.hpp +93 -0
  61. data/src/cxx_supportlib/vendor-modified/boost/asio/detail/reactive_socket_service.hpp +77 -0
  62. data/src/cxx_supportlib/vendor-modified/boost/asio/detail/reactive_socket_service_base.hpp +111 -0
  63. data/src/cxx_supportlib/vendor-modified/boost/asio/detail/reactor_op.hpp +4 -0
  64. data/src/cxx_supportlib/vendor-modified/boost/asio/detail/reactor_op_queue.hpp +44 -0
  65. data/src/cxx_supportlib/vendor-modified/boost/asio/detail/recycling_allocator.hpp +2 -1
  66. data/src/cxx_supportlib/vendor-modified/boost/asio/detail/resolve_endpoint_op.hpp +2 -2
  67. data/src/cxx_supportlib/vendor-modified/boost/asio/detail/select_reactor.hpp +14 -4
  68. data/src/cxx_supportlib/vendor-modified/boost/asio/detail/thread_info_base.hpp +90 -24
  69. data/src/cxx_supportlib/vendor-modified/boost/asio/detail/timer_queue.hpp +30 -1
  70. data/src/cxx_supportlib/vendor-modified/boost/asio/detail/timer_queue_ptime.hpp +4 -0
  71. data/src/cxx_supportlib/vendor-modified/boost/asio/detail/wait_op.hpp +5 -1
  72. data/src/cxx_supportlib/vendor-modified/boost/asio/detail/work_dispatcher.hpp +5 -2
  73. data/src/cxx_supportlib/vendor-modified/boost/asio/execution/any_executor.hpp +12 -12
  74. data/src/cxx_supportlib/vendor-modified/boost/asio/execution/bulk_execute.hpp +10 -8
  75. data/src/cxx_supportlib/vendor-modified/boost/asio/execution/connect.hpp +8 -8
  76. data/src/cxx_supportlib/vendor-modified/boost/asio/execution/execute.hpp +7 -7
  77. data/src/cxx_supportlib/vendor-modified/boost/asio/execution/schedule.hpp +7 -7
  78. data/src/cxx_supportlib/vendor-modified/boost/asio/execution/set_done.hpp +7 -7
  79. data/src/cxx_supportlib/vendor-modified/boost/asio/execution/set_error.hpp +7 -7
  80. data/src/cxx_supportlib/vendor-modified/boost/asio/execution/set_value.hpp +13 -13
  81. data/src/cxx_supportlib/vendor-modified/boost/asio/execution/start.hpp +7 -7
  82. data/src/cxx_supportlib/vendor-modified/boost/asio/execution/submit.hpp +8 -8
  83. data/src/cxx_supportlib/vendor-modified/boost/asio/experimental/append.hpp +73 -0
  84. data/src/cxx_supportlib/vendor-modified/boost/asio/experimental/as_tuple.hpp +133 -0
  85. data/src/cxx_supportlib/vendor-modified/boost/asio/experimental/awaitable_operators.hpp +538 -0
  86. data/src/cxx_supportlib/vendor-modified/boost/asio/experimental/cancellation_condition.hpp +157 -0
  87. data/src/cxx_supportlib/vendor-modified/boost/asio/experimental/coro.hpp +1057 -0
  88. data/src/cxx_supportlib/vendor-modified/boost/asio/experimental/deferred.hpp +607 -0
  89. data/src/cxx_supportlib/vendor-modified/boost/asio/experimental/detail/completion_handler_erasure.hpp +160 -0
  90. data/src/cxx_supportlib/vendor-modified/boost/asio/experimental/detail/coro_promise_allocator.hpp +120 -0
  91. data/src/cxx_supportlib/vendor-modified/boost/asio/experimental/detail/coro_traits.hpp +185 -0
  92. data/src/cxx_supportlib/vendor-modified/boost/asio/experimental/detail/partial_promise.hpp +181 -0
  93. data/src/cxx_supportlib/vendor-modified/boost/asio/experimental/impl/append.hpp +219 -0
  94. data/src/cxx_supportlib/vendor-modified/boost/asio/experimental/impl/as_single.hpp +14 -28
  95. data/src/cxx_supportlib/vendor-modified/boost/asio/experimental/impl/as_tuple.hpp +248 -0
  96. data/src/cxx_supportlib/vendor-modified/boost/asio/experimental/impl/deferred.hpp +106 -0
  97. data/src/cxx_supportlib/vendor-modified/boost/asio/experimental/impl/parallel_group.hpp +434 -0
  98. data/src/cxx_supportlib/vendor-modified/boost/asio/experimental/impl/prepend.hpp +219 -0
  99. data/src/cxx_supportlib/vendor-modified/boost/asio/experimental/impl/promise.hpp +100 -0
  100. data/src/cxx_supportlib/vendor-modified/boost/asio/experimental/parallel_group.hpp +217 -0
  101. data/src/cxx_supportlib/vendor-modified/boost/asio/experimental/prepend.hpp +73 -0
  102. data/src/cxx_supportlib/vendor-modified/boost/asio/experimental/promise.hpp +608 -0
  103. data/src/cxx_supportlib/vendor-modified/boost/asio/experimental/use_coro.hpp +284 -0
  104. data/src/cxx_supportlib/vendor-modified/boost/asio/impl/awaitable.hpp +344 -20
  105. data/src/cxx_supportlib/vendor-modified/boost/asio/impl/buffered_read_stream.hpp +23 -54
  106. data/src/cxx_supportlib/vendor-modified/boost/asio/impl/buffered_write_stream.hpp +23 -54
  107. data/src/cxx_supportlib/vendor-modified/boost/asio/impl/co_spawn.hpp +66 -18
  108. data/src/cxx_supportlib/vendor-modified/boost/asio/impl/compose.hpp +55 -5
  109. data/src/cxx_supportlib/vendor-modified/boost/asio/impl/connect.hpp +68 -80
  110. data/src/cxx_supportlib/vendor-modified/boost/asio/impl/defer.hpp +8 -4
  111. data/src/cxx_supportlib/vendor-modified/boost/asio/impl/dispatch.hpp +8 -4
  112. data/src/cxx_supportlib/vendor-modified/boost/asio/impl/handler_alloc_hook.ipp +3 -2
  113. data/src/cxx_supportlib/vendor-modified/boost/asio/impl/post.hpp +8 -4
  114. data/src/cxx_supportlib/vendor-modified/boost/asio/impl/read.hpp +98 -113
  115. data/src/cxx_supportlib/vendor-modified/boost/asio/impl/read_at.hpp +71 -82
  116. data/src/cxx_supportlib/vendor-modified/boost/asio/impl/read_until.hpp +210 -266
  117. data/src/cxx_supportlib/vendor-modified/boost/asio/impl/redirect_error.hpp +248 -30
  118. data/src/cxx_supportlib/vendor-modified/boost/asio/impl/spawn.hpp +11 -21
  119. data/src/cxx_supportlib/vendor-modified/boost/asio/impl/use_awaitable.hpp +15 -3
  120. data/src/cxx_supportlib/vendor-modified/boost/asio/impl/write.hpp +71 -87
  121. data/src/cxx_supportlib/vendor-modified/boost/asio/impl/write_at.hpp +46 -68
  122. data/src/cxx_supportlib/vendor-modified/boost/asio/io_context.hpp +4 -4
  123. data/src/cxx_supportlib/vendor-modified/boost/asio/local/detail/impl/endpoint.ipp +2 -7
  124. data/src/cxx_supportlib/vendor-modified/boost/asio/posix/basic_descriptor.hpp +10 -0
  125. data/src/cxx_supportlib/vendor-modified/boost/asio/posix/basic_stream_descriptor.hpp +23 -3
  126. data/src/cxx_supportlib/vendor-modified/boost/asio/prefer.hpp +21 -21
  127. data/src/cxx_supportlib/vendor-modified/boost/asio/query.hpp +9 -9
  128. data/src/cxx_supportlib/vendor-modified/boost/asio/read.hpp +88 -0
  129. data/src/cxx_supportlib/vendor-modified/boost/asio/read_at.hpp +44 -0
  130. data/src/cxx_supportlib/vendor-modified/boost/asio/read_until.hpp +132 -0
  131. data/src/cxx_supportlib/vendor-modified/boost/asio/require.hpp +21 -21
  132. data/src/cxx_supportlib/vendor-modified/boost/asio/require_concept.hpp +9 -9
  133. data/src/cxx_supportlib/vendor-modified/boost/asio/ssl/detail/buffered_handshake_op.hpp +1 -1
  134. data/src/cxx_supportlib/vendor-modified/boost/asio/ssl/detail/engine.hpp +5 -0
  135. data/src/cxx_supportlib/vendor-modified/boost/asio/ssl/detail/handshake_op.hpp +1 -1
  136. data/src/cxx_supportlib/vendor-modified/boost/asio/ssl/detail/impl/engine.ipp +14 -0
  137. data/src/cxx_supportlib/vendor-modified/boost/asio/ssl/detail/io.hpp +36 -27
  138. data/src/cxx_supportlib/vendor-modified/boost/asio/ssl/detail/read_op.hpp +1 -1
  139. data/src/cxx_supportlib/vendor-modified/boost/asio/ssl/detail/shutdown_op.hpp +2 -2
  140. data/src/cxx_supportlib/vendor-modified/boost/asio/ssl/detail/stream_core.hpp +37 -0
  141. data/src/cxx_supportlib/vendor-modified/boost/asio/ssl/detail/write_op.hpp +1 -1
  142. data/src/cxx_supportlib/vendor-modified/boost/asio/ssl/impl/context.ipp +14 -7
  143. data/src/cxx_supportlib/vendor-modified/boost/asio/ssl/stream.hpp +73 -1
  144. data/src/cxx_supportlib/vendor-modified/boost/asio/system_executor.hpp +4 -4
  145. data/src/cxx_supportlib/vendor-modified/boost/asio/this_coro.hpp +235 -0
  146. data/src/cxx_supportlib/vendor-modified/boost/asio/thread_pool.hpp +4 -4
  147. data/src/cxx_supportlib/vendor-modified/boost/asio/use_awaitable.hpp +7 -10
  148. data/src/cxx_supportlib/vendor-modified/boost/asio/version.hpp +1 -1
  149. data/src/cxx_supportlib/vendor-modified/boost/asio/windows/basic_random_access_handle.hpp +20 -0
  150. data/src/cxx_supportlib/vendor-modified/boost/asio/windows/basic_stream_handle.hpp +20 -0
  151. data/src/cxx_supportlib/vendor-modified/boost/asio/write.hpp +88 -0
  152. data/src/cxx_supportlib/vendor-modified/boost/asio/write_at.hpp +44 -0
  153. data/src/cxx_supportlib/vendor-modified/boost/asio.hpp +6 -0
  154. data/src/cxx_supportlib/vendor-modified/boost/atomic/atomic_ref.hpp +14 -1
  155. data/src/cxx_supportlib/vendor-modified/boost/atomic/detail/config.hpp +17 -13
  156. data/src/cxx_supportlib/vendor-modified/boost/atomic/ipc_atomic_ref.hpp +14 -1
  157. data/src/cxx_supportlib/vendor-modified/boost/config/assert_cxx03.hpp +2 -5
  158. data/src/cxx_supportlib/vendor-modified/boost/config/assert_cxx11.hpp +2 -5
  159. data/src/cxx_supportlib/vendor-modified/boost/config/assert_cxx14.hpp +2 -2
  160. data/src/cxx_supportlib/vendor-modified/boost/config/assert_cxx17.hpp +2 -2
  161. data/src/cxx_supportlib/vendor-modified/boost/config/assert_cxx20.hpp +56 -0
  162. data/src/cxx_supportlib/vendor-modified/boost/config/auto_link.hpp +1 -5
  163. data/src/cxx_supportlib/vendor-modified/boost/config/compiler/common_edg.hpp +31 -11
  164. data/src/cxx_supportlib/vendor-modified/boost/config/detail/cxx_composite.hpp +20 -4
  165. data/src/cxx_supportlib/vendor-modified/boost/config/detail/select_platform_config.hpp +5 -0
  166. data/src/cxx_supportlib/vendor-modified/boost/config/detail/suffix.hpp +81 -0
  167. data/src/cxx_supportlib/vendor-modified/boost/config/platform/bsd.hpp +5 -8
  168. data/src/cxx_supportlib/vendor-modified/boost/config/platform/wasm.hpp +17 -0
  169. data/src/cxx_supportlib/vendor-modified/boost/config/stdlib/dinkumware.hpp +26 -0
  170. data/src/cxx_supportlib/vendor-modified/boost/config/stdlib/libcpp.hpp +49 -0
  171. data/src/cxx_supportlib/vendor-modified/boost/config/stdlib/libstdcpp3.hpp +46 -4
  172. data/src/cxx_supportlib/vendor-modified/boost/container/adaptive_pool.hpp +2 -2
  173. data/src/cxx_supportlib/vendor-modified/boost/container/allocator.hpp +1 -1
  174. data/src/cxx_supportlib/vendor-modified/boost/container/detail/adaptive_node_pool.hpp +2 -2
  175. data/src/cxx_supportlib/vendor-modified/boost/container/detail/node_pool.hpp +2 -2
  176. data/src/cxx_supportlib/vendor-modified/boost/container/detail/std_fwd.hpp +3 -0
  177. data/src/cxx_supportlib/vendor-modified/boost/container/devector.hpp +2 -2
  178. data/src/cxx_supportlib/vendor-modified/boost/container/new_allocator.hpp +1 -1
  179. data/src/cxx_supportlib/vendor-modified/boost/container/node_allocator.hpp +1 -1
  180. data/src/cxx_supportlib/vendor-modified/boost/container/pmr/polymorphic_allocator.hpp +6 -6
  181. data/src/cxx_supportlib/vendor-modified/boost/container/static_vector.hpp +4 -4
  182. data/src/cxx_supportlib/vendor-modified/boost/container/throw_exception.hpp +45 -38
  183. data/src/cxx_supportlib/vendor-modified/boost/container/vector.hpp +24 -0
  184. data/src/cxx_supportlib/vendor-modified/boost/core/ignore_unused.hpp +32 -2
  185. data/src/cxx_supportlib/vendor-modified/boost/core/uncaught_exceptions.hpp +7 -7
  186. data/src/cxx_supportlib/vendor-modified/boost/date_time/compiler_config.hpp +0 -24
  187. data/src/cxx_supportlib/vendor-modified/boost/date_time/posix_time/time_parsers.hpp +4 -0
  188. data/src/cxx_supportlib/vendor-modified/boost/intrusive/any_hook.hpp +4 -4
  189. data/src/cxx_supportlib/vendor-modified/boost/intrusive/avl_set.hpp +83 -83
  190. data/src/cxx_supportlib/vendor-modified/boost/intrusive/avltree.hpp +43 -43
  191. data/src/cxx_supportlib/vendor-modified/boost/intrusive/avltree_algorithms.hpp +31 -31
  192. data/src/cxx_supportlib/vendor-modified/boost/intrusive/bs_set.hpp +85 -85
  193. data/src/cxx_supportlib/vendor-modified/boost/intrusive/bstree.hpp +68 -68
  194. data/src/cxx_supportlib/vendor-modified/boost/intrusive/bstree_algorithms.hpp +72 -62
  195. data/src/cxx_supportlib/vendor-modified/boost/intrusive/circular_list_algorithms.hpp +19 -20
  196. data/src/cxx_supportlib/vendor-modified/boost/intrusive/circular_slist_algorithms.hpp +19 -19
  197. data/src/cxx_supportlib/vendor-modified/boost/intrusive/derivation_value_traits.hpp +4 -4
  198. data/src/cxx_supportlib/vendor-modified/boost/intrusive/detail/any_node_and_algorithms.hpp +2 -2
  199. data/src/cxx_supportlib/vendor-modified/boost/intrusive/detail/bstree_algorithms_base.hpp +3 -3
  200. data/src/cxx_supportlib/vendor-modified/boost/intrusive/detail/common_slist_algorithms.hpp +5 -5
  201. data/src/cxx_supportlib/vendor-modified/boost/intrusive/detail/config_begin.hpp +1 -0
  202. data/src/cxx_supportlib/vendor-modified/boost/intrusive/detail/generic_hook.hpp +8 -8
  203. data/src/cxx_supportlib/vendor-modified/boost/intrusive/detail/hash_combine.hpp +2 -4
  204. data/src/cxx_supportlib/vendor-modified/boost/intrusive/detail/hashtable_node.hpp +1 -1
  205. data/src/cxx_supportlib/vendor-modified/boost/intrusive/detail/math.hpp +2 -50
  206. data/src/cxx_supportlib/vendor-modified/boost/intrusive/detail/node_cloner_disposer.hpp +1 -1
  207. data/src/cxx_supportlib/vendor-modified/boost/intrusive/hashtable.hpp +71 -70
  208. data/src/cxx_supportlib/vendor-modified/boost/intrusive/linear_slist_algorithms.hpp +15 -14
  209. data/src/cxx_supportlib/vendor-modified/boost/intrusive/list.hpp +84 -82
  210. data/src/cxx_supportlib/vendor-modified/boost/intrusive/list_hook.hpp +10 -10
  211. data/src/cxx_supportlib/vendor-modified/boost/intrusive/member_value_traits.hpp +4 -4
  212. data/src/cxx_supportlib/vendor-modified/boost/intrusive/parent_from_member.hpp +2 -2
  213. data/src/cxx_supportlib/vendor-modified/boost/intrusive/pointer_plus_bits.hpp +4 -4
  214. data/src/cxx_supportlib/vendor-modified/boost/intrusive/pointer_traits.hpp +18 -18
  215. data/src/cxx_supportlib/vendor-modified/boost/intrusive/rbtree.hpp +43 -43
  216. data/src/cxx_supportlib/vendor-modified/boost/intrusive/rbtree_algorithms.hpp +26 -26
  217. data/src/cxx_supportlib/vendor-modified/boost/intrusive/set.hpp +85 -85
  218. data/src/cxx_supportlib/vendor-modified/boost/intrusive/set_hook.hpp +12 -12
  219. data/src/cxx_supportlib/vendor-modified/boost/intrusive/sg_set.hpp +93 -93
  220. data/src/cxx_supportlib/vendor-modified/boost/intrusive/sgtree.hpp +51 -51
  221. data/src/cxx_supportlib/vendor-modified/boost/intrusive/sgtree_algorithms.hpp +24 -24
  222. data/src/cxx_supportlib/vendor-modified/boost/intrusive/slist.hpp +104 -104
  223. data/src/cxx_supportlib/vendor-modified/boost/intrusive/slist_hook.hpp +8 -6
  224. data/src/cxx_supportlib/vendor-modified/boost/intrusive/splay_set.hpp +91 -91
  225. data/src/cxx_supportlib/vendor-modified/boost/intrusive/splaytree.hpp +46 -46
  226. data/src/cxx_supportlib/vendor-modified/boost/intrusive/splaytree_algorithms.hpp +31 -31
  227. data/src/cxx_supportlib/vendor-modified/boost/intrusive/treap.hpp +51 -51
  228. data/src/cxx_supportlib/vendor-modified/boost/intrusive/treap_algorithms.hpp +18 -18
  229. data/src/cxx_supportlib/vendor-modified/boost/intrusive/treap_set.hpp +97 -97
  230. data/src/cxx_supportlib/vendor-modified/boost/intrusive/trivial_value_traits.hpp +6 -4
  231. data/src/cxx_supportlib/vendor-modified/boost/intrusive/unordered_set.hpp +63 -63
  232. data/src/cxx_supportlib/vendor-modified/boost/intrusive/unordered_set_hook.hpp +15 -15
  233. data/src/cxx_supportlib/vendor-modified/boost/lexical_cast/detail/converter_numeric.hpp +4 -1
  234. data/src/cxx_supportlib/vendor-modified/boost/move/detail/config_begin.hpp +1 -0
  235. data/src/cxx_supportlib/vendor-modified/boost/move/detail/iterator_traits.hpp +1 -0
  236. data/src/cxx_supportlib/vendor-modified/boost/move/detail/nsec_clock.hpp +1 -1
  237. data/src/cxx_supportlib/vendor-modified/boost/operators.hpp +2 -0
  238. data/src/cxx_supportlib/vendor-modified/boost/regex/concepts.hpp +1 -1
  239. data/src/cxx_supportlib/vendor-modified/boost/regex/v4/basic_regex_parser.hpp +3 -0
  240. data/src/cxx_supportlib/vendor-modified/boost/regex/v4/unicode_iterator.hpp +112 -31
  241. data/src/cxx_supportlib/vendor-modified/boost/regex/v5/basic_regex_parser.hpp +3 -0
  242. data/src/cxx_supportlib/vendor-modified/boost/regex/v5/mem_block_cache.hpp +4 -8
  243. data/src/cxx_supportlib/vendor-modified/boost/regex/v5/unicode_iterator.hpp +0 -2
  244. data/src/cxx_supportlib/vendor-modified/boost/regex/v5/w32_regex_traits.hpp +6 -2
  245. data/src/cxx_supportlib/vendor-modified/boost/smart_ptr/detail/shared_count.hpp +1 -1
  246. data/src/cxx_supportlib/vendor-modified/boost/smart_ptr/detail/sp_counted_impl.hpp +22 -2
  247. data/src/cxx_supportlib/vendor-modified/boost/smart_ptr/shared_ptr.hpp +59 -1
  248. data/src/cxx_supportlib/vendor-modified/boost/system/detail/config.hpp +9 -11
  249. data/src/cxx_supportlib/vendor-modified/boost/system/detail/error_category.hpp +27 -21
  250. data/src/cxx_supportlib/vendor-modified/boost/system/detail/error_category_impl.hpp +34 -3
  251. data/src/cxx_supportlib/vendor-modified/boost/system/detail/error_code.hpp +378 -36
  252. data/src/cxx_supportlib/vendor-modified/boost/system/detail/error_condition.hpp +97 -21
  253. data/src/cxx_supportlib/vendor-modified/boost/system/detail/interop_category.hpp +107 -0
  254. data/src/cxx_supportlib/vendor-modified/boost/system/detail/is_same.hpp +33 -0
  255. data/src/cxx_supportlib/vendor-modified/boost/system/detail/snprintf.hpp +70 -0
  256. data/src/cxx_supportlib/vendor-modified/boost/system/detail/{to_std_category.hpp → std_category.hpp} +5 -55
  257. data/src/cxx_supportlib/vendor-modified/boost/system/detail/system_category_impl.hpp +2 -12
  258. data/src/cxx_supportlib/vendor-modified/boost/system/error_code.hpp +0 -33
  259. data/src/cxx_supportlib/vendor-modified/boost/utility/detail/result_of_variadic.hpp +190 -0
  260. data/src/cxx_supportlib/vendor-modified/boost/utility/result_of.hpp +20 -9
  261. data/src/cxx_supportlib/vendor-modified/boost/utility/string_view.hpp +3 -1
  262. data/src/cxx_supportlib/vendor-modified/boost/version.hpp +2 -2
  263. data/src/nginx_module/ConfigGeneral/AutoGeneratedDefinitions.c +8 -0
  264. data/src/nginx_module/ConfigGeneral/AutoGeneratedManifestDefaultsInitialization.c +6 -0
  265. data/src/nginx_module/ConfigGeneral/AutoGeneratedSetterFuncs.c +12 -0
  266. data/src/nginx_module/LocationConfig/AutoGeneratedCreateFunction.c +5 -0
  267. data/src/nginx_module/LocationConfig/AutoGeneratedHeaderSerialization.c +21 -0
  268. data/src/nginx_module/LocationConfig/AutoGeneratedManifestGeneration.c +13 -0
  269. data/src/nginx_module/LocationConfig/AutoGeneratedMergeFunction.c +3 -0
  270. data/src/nginx_module/LocationConfig/AutoGeneratedStruct.h +4 -0
  271. data/src/ruby_supportlib/phusion_passenger/admin_tools/instance_registry.rb +3 -2
  272. data/src/ruby_supportlib/phusion_passenger/loader_shared_helpers.rb +8 -1
  273. data/src/ruby_supportlib/phusion_passenger/nginx/config_options.rb +6 -0
  274. data/src/ruby_supportlib/phusion_passenger/packaging.rb +1 -0
  275. data/src/ruby_supportlib/phusion_passenger/platform_info/openssl.rb +1 -1
  276. data/src/ruby_supportlib/phusion_passenger/platform_info/operating_system.rb +8 -0
  277. data/src/ruby_supportlib/phusion_passenger/request_handler.rb +4 -1
  278. data/src/ruby_supportlib/phusion_passenger.rb +1 -1
  279. metadata +39 -4
  280. data/src/cxx_supportlib/vendor-modified/boost/system/detail/is_generic_value.hpp +0 -125
@@ -0,0 +1,160 @@
1
+ //
2
+ // experimental/detail/completion_handler_erasure.hpp
3
+ // ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
4
+ //
5
+ // Copyright (c) 2021 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_COMPLETION_HANDLER_ERASURE_HPP
13
+ #define BOOST_ASIO_EXPERIMENTAL_DETAIL_COMPLETION_HANDLER_ERASURE_HPP
14
+
15
+ #include <boost/asio/associated_allocator.hpp>
16
+ #include <boost/asio/dispatch.hpp>
17
+
18
+ namespace boost {
19
+ namespace asio {
20
+
21
+ class any_io_executor;
22
+
23
+ namespace experimental {
24
+ namespace detail {
25
+
26
+ template<typename Signature, typename Executor>
27
+ struct completion_handler_erasure_base;
28
+
29
+ template<typename Func, typename Signature, typename Executor>
30
+ struct completion_handler_erasure_impl;
31
+
32
+ template<typename Return, typename ... Args, typename Executor>
33
+ struct completion_handler_erasure_base<Return(Args...), Executor>
34
+ {
35
+ Executor executor;
36
+
37
+ completion_handler_erasure_base(Executor&& executor)
38
+ : executor(std::move(executor))
39
+ {
40
+ }
41
+
42
+ virtual Return call(Args ...args) = 0;
43
+ virtual ~completion_handler_erasure_base() = default;
44
+ };
45
+
46
+ template<typename Func, typename Return, typename ... Args, typename Executor>
47
+ struct completion_handler_erasure_impl<Func, Return(Args...), Executor> final
48
+ : completion_handler_erasure_base<Return(Args...), Executor>
49
+ {
50
+ completion_handler_erasure_impl(Executor&& exec, Func&& func)
51
+ : completion_handler_erasure_base<Return(Args...), Executor>(
52
+ std::move(exec)), func(std::move(func))
53
+ {
54
+ }
55
+
56
+ virtual Return call(Args ...args) override
57
+ {
58
+ std::move(func)(std::move(args)...);
59
+ }
60
+
61
+ Func func;
62
+ };
63
+
64
+ template<typename Signature, typename Executor = any_io_executor>
65
+ struct completion_handler_erasure;
66
+
67
+ template<typename Return, typename ... Args, typename Executor>
68
+ struct completion_handler_erasure<Return(Args...), Executor>
69
+ {
70
+ struct deleter_t
71
+ {
72
+ using allocator_base = typename associated_allocator<Executor>::type;
73
+ using allocator_type =
74
+ typename std::allocator_traits<allocator_base>::template rebind_alloc<
75
+ completion_handler_erasure_base<Return(Args...), Executor>>;
76
+
77
+ allocator_type allocator;
78
+ std::size_t size;
79
+
80
+ template<typename Func>
81
+ static std::unique_ptr<
82
+ completion_handler_erasure_base<Return(Args...), Executor>, deleter_t>
83
+ make(Executor exec, Func&& func)
84
+ {
85
+ using type = completion_handler_erasure_impl<
86
+ std::remove_reference_t<Func>, Return(Args...), Executor>;
87
+ using alloc_type = typename std::allocator_traits<
88
+ allocator_base>::template rebind_alloc<type>;
89
+ auto alloc = alloc_type(get_associated_allocator(exec));
90
+ auto size = sizeof(type);
91
+ auto p = std::allocator_traits<alloc_type>::allocate(alloc, size);
92
+ auto res = std::unique_ptr<type, deleter_t>(
93
+ p, deleter_t{allocator_type(alloc), size});
94
+ std::allocator_traits<alloc_type>::construct(alloc,
95
+ p, std::move(exec), std::forward<Func>(func));
96
+ return res;
97
+ }
98
+
99
+ void operator()(
100
+ completion_handler_erasure_base<Return(Args...), Executor> * p)
101
+ {
102
+ std::allocator_traits<allocator_type>::destroy(allocator, p);
103
+ std::allocator_traits<allocator_type>::deallocate(allocator, p, size);
104
+ }
105
+ };
106
+
107
+ completion_handler_erasure(const completion_handler_erasure&) = delete;
108
+ completion_handler_erasure(completion_handler_erasure&&) = default;
109
+ completion_handler_erasure& operator=(
110
+ const completion_handler_erasure&) = delete;
111
+ completion_handler_erasure& operator=(
112
+ completion_handler_erasure&&) = default;
113
+
114
+ constexpr completion_handler_erasure() = default;
115
+
116
+ constexpr completion_handler_erasure(nullptr_t)
117
+ : completion_handler_erasure()
118
+ {
119
+ }
120
+
121
+ template<typename Func>
122
+ completion_handler_erasure(Executor exec, Func&& func)
123
+ : impl_(deleter_t::make(std::move(exec), std::forward<Func>(func)))
124
+ {
125
+ }
126
+
127
+ ~completion_handler_erasure()
128
+ {
129
+ if (auto f = std::exchange(impl_, nullptr); f != nullptr)
130
+ {
131
+ boost::asio::dispatch(f->executor,
132
+ [f = std::move(f)]() mutable
133
+ {
134
+ std::move(f)->call(Args{}...);
135
+ });
136
+ }
137
+ }
138
+
139
+ Return operator()(Args ... args)
140
+ {
141
+ if (auto f = std::exchange(impl_, nullptr); f != nullptr)
142
+ f->call(std::move(args)...);
143
+ }
144
+
145
+ constexpr bool operator==(nullptr_t) const noexcept {return impl_ == nullptr;}
146
+ constexpr bool operator!=(nullptr_t) const noexcept {return impl_ != nullptr;}
147
+ constexpr bool operator!() const noexcept {return impl_ == nullptr;}
148
+
149
+ private:
150
+ std::unique_ptr<
151
+ completion_handler_erasure_base<Return(Args...), Executor>, deleter_t>
152
+ impl_;
153
+ };
154
+
155
+ } // namespace detail
156
+ } // namespace experimental
157
+ } // namespace asio
158
+ } // namespace boost
159
+
160
+ #endif // BOOST_ASIO_EXPERIMENTAL_DETAIL_COMPLETION_HANDLER_ERASURE_HPP
@@ -0,0 +1,120 @@
1
+ //
2
+ // experimental/detail/coro_promise_allocator.hpp
3
+ // ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
4
+ //
5
+ // Copyright (c) 2021 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_PROMISE_ALLOCATOR_HPP
13
+ #define BOOST_ASIO_EXPERIMENTAL_DETAIL_CORO_PROMISE_ALLOCATOR_HPP
14
+
15
+ #include <boost/asio/detail/config.hpp>
16
+ #include <boost/asio/experimental/detail/coro_traits.hpp>
17
+
18
+ namespace boost {
19
+ namespace asio {
20
+ namespace experimental {
21
+ namespace detail {
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
29
+ {
30
+ using allocator_type = Allocator;
31
+
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
+ }
44
+
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
+
52
+ void operator delete(void* raw, std::size_t size )
53
+ {
54
+ auto * alloc_p = static_cast<allocator_type*>(raw);
55
+
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
+
63
+ template <typename Coroutine, typename Executor>
64
+ struct coro_promise_allocator<Coroutine,
65
+ Executor, std::allocator<std::byte>, false>
66
+ {
67
+
68
+ };
69
+
70
+ template <typename Coroutine, typename Executor, typename Allocator>
71
+ struct coro_promise_allocator<Coroutine, Executor, Allocator, true>
72
+ {
73
+ using allocator_type = Allocator;
74
+
75
+ template <typename... Args>
76
+ void* operator new(const std::size_t size,
77
+ Executor executor, Args&&...) noexcept
78
+ {
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);
89
+ }
90
+
91
+ template <execution_context Context, typename... Args>
92
+ void* operator new(const std::size_t size,
93
+ Context&& ctx, Args&&... args) noexcept
94
+ {
95
+ return coro_promise_allocator::operator new(size,
96
+ ctx.get_executor(), std::forward<Args>(args)...);
97
+ }
98
+
99
+ void operator delete(void* raw, std::size_t size) noexcept
100
+ {
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
+ }
108
+
109
+ static auto get_return_object_on_allocation_failure() noexcept -> Coroutine
110
+ {
111
+ return Coroutine{};
112
+ }
113
+ };
114
+
115
+ } // namespace detail
116
+ } // namespace experimental
117
+ } // namespace asio
118
+ } // namespace boost
119
+
120
+ #endif // BOOST_ASIO_EXPERIMENTAL_DETAIL_CORO_PROMISE_ALLOCATOR_HPP
@@ -0,0 +1,185 @@
1
+ //
2
+ // experimental/detail/coro_traits.hpp
3
+ // ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
4
+ //
5
+ // Copyright (c) 2021 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_TRAITS_HPP
13
+ #define BOOST_ASIO_EXPERIMENTAL_DETAIL_CORO_TRAITS_HPP
14
+
15
+ #include <boost/asio/detail/config.hpp>
16
+ #include <optional>
17
+ #include <variant>
18
+ #include <boost/asio/any_io_executor.hpp>
19
+
20
+ namespace boost {
21
+ namespace asio {
22
+ namespace experimental {
23
+ namespace detail {
24
+
25
+ template <class From, class To>
26
+ concept convertible_to = std::is_convertible_v<From, To> &&
27
+ requires(std::add_rvalue_reference_t<From> (&f)()) {static_cast<To>(f()); };
28
+
29
+ template <typename T>
30
+ concept decays_to_executor = execution::executor<std::decay_t<T>>;
31
+
32
+ template <typename T>
33
+ concept execution_context = requires (T& t)
34
+ {
35
+ {t.get_executor()} -> decays_to_executor;
36
+ };
37
+
38
+ template <typename Yield, typename Return>
39
+ struct coro_result
40
+ {
41
+ using type = std::variant<Yield, Return>;
42
+ };
43
+
44
+ template <typename Yield>
45
+ struct coro_result<Yield, void>
46
+ {
47
+ using type = std::optional<Yield>;
48
+ };
49
+
50
+ template <typename Return>
51
+ struct coro_result<void, Return>
52
+ {
53
+ using type = Return;
54
+ };
55
+
56
+ template <typename YieldReturn>
57
+ struct coro_result<YieldReturn, YieldReturn>
58
+ {
59
+ using type = YieldReturn;
60
+ };
61
+
62
+ template <>
63
+ struct coro_result<void, void>
64
+ {
65
+ using type = void;
66
+ };
67
+
68
+ template <typename Yield, typename Return>
69
+ using coro_result_t = typename coro_result<Yield, Return>::type;
70
+
71
+ template <typename Result, bool IsNoexcept>
72
+ struct coro_handler;
73
+
74
+ template <>
75
+ struct coro_handler<void, false>
76
+ {
77
+ using type = void(std::exception_ptr);
78
+ };
79
+
80
+ template <>
81
+ struct coro_handler<void, true>
82
+ {
83
+ using type = void();
84
+ };
85
+
86
+ template <typename T>
87
+ struct coro_handler<T, false>
88
+ {
89
+ using type = void(std::exception_ptr, T);
90
+ };
91
+
92
+ template <typename T>
93
+ struct coro_handler<T, true>
94
+ {
95
+ using type = void(T);
96
+ };
97
+
98
+ template <typename Result, bool IsNoexcept>
99
+ using coro_handler_t = typename coro_handler<Result, IsNoexcept>::type;
100
+
101
+ template <typename Yield, typename Return, typename Executor>
102
+ struct coro_traits
103
+ {
104
+ using input_type = void;
105
+ using yield_type = Yield;
106
+ using return_type = Return;
107
+ using result_type = coro_result_t<yield_type, return_type>;
108
+ using signature_type = result_type();
109
+ constexpr static bool is_noexcept = false;
110
+ using error_type = std::conditional_t<is_noexcept, void, std::exception_ptr>;
111
+ using completion_handler = coro_handler_t<result_type, is_noexcept>;
112
+ };
113
+
114
+ template <typename T, typename Return, typename Executor>
115
+ struct coro_traits<T(), Return, Executor>
116
+ {
117
+ using input_type = void;
118
+ using yield_type = T;
119
+ using return_type = Return;
120
+ using result_type = coro_result_t<yield_type, return_type>;
121
+ using signature_type = result_type();
122
+ constexpr static bool is_noexcept = false;
123
+ using error_type = std::conditional_t<is_noexcept, void, std::exception_ptr>;
124
+ using completion_handler = coro_handler_t<result_type, is_noexcept>;
125
+ };
126
+
127
+ template <typename T, typename Return, typename Executor>
128
+ struct coro_traits<T() noexcept, Return, Executor>
129
+ {
130
+ using input_type = void;
131
+ using yield_type = T;
132
+ using return_type = Return;
133
+ using result_type = coro_result_t<yield_type, return_type>;
134
+ using signature_type = result_type();
135
+ constexpr static bool is_noexcept = true;
136
+ using error_type = std::conditional_t<is_noexcept, void, std::exception_ptr>;
137
+ using completion_handler = coro_handler_t<result_type, is_noexcept>;
138
+ };
139
+
140
+ template <typename T, typename U, typename Return, typename Executor>
141
+ struct coro_traits<T(U), Return, Executor>
142
+ {
143
+ using input_type = U;
144
+ using yield_type = T;
145
+ using return_type = Return;
146
+ using result_type = coro_result_t<yield_type, return_type>;
147
+ using signature_type = result_type(input_type);
148
+ constexpr static bool is_noexcept = false;
149
+ using error_type = std::conditional_t<is_noexcept, void, std::exception_ptr>;
150
+ using completion_handler = coro_handler_t<result_type, is_noexcept>;
151
+ };
152
+
153
+ template <typename T, typename U, typename Return, typename Executor>
154
+ struct coro_traits<T(U) noexcept, Return, Executor>
155
+ {
156
+ using input_type = U;
157
+ using yield_type = T;
158
+ using return_type = Return;
159
+ using result_type = coro_result_t<yield_type, return_type>;
160
+ using signature_type = result_type(input_type);
161
+ constexpr static bool is_noexcept = true;
162
+ using error_type = std::conditional_t<is_noexcept, void, std::exception_ptr>;
163
+ using completion_handler = coro_handler_t<result_type, is_noexcept>;
164
+ };
165
+
166
+
167
+ template <typename Executor>
168
+ struct coro_traits<void() noexcept, void, Executor>
169
+ {
170
+ using input_type = void;
171
+ using yield_type = void;
172
+ using return_type = void;
173
+ using result_type = coro_result_t<yield_type, return_type>;
174
+ using signature_type = result_type(input_type);
175
+ constexpr static bool is_noexcept = true;
176
+ using error_type = std::conditional_t<is_noexcept, void, std::exception_ptr>;
177
+ using completion_handler = coro_handler_t<result_type, is_noexcept>;
178
+ };
179
+
180
+ } // namespace detail
181
+ } // namespace experimental
182
+ } // namespace asio
183
+ } // namespace boost
184
+
185
+ #endif // BOOST_ASIO_EXPERIMENTAL_DETAIL_CORO_TRAITS_HPP
@@ -0,0 +1,181 @@
1
+ //
2
+ // experimental/detail/partial_promise.hpp
3
+ // ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
4
+ //
5
+ // Copyright (c) 2021 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_PARTIAL_PROMISE_HPP
13
+ #define BOOST_ASIO_EXPERIMENTAL_DETAIL_PARTIAL_PROMISE_HPP
14
+
15
+ #include <boost/asio/detail/config.hpp>
16
+ #include <boost/asio/experimental/detail/coro_traits.hpp>
17
+ #include <boost/asio/awaitable.hpp>
18
+ #include <iostream>
19
+
20
+ #if defined(BOOST_ASIO_HAS_STD_COROUTINE)
21
+ # include <coroutine>
22
+ #else // defined(BOOST_ASIO_HAS_STD_COROUTINE)
23
+ # include <experimental/coroutine>
24
+ #endif // defined(BOOST_ASIO_HAS_STD_COROUTINE)
25
+
26
+ namespace boost {
27
+ namespace asio {
28
+ namespace experimental {
29
+ namespace detail {
30
+
31
+ #if defined(BOOST_ASIO_HAS_STD_COROUTINE)
32
+
33
+ using std::coroutine_handle;
34
+ using std::coroutine_traits;
35
+ using std::suspend_never;
36
+ using std::suspend_always;
37
+ using std::noop_coroutine;
38
+
39
+ #else // defined(BOOST_ASIO_HAS_STD_COROUTINE)
40
+
41
+ using std::experimental::coroutine_handle;
42
+ using std::experimental::coroutine_traits;
43
+ using std::experimental::suspend_never;
44
+ using std::experimental::suspend_always;
45
+ using std::experimental::noop_coroutine;
46
+
47
+ #endif // defined(BOOST_ASIO_HAS_STD_COROUTINE)
48
+
49
+ struct partial_promise
50
+ {
51
+ auto initial_suspend() noexcept
52
+ {
53
+ return boost::asio::detail::suspend_always{};
54
+ }
55
+
56
+ auto final_suspend() noexcept
57
+ {
58
+ struct awaitable_t
59
+ {
60
+ partial_promise *p;
61
+
62
+ constexpr bool await_ready() noexcept { return true; }
63
+
64
+ auto await_suspend(boost::asio::detail::coroutine_handle<>) noexcept
65
+ {
66
+ p->get_return_object().destroy();
67
+ }
68
+
69
+ constexpr void await_resume() noexcept {}
70
+ };
71
+
72
+ return awaitable_t{this};
73
+ }
74
+
75
+ void return_void() {}
76
+
77
+ coroutine_handle<partial_promise> get_return_object()
78
+ {
79
+ return coroutine_handle<partial_promise>::from_promise(*this);
80
+ }
81
+
82
+ void unhandled_exception()
83
+ {
84
+ assert(false);
85
+ }
86
+ };
87
+
88
+ } // namespace detail
89
+ } // namespace experimental
90
+ } // namespace asio
91
+ } // namespace boost
92
+
93
+ #if defined(BOOST_ASIO_HAS_STD_COROUTINE)
94
+
95
+ namespace std {
96
+
97
+ template<typename ... Args>
98
+ struct coroutine_traits<
99
+ coroutine_handle<boost::asio::experimental::detail::partial_promise>,
100
+ Args...>
101
+ {
102
+ using promise_type = boost::asio::experimental::detail::partial_promise;
103
+ };
104
+
105
+ } // namespace std
106
+
107
+ #else // defined(BOOST_ASIO_HAS_STD_COROUTINE)
108
+
109
+ namespace std { namespace experimental {
110
+
111
+ template<typename... Args>
112
+ struct coroutine_traits<
113
+ coroutine_handle<boost::asio::experimental::detail::partial_promise>,
114
+ Args...>
115
+ {
116
+ using promise_type = boost::asio::experimental::detail::partial_promise;
117
+ };
118
+
119
+ }} // namespace std::experimental
120
+
121
+ #endif // defined(BOOST_ASIO_HAS_STD_COROUTINE)
122
+
123
+ namespace boost {
124
+ namespace asio {
125
+ namespace experimental {
126
+ namespace detail {
127
+
128
+ template<typename CompletionToken>
129
+ auto post_coroutine(CompletionToken token) noexcept
130
+ -> coroutine_handle<partial_promise>
131
+ {
132
+ post(std::move(token));
133
+ co_return;
134
+ }
135
+
136
+ template<execution::executor Executor, typename CompletionToken>
137
+ auto post_coroutine(Executor exec, CompletionToken token) noexcept
138
+ -> coroutine_handle<partial_promise>
139
+ {
140
+ post(exec, std::move(token));
141
+ co_return;
142
+ }
143
+
144
+ template<execution_context Context, typename CompletionToken>
145
+ auto post_coroutine(Context &ctx, CompletionToken token) noexcept
146
+ -> coroutine_handle<partial_promise>
147
+ {
148
+ post(ctx, std::move(token));
149
+ co_return;
150
+ }
151
+
152
+ template<typename CompletionToken>
153
+ auto dispatch_coroutine(CompletionToken token) noexcept
154
+ -> coroutine_handle<partial_promise>
155
+ {
156
+ dispatch(std::move(token));
157
+ co_return;
158
+ }
159
+
160
+ template<execution::executor Executor, typename CompletionToken>
161
+ auto dispatch_coroutine(Executor exec, CompletionToken token) noexcept
162
+ -> coroutine_handle<partial_promise>
163
+ {
164
+ dispatch(exec, std::move(token));
165
+ co_return;
166
+ }
167
+
168
+ template<execution_context Context, typename CompletionToken>
169
+ auto dispatch_coroutine(Context &ctx, CompletionToken token) noexcept
170
+ -> coroutine_handle<partial_promise>
171
+ {
172
+ dispatch(ctx, std::move(token));
173
+ co_return;
174
+ }
175
+
176
+ } // namespace detail
177
+ } // namespace experimental
178
+ } // namespace asio
179
+ } // namespace boost
180
+
181
+ #endif // BOOST_ASIO_EXPERIMENTAL_DETAIL_PARTIAL_PROMISE_HPP