passenger 6.0.23 → 6.0.24

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.

Potentially problematic release.


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

Files changed (305) hide show
  1. checksums.yaml +4 -4
  2. data/CHANGELOG +26 -1
  3. data/Rakefile +7 -3
  4. data/bin/passenger-install-apache2-module +5 -0
  5. data/bin/passenger-install-nginx-module +17 -2
  6. data/build/apache2.rb +1 -1
  7. data/build/basics.rb +10 -4
  8. data/build/cxx_tests.rb +18 -7
  9. data/build/support/cxx_dependency_map.rb +40 -6
  10. data/build/test_basics.rb +4 -12
  11. data/package.json +1 -1
  12. data/passenger.gemspec +1 -1
  13. data/src/agent/Core/ApplicationPool/Group/InitializationAndShutdown.cpp +8 -0
  14. data/src/agent/Core/ApplicationPool/Group/InternalUtils.cpp +10 -2
  15. data/src/agent/Core/ApplicationPool/Group/LifetimeAndBasics.cpp +8 -0
  16. data/src/agent/Core/ApplicationPool/Group/Miscellaneous.cpp +9 -0
  17. data/src/agent/Core/ApplicationPool/Group/OutOfBandWork.cpp +9 -0
  18. data/src/agent/Core/ApplicationPool/Group/ProcessListManagement.cpp +63 -50
  19. data/src/agent/Core/ApplicationPool/Group/SessionManagement.cpp +19 -9
  20. data/src/agent/Core/ApplicationPool/Group/SpawningAndRestarting.cpp +8 -0
  21. data/src/agent/Core/ApplicationPool/Group/StateInspection.cpp +8 -0
  22. data/src/agent/Core/ApplicationPool/Group/Verification.cpp +8 -0
  23. data/src/agent/Core/ApplicationPool/Group.h +15 -5
  24. data/src/agent/Core/ApplicationPool/Pool/AnalyticsCollection.cpp +5 -0
  25. data/src/agent/Core/ApplicationPool/Pool/GarbageCollection.cpp +5 -0
  26. data/src/agent/Core/ApplicationPool/Pool/GeneralUtils.cpp +5 -0
  27. data/src/agent/Core/ApplicationPool/Pool/GroupUtils.cpp +5 -0
  28. data/src/agent/Core/ApplicationPool/Pool/InitializationAndShutdown.cpp +5 -0
  29. data/src/agent/Core/ApplicationPool/Pool/Miscellaneous.cpp +5 -0
  30. data/src/agent/Core/ApplicationPool/Pool/ProcessUtils.cpp +5 -0
  31. data/src/agent/Core/ApplicationPool/Pool/StateInspection.cpp +11 -1
  32. data/src/agent/Core/ApplicationPool/Pool.h +0 -2
  33. data/src/agent/Core/ApplicationPool/Process.h +22 -6
  34. data/src/agent/Core/ApplicationPool/Session.h +6 -1
  35. data/src/agent/Core/Config.h +7 -3
  36. data/src/agent/Core/Controller/Config.h +1 -1
  37. data/src/agent/Core/CoreMain.cpp +10 -17
  38. data/src/agent/Core/SpawningKit/Handshake/Prepare.h +1 -53
  39. data/src/agent/Core/SpawningKit/Handshake/Session.h +3 -0
  40. data/src/agent/Core/SpawningKit/Handshake/WorkDir.h +5 -2
  41. data/src/agent/Core/SpawningKit/SmartSpawner.h +6 -2
  42. data/src/agent/Core/SpawningKit/Spawner.h +4 -0
  43. data/src/agent/Shared/Fundamentals/AbortHandler.cpp +88 -9
  44. data/src/agent/Shared/Fundamentals/AbortHandler.h +2 -0
  45. data/src/agent/Shared/Fundamentals/Initialization.cpp +9 -3
  46. data/src/agent/Shared/Fundamentals/Initialization.h +3 -3
  47. data/src/agent/SpawnEnvSetupper/SpawnEnvSetupperMain.cpp +6 -7
  48. data/src/agent/Watchdog/Config.h +1 -1
  49. data/src/agent/Watchdog/WatchdogMain.cpp +4 -7
  50. data/src/apache2_module/ConfigGeneral/ManifestGeneration.h +5 -3
  51. data/src/apache2_module/DirConfig/AutoGeneratedStruct.h +3 -0
  52. data/src/apache2_module/DirConfig/AutoGeneratedStruct.h.cxxcodebuilder +3 -0
  53. data/src/apache2_module/ServerConfig/AutoGeneratedStruct.h +2 -1
  54. data/src/apache2_module/ServerConfig/AutoGeneratedStruct.h.cxxcodebuilder +2 -1
  55. data/src/cxx_supportlib/Constants.h +1 -1
  56. data/src/cxx_supportlib/DataStructures/StringMap.h +0 -1
  57. data/src/cxx_supportlib/FileTools/PathManip.cpp +1 -1
  58. data/src/cxx_supportlib/SafeLibev.h +1 -3
  59. data/src/cxx_supportlib/ServerKit/Hooks.h +2 -2
  60. data/src/cxx_supportlib/ServerKit/HttpHeaderParser.h +0 -1
  61. data/src/cxx_supportlib/ServerKit/HttpServer.h +15 -10
  62. data/src/cxx_supportlib/ServerKit/Server.h +0 -6
  63. data/src/cxx_supportlib/Utils/AsyncSignalSafeUtils.h +2 -0
  64. data/src/cxx_supportlib/Utils/SpeedMeter.h +0 -3
  65. data/src/cxx_supportlib/oxt/implementation.cpp +11 -0
  66. data/src/cxx_supportlib/oxt/system_calls.cpp +10 -3
  67. data/src/cxx_supportlib/oxt/thread.hpp +1 -1
  68. data/src/cxx_supportlib/vendor-modified/boost/asio/as_tuple.hpp +35 -9
  69. data/src/cxx_supportlib/vendor-modified/boost/asio/associated_immediate_executor.hpp +3 -2
  70. data/src/cxx_supportlib/vendor-modified/boost/asio/associator.hpp +1 -1
  71. data/src/cxx_supportlib/vendor-modified/boost/asio/async_result.hpp +74 -68
  72. data/src/cxx_supportlib/vendor-modified/boost/asio/basic_datagram_socket.hpp +11 -11
  73. data/src/cxx_supportlib/vendor-modified/boost/asio/basic_deadline_timer.hpp +2 -2
  74. data/src/cxx_supportlib/vendor-modified/boost/asio/basic_random_access_file.hpp +2 -2
  75. data/src/cxx_supportlib/vendor-modified/boost/asio/basic_raw_socket.hpp +10 -10
  76. data/src/cxx_supportlib/vendor-modified/boost/asio/basic_readable_pipe.hpp +1 -1
  77. data/src/cxx_supportlib/vendor-modified/boost/asio/basic_seq_packet_socket.hpp +3 -3
  78. data/src/cxx_supportlib/vendor-modified/boost/asio/basic_serial_port.hpp +2 -2
  79. data/src/cxx_supportlib/vendor-modified/boost/asio/basic_signal_set.hpp +1 -1
  80. data/src/cxx_supportlib/vendor-modified/boost/asio/basic_socket.hpp +2 -2
  81. data/src/cxx_supportlib/vendor-modified/boost/asio/basic_socket_acceptor.hpp +9 -9
  82. data/src/cxx_supportlib/vendor-modified/boost/asio/basic_stream_file.hpp +2 -2
  83. data/src/cxx_supportlib/vendor-modified/boost/asio/basic_stream_socket.hpp +6 -6
  84. data/src/cxx_supportlib/vendor-modified/boost/asio/basic_waitable_timer.hpp +2 -2
  85. data/src/cxx_supportlib/vendor-modified/boost/asio/basic_writable_pipe.hpp +1 -1
  86. data/src/cxx_supportlib/vendor-modified/boost/asio/bind_allocator.hpp +88 -22
  87. data/src/cxx_supportlib/vendor-modified/boost/asio/bind_cancellation_slot.hpp +91 -22
  88. data/src/cxx_supportlib/vendor-modified/boost/asio/bind_executor.hpp +105 -23
  89. data/src/cxx_supportlib/vendor-modified/boost/asio/bind_immediate_executor.hpp +90 -23
  90. data/src/cxx_supportlib/vendor-modified/boost/asio/buffer.hpp +2 -2
  91. data/src/cxx_supportlib/vendor-modified/boost/asio/buffer_registration.hpp +1 -1
  92. data/src/cxx_supportlib/vendor-modified/boost/asio/cancel_after.hpp +303 -0
  93. data/src/cxx_supportlib/vendor-modified/boost/asio/cancel_at.hpp +296 -0
  94. data/src/cxx_supportlib/vendor-modified/boost/asio/{experimental/impl/co_composed.hpp → co_composed.hpp} +208 -61
  95. data/src/cxx_supportlib/vendor-modified/boost/asio/completion_condition.hpp +49 -0
  96. data/src/cxx_supportlib/vendor-modified/boost/asio/compose.hpp +10 -201
  97. data/src/cxx_supportlib/vendor-modified/boost/asio/composed.hpp +415 -0
  98. data/src/cxx_supportlib/vendor-modified/boost/asio/connect.hpp +214 -48
  99. data/src/cxx_supportlib/vendor-modified/boost/asio/coroutine.hpp +3 -4
  100. data/src/cxx_supportlib/vendor-modified/boost/asio/default_completion_token.hpp +91 -0
  101. data/src/cxx_supportlib/vendor-modified/boost/asio/deferred.hpp +9 -5
  102. data/src/cxx_supportlib/vendor-modified/boost/asio/detached.hpp +2 -2
  103. data/src/cxx_supportlib/vendor-modified/boost/asio/detail/buffered_stream_storage.hpp +1 -1
  104. data/src/cxx_supportlib/vendor-modified/boost/asio/{experimental/detail/channel_message.hpp → detail/completion_message.hpp} +14 -16
  105. data/src/cxx_supportlib/vendor-modified/boost/asio/{experimental/detail/channel_payload.hpp → detail/completion_payload.hpp} +30 -32
  106. data/src/cxx_supportlib/vendor-modified/boost/asio/{experimental/detail/channel_handler.hpp → detail/completion_payload_handler.hpp} +15 -13
  107. data/src/cxx_supportlib/vendor-modified/boost/asio/detail/config.hpp +26 -32
  108. data/src/cxx_supportlib/vendor-modified/boost/asio/detail/deadline_timer_service.hpp +5 -1
  109. data/src/cxx_supportlib/vendor-modified/boost/asio/detail/handler_alloc_helpers.hpp +14 -118
  110. data/src/cxx_supportlib/vendor-modified/boost/asio/detail/impl/descriptor_ops.ipp +36 -33
  111. data/src/cxx_supportlib/vendor-modified/boost/asio/detail/impl/dev_poll_reactor.ipp +1 -1
  112. data/src/cxx_supportlib/vendor-modified/boost/asio/detail/impl/reactive_descriptor_service.ipp +7 -5
  113. data/src/cxx_supportlib/vendor-modified/boost/asio/detail/impl/reactive_socket_service_base.ipp +6 -4
  114. data/src/cxx_supportlib/vendor-modified/boost/asio/detail/impl/socket_ops.ipp +44 -35
  115. data/src/cxx_supportlib/vendor-modified/boost/asio/detail/impl/socket_select_interrupter.ipp +1 -1
  116. data/src/cxx_supportlib/vendor-modified/boost/asio/detail/initiation_base.hpp +64 -0
  117. data/src/cxx_supportlib/vendor-modified/boost/asio/detail/memory.hpp +0 -11
  118. data/src/cxx_supportlib/vendor-modified/boost/asio/detail/reactive_descriptor_service.hpp +20 -16
  119. data/src/cxx_supportlib/vendor-modified/boost/asio/detail/reactive_socket_send_op.hpp +0 -1
  120. data/src/cxx_supportlib/vendor-modified/boost/asio/detail/reactive_socket_service.hpp +4 -4
  121. data/src/cxx_supportlib/vendor-modified/boost/asio/detail/reactive_socket_service_base.hpp +23 -18
  122. data/src/cxx_supportlib/vendor-modified/boost/asio/detail/recycling_allocator.hpp +9 -0
  123. data/src/cxx_supportlib/vendor-modified/boost/asio/detail/resolve_endpoint_op.hpp +1 -1
  124. data/src/cxx_supportlib/vendor-modified/boost/asio/detail/resolve_query_op.hpp +1 -1
  125. data/src/cxx_supportlib/vendor-modified/boost/asio/detail/thread_info_base.hpp +11 -1
  126. data/src/cxx_supportlib/vendor-modified/boost/asio/detail/timed_cancel_op.hpp +363 -0
  127. data/src/cxx_supportlib/vendor-modified/boost/asio/detail/wrapped_handler.hpp +29 -51
  128. data/src/cxx_supportlib/vendor-modified/boost/asio/execution/allocator.hpp +1 -1
  129. data/src/cxx_supportlib/vendor-modified/boost/asio/execution/blocking.hpp +1 -1
  130. data/src/cxx_supportlib/vendor-modified/boost/asio/execution/blocking_adaptation.hpp +1 -1
  131. data/src/cxx_supportlib/vendor-modified/boost/asio/execution/context.hpp +1 -1
  132. data/src/cxx_supportlib/vendor-modified/boost/asio/execution/mapping.hpp +1 -1
  133. data/src/cxx_supportlib/vendor-modified/boost/asio/execution/occupancy.hpp +1 -1
  134. data/src/cxx_supportlib/vendor-modified/boost/asio/execution/outstanding_work.hpp +1 -1
  135. data/src/cxx_supportlib/vendor-modified/boost/asio/execution/relationship.hpp +1 -1
  136. data/src/cxx_supportlib/vendor-modified/boost/asio/experimental/basic_channel.hpp +2 -1
  137. data/src/cxx_supportlib/vendor-modified/boost/asio/experimental/basic_concurrent_channel.hpp +2 -1
  138. data/src/cxx_supportlib/vendor-modified/boost/asio/experimental/co_composed.hpp +2 -114
  139. data/src/cxx_supportlib/vendor-modified/boost/asio/experimental/detail/channel_receive_op.hpp +2 -3
  140. data/src/cxx_supportlib/vendor-modified/boost/asio/experimental/detail/channel_send_functions.hpp +27 -19
  141. data/src/cxx_supportlib/vendor-modified/boost/asio/experimental/detail/channel_send_op.hpp +0 -1
  142. data/src/cxx_supportlib/vendor-modified/boost/asio/experimental/detail/channel_service.hpp +17 -15
  143. data/src/cxx_supportlib/vendor-modified/boost/asio/experimental/detail/coro_promise_allocator.hpp +2 -3
  144. data/src/cxx_supportlib/vendor-modified/boost/asio/experimental/detail/impl/channel_service.hpp +4 -2
  145. data/src/cxx_supportlib/vendor-modified/boost/asio/experimental/detail/partial_promise.hpp +3 -5
  146. data/src/cxx_supportlib/vendor-modified/boost/asio/experimental/impl/as_single.hpp +12 -7
  147. data/src/cxx_supportlib/vendor-modified/boost/asio/experimental/impl/coro.hpp +1 -1
  148. data/src/cxx_supportlib/vendor-modified/boost/asio/experimental/parallel_group.hpp +38 -40
  149. data/src/cxx_supportlib/vendor-modified/boost/asio/experimental/promise.hpp +3 -3
  150. data/src/cxx_supportlib/vendor-modified/boost/asio/experimental/use_coro.hpp +5 -5
  151. data/src/cxx_supportlib/vendor-modified/boost/asio/experimental/use_promise.hpp +1 -1
  152. data/src/cxx_supportlib/vendor-modified/boost/asio/immediate.hpp +144 -0
  153. data/src/cxx_supportlib/vendor-modified/boost/asio/impl/append.hpp +14 -7
  154. data/src/cxx_supportlib/vendor-modified/boost/asio/impl/as_tuple.hpp +45 -14
  155. data/src/cxx_supportlib/vendor-modified/boost/asio/impl/awaitable.hpp +3 -3
  156. data/src/cxx_supportlib/vendor-modified/boost/asio/impl/cancel_after.hpp +270 -0
  157. data/src/cxx_supportlib/vendor-modified/boost/asio/impl/cancel_at.hpp +270 -0
  158. data/src/cxx_supportlib/vendor-modified/boost/asio/impl/co_spawn.hpp +8 -0
  159. data/src/cxx_supportlib/vendor-modified/boost/asio/impl/connect.hpp +60 -166
  160. data/src/cxx_supportlib/vendor-modified/boost/asio/impl/consign.hpp +14 -7
  161. data/src/cxx_supportlib/vendor-modified/boost/asio/impl/detached.hpp +2 -2
  162. data/src/cxx_supportlib/vendor-modified/boost/asio/impl/prepend.hpp +14 -7
  163. data/src/cxx_supportlib/vendor-modified/boost/asio/impl/read.hpp +26 -177
  164. data/src/cxx_supportlib/vendor-modified/boost/asio/impl/read_at.hpp +16 -82
  165. data/src/cxx_supportlib/vendor-modified/boost/asio/impl/read_until.hpp +13 -286
  166. data/src/cxx_supportlib/vendor-modified/boost/asio/impl/redirect_error.hpp +55 -18
  167. data/src/cxx_supportlib/vendor-modified/boost/asio/impl/spawn.hpp +1 -1
  168. data/src/cxx_supportlib/vendor-modified/boost/asio/impl/write.hpp +26 -185
  169. data/src/cxx_supportlib/vendor-modified/boost/asio/impl/write_at.hpp +16 -87
  170. data/src/cxx_supportlib/vendor-modified/boost/asio/io_context_strand.hpp +5 -5
  171. data/src/cxx_supportlib/vendor-modified/boost/asio/ip/basic_resolver.hpp +6 -6
  172. data/src/cxx_supportlib/vendor-modified/boost/asio/ip/detail/socket_option.hpp +1 -1
  173. data/src/cxx_supportlib/vendor-modified/boost/asio/ip/impl/address_v6.ipp +1 -1
  174. data/src/cxx_supportlib/vendor-modified/boost/asio/placeholders.hpp +12 -6
  175. data/src/cxx_supportlib/vendor-modified/boost/asio/posix/basic_descriptor.hpp +1 -1
  176. data/src/cxx_supportlib/vendor-modified/boost/asio/posix/basic_stream_descriptor.hpp +2 -2
  177. data/src/cxx_supportlib/vendor-modified/boost/asio/read.hpp +127 -28
  178. data/src/cxx_supportlib/vendor-modified/boost/asio/read_at.hpp +70 -20
  179. data/src/cxx_supportlib/vendor-modified/boost/asio/read_until.hpp +114 -36
  180. data/src/cxx_supportlib/vendor-modified/boost/asio/redirect_error.hpp +43 -3
  181. data/src/cxx_supportlib/vendor-modified/boost/asio/registered_buffer.hpp +2 -2
  182. data/src/cxx_supportlib/vendor-modified/boost/asio/spawn.hpp +0 -1
  183. data/src/cxx_supportlib/vendor-modified/boost/asio/ssl/detail/impl/openssl_init.ipp +2 -2
  184. data/src/cxx_supportlib/vendor-modified/boost/asio/ssl/impl/context.ipp +10 -7
  185. data/src/cxx_supportlib/vendor-modified/boost/asio/ssl/stream.hpp +5 -5
  186. data/src/cxx_supportlib/vendor-modified/boost/asio/this_coro.hpp +2 -2
  187. data/src/cxx_supportlib/vendor-modified/boost/asio/use_awaitable.hpp +2 -2
  188. data/src/cxx_supportlib/vendor-modified/boost/asio/use_future.hpp +1 -1
  189. data/src/cxx_supportlib/vendor-modified/boost/asio/uses_executor.hpp +1 -1
  190. data/src/cxx_supportlib/vendor-modified/boost/asio/version.hpp +1 -1
  191. data/src/cxx_supportlib/vendor-modified/boost/asio/write.hpp +147 -35
  192. data/src/cxx_supportlib/vendor-modified/boost/asio/write_at.hpp +74 -22
  193. data/src/cxx_supportlib/vendor-modified/boost/asio.hpp +6 -0
  194. data/src/cxx_supportlib/vendor-modified/boost/assert/source_location.hpp +4 -1
  195. data/src/cxx_supportlib/vendor-modified/boost/atomic/detail/futex.hpp +42 -11
  196. data/src/cxx_supportlib/vendor-modified/boost/bind/bind.hpp +15 -37
  197. data/src/cxx_supportlib/vendor-modified/boost/container/adaptive_pool.hpp +8 -8
  198. data/src/cxx_supportlib/vendor-modified/boost/container/allocator.hpp +1 -1
  199. data/src/cxx_supportlib/vendor-modified/boost/container/allocator_traits.hpp +151 -10
  200. data/src/cxx_supportlib/vendor-modified/boost/container/container_fwd.hpp +11 -9
  201. data/src/cxx_supportlib/vendor-modified/boost/container/deque.hpp +611 -102
  202. data/src/cxx_supportlib/vendor-modified/boost/container/detail/adaptive_node_pool.hpp +1 -1
  203. data/src/cxx_supportlib/vendor-modified/boost/container/detail/adaptive_node_pool_impl.hpp +47 -47
  204. data/src/cxx_supportlib/vendor-modified/boost/container/detail/advanced_insert_int.hpp +25 -24
  205. data/src/cxx_supportlib/vendor-modified/boost/container/detail/allocation_type.hpp +7 -7
  206. data/src/cxx_supportlib/vendor-modified/boost/container/detail/block_list.hpp +2 -2
  207. data/src/cxx_supportlib/vendor-modified/boost/container/detail/block_slist.hpp +2 -2
  208. data/src/cxx_supportlib/vendor-modified/boost/container/detail/construct_in_place.hpp +35 -1
  209. data/src/cxx_supportlib/vendor-modified/boost/container/detail/copy_move_algo.hpp +14 -14
  210. data/src/cxx_supportlib/vendor-modified/boost/container/detail/dispatch_uses_allocator.hpp +1 -1
  211. data/src/cxx_supportlib/vendor-modified/boost/container/detail/flat_tree.hpp +55 -23
  212. data/src/cxx_supportlib/vendor-modified/boost/container/detail/function_detector.hpp +1 -1
  213. data/src/cxx_supportlib/vendor-modified/boost/container/detail/is_container.hpp +2 -2
  214. data/src/cxx_supportlib/vendor-modified/boost/container/detail/is_contiguous_container.hpp +1 -1
  215. data/src/cxx_supportlib/vendor-modified/boost/container/detail/is_pair.hpp +4 -4
  216. data/src/cxx_supportlib/vendor-modified/boost/container/detail/iterators.hpp +8 -8
  217. data/src/cxx_supportlib/vendor-modified/boost/container/detail/math_functions.hpp +9 -9
  218. data/src/cxx_supportlib/vendor-modified/boost/container/detail/mpl.hpp +4 -4
  219. data/src/cxx_supportlib/vendor-modified/boost/container/detail/multiallocation_chain.hpp +96 -10
  220. data/src/cxx_supportlib/vendor-modified/boost/container/detail/node_alloc_holder.hpp +19 -4
  221. data/src/cxx_supportlib/vendor-modified/boost/container/detail/node_pool.hpp +1 -1
  222. data/src/cxx_supportlib/vendor-modified/boost/container/detail/pair.hpp +17 -17
  223. data/src/cxx_supportlib/vendor-modified/boost/container/detail/pool_common.hpp +1 -1
  224. data/src/cxx_supportlib/vendor-modified/boost/container/detail/pool_common_alloc.hpp +2 -2
  225. data/src/cxx_supportlib/vendor-modified/boost/container/detail/pool_resource.hpp +4 -4
  226. data/src/cxx_supportlib/vendor-modified/boost/container/detail/tree.hpp +86 -52
  227. data/src/cxx_supportlib/vendor-modified/boost/container/detail/version_type.hpp +4 -4
  228. data/src/cxx_supportlib/vendor-modified/boost/container/detail/workaround.hpp +12 -0
  229. data/src/cxx_supportlib/vendor-modified/boost/container/devector.hpp +145 -65
  230. data/src/cxx_supportlib/vendor-modified/boost/container/flat_map.hpp +105 -22
  231. data/src/cxx_supportlib/vendor-modified/boost/container/flat_set.hpp +2 -2
  232. data/src/cxx_supportlib/vendor-modified/boost/container/list.hpp +30 -22
  233. data/src/cxx_supportlib/vendor-modified/boost/container/map.hpp +19 -2
  234. data/src/cxx_supportlib/vendor-modified/boost/container/new_allocator.hpp +1 -1
  235. data/src/cxx_supportlib/vendor-modified/boost/container/node_allocator.hpp +15 -8
  236. data/src/cxx_supportlib/vendor-modified/boost/container/node_handle.hpp +6 -5
  237. data/src/cxx_supportlib/vendor-modified/boost/container/options.hpp +15 -15
  238. data/src/cxx_supportlib/vendor-modified/boost/container/pmr/memory_resource.hpp +1 -1
  239. data/src/cxx_supportlib/vendor-modified/boost/container/pmr/monotonic_buffer_resource.hpp +1 -1
  240. data/src/cxx_supportlib/vendor-modified/boost/container/pmr/resource_adaptor.hpp +3 -3
  241. data/src/cxx_supportlib/vendor-modified/boost/container/scoped_allocator.hpp +1 -1
  242. data/src/cxx_supportlib/vendor-modified/boost/container/set.hpp +2 -2
  243. data/src/cxx_supportlib/vendor-modified/boost/container/slist.hpp +31 -24
  244. data/src/cxx_supportlib/vendor-modified/boost/container/small_vector.hpp +45 -43
  245. data/src/cxx_supportlib/vendor-modified/boost/container/stable_vector.hpp +45 -33
  246. data/src/cxx_supportlib/vendor-modified/boost/container/static_vector.hpp +5 -7
  247. data/src/cxx_supportlib/vendor-modified/boost/container/string.hpp +55 -47
  248. data/src/cxx_supportlib/vendor-modified/boost/container/uses_allocator.hpp +3 -3
  249. data/src/cxx_supportlib/vendor-modified/boost/container/vector.hpp +222 -73
  250. data/src/cxx_supportlib/vendor-modified/boost/core/detail/minstd_rand.hpp +58 -0
  251. data/src/cxx_supportlib/vendor-modified/boost/core/detail/string_view.hpp +13 -13
  252. data/src/cxx_supportlib/vendor-modified/boost/core/empty_value.hpp +53 -5
  253. data/src/cxx_supportlib/vendor-modified/boost/core/lightweight_test.hpp +1 -0
  254. data/src/cxx_supportlib/vendor-modified/boost/core/pointer_in_range.hpp +49 -0
  255. data/src/cxx_supportlib/vendor-modified/boost/core/span.hpp +2 -0
  256. data/src/cxx_supportlib/vendor-modified/boost/core/type_name.hpp +7 -2
  257. data/src/cxx_supportlib/vendor-modified/boost/function/function_base.hpp +22 -34
  258. data/src/cxx_supportlib/vendor-modified/boost/function/function_template.hpp +141 -38
  259. data/src/cxx_supportlib/vendor-modified/boost/intrusive/detail/algorithm.hpp +8 -8
  260. data/src/cxx_supportlib/vendor-modified/boost/intrusive/detail/hash.hpp +1 -1
  261. data/src/cxx_supportlib/vendor-modified/boost/intrusive/detail/hook_traits.hpp +8 -6
  262. data/src/cxx_supportlib/vendor-modified/boost/intrusive/pointer_traits.hpp +18 -18
  263. data/src/cxx_supportlib/vendor-modified/boost/lexical_cast/detail/converter_lexical_streams.hpp +22 -17
  264. data/src/cxx_supportlib/vendor-modified/boost/libs/random/src/random_device.cpp +3 -1
  265. data/src/cxx_supportlib/vendor-modified/boost/move/detail/config_begin.hpp +0 -1
  266. data/src/cxx_supportlib/vendor-modified/boost/move/detail/launder.hpp +53 -0
  267. data/src/cxx_supportlib/vendor-modified/boost/move/detail/type_traits.hpp +9 -1
  268. data/src/cxx_supportlib/vendor-modified/boost/move/detail/workaround.hpp +6 -1
  269. data/src/cxx_supportlib/vendor-modified/boost/mp11/version.hpp +1 -1
  270. data/src/cxx_supportlib/vendor-modified/boost/mpl/aux_/integral_wrapper.hpp +2 -1
  271. data/src/cxx_supportlib/vendor-modified/boost/predef/version.h +1 -1
  272. data/src/cxx_supportlib/vendor-modified/boost/smart_ptr/detail/requires_cxx11.hpp +1 -1
  273. data/src/cxx_supportlib/vendor-modified/boost/smart_ptr/detail/sp_has_gcc_intrinsics.hpp +4 -1
  274. data/src/cxx_supportlib/vendor-modified/boost/system/detail/generic_category_message.hpp +13 -1
  275. data/src/cxx_supportlib/vendor-modified/boost/unordered/concurrent_flat_map.hpp +13 -1
  276. data/src/cxx_supportlib/vendor-modified/boost/unordered/concurrent_flat_map_fwd.hpp +15 -0
  277. data/src/cxx_supportlib/vendor-modified/boost/unordered/concurrent_flat_set.hpp +13 -1
  278. data/src/cxx_supportlib/vendor-modified/boost/unordered/concurrent_flat_set_fwd.hpp +15 -0
  279. data/src/cxx_supportlib/vendor-modified/boost/unordered/detail/fca.hpp +22 -6
  280. data/src/cxx_supportlib/vendor-modified/boost/unordered/detail/foa/concurrent_table.hpp +38 -10
  281. data/src/cxx_supportlib/vendor-modified/boost/unordered/detail/foa/core.hpp +111 -2
  282. data/src/cxx_supportlib/vendor-modified/boost/unordered/detail/foa/cumulative_stats.hpp +177 -0
  283. data/src/cxx_supportlib/vendor-modified/boost/unordered/detail/foa/table.hpp +11 -1
  284. data/src/cxx_supportlib/vendor-modified/boost/unordered/hash_traits.hpp +33 -7
  285. data/src/cxx_supportlib/vendor-modified/boost/unordered/unordered_flat_map.hpp +12 -0
  286. data/src/cxx_supportlib/vendor-modified/boost/unordered/unordered_flat_map_fwd.hpp +15 -0
  287. data/src/cxx_supportlib/vendor-modified/boost/unordered/unordered_flat_set.hpp +12 -0
  288. data/src/cxx_supportlib/vendor-modified/boost/unordered/unordered_flat_set_fwd.hpp +14 -0
  289. data/src/cxx_supportlib/vendor-modified/boost/unordered/unordered_map_fwd.hpp +19 -0
  290. data/src/cxx_supportlib/vendor-modified/boost/unordered/unordered_node_map.hpp +12 -0
  291. data/src/cxx_supportlib/vendor-modified/boost/unordered/unordered_node_map_fwd.hpp +15 -0
  292. data/src/cxx_supportlib/vendor-modified/boost/unordered/unordered_node_set.hpp +12 -0
  293. data/src/cxx_supportlib/vendor-modified/boost/unordered/unordered_node_set_fwd.hpp +14 -0
  294. data/src/cxx_supportlib/vendor-modified/boost/unordered/unordered_set_fwd.hpp +17 -0
  295. data/src/cxx_supportlib/vendor-modified/boost/utility/detail/minstd_rand.hpp +1 -43
  296. data/src/cxx_supportlib/vendor-modified/boost/version.hpp +2 -2
  297. data/src/ruby_supportlib/phusion_passenger/config/compile_nginx_engine_command.rb +6 -2
  298. data/src/ruby_supportlib/phusion_passenger/config/install_standalone_runtime_command.rb +10 -0
  299. data/src/ruby_supportlib/phusion_passenger/config/nginx_engine_compiler.rb +12 -4
  300. data/src/ruby_supportlib/phusion_passenger/platform_info/compiler.rb +32 -5
  301. data/src/ruby_supportlib/phusion_passenger/standalone/start_command.rb +0 -4
  302. data/src/ruby_supportlib/phusion_passenger/utils/json.rb +5 -1
  303. data/src/ruby_supportlib/phusion_passenger/utils.rb +5 -15
  304. data/src/ruby_supportlib/phusion_passenger.rb +5 -5
  305. metadata +21 -8
@@ -208,6 +208,36 @@ public:
208
208
  /**
209
209
  * For example:
210
210
  * @code boost::asio::experimental::make_parallel_group(
211
+ * in.async_read_some(boost::asio::buffer(data)),
212
+ * timer.async_wait()
213
+ * ).async_wait(
214
+ * boost::asio::experimental::wait_for_all(),
215
+ * [](
216
+ * std::array<std::size_t, 2> completion_order,
217
+ * boost::system::error_code ec1, std::size_t n1,
218
+ * boost::system::error_code ec2
219
+ * )
220
+ * {
221
+ * switch (completion_order[0])
222
+ * {
223
+ * case 0:
224
+ * {
225
+ * std::cout << "descriptor finished: " << ec1 << ", " << n1 << "\n";
226
+ * }
227
+ * break;
228
+ * case 1:
229
+ * {
230
+ * std::cout << "timer finished: " << ec2 << "\n";
231
+ * }
232
+ * break;
233
+ * }
234
+ * }
235
+ * );
236
+ * @endcode
237
+ *
238
+ * If preferred, the asynchronous operations may be explicitly packaged as
239
+ * function objects:
240
+ * @code boost::asio::experimental::make_parallel_group(
211
241
  * [&](auto token)
212
242
  * {
213
243
  * return in.async_read_some(boost::asio::buffer(data), token);
@@ -333,28 +363,12 @@ public:
333
363
  *
334
364
  * For example:
335
365
  * @code
336
- * using op_type = decltype(
337
- * socket1.async_read_some(
338
- * boost::asio::buffer(data1),
339
- * boost::asio::deferred
340
- * )
341
- * );
366
+ * using op_type =
367
+ * decltype(socket1.async_read_some(boost::asio::buffer(data1)));
342
368
  *
343
369
  * std::vector<op_type> ops;
344
- *
345
- * ops.push_back(
346
- * socket1.async_read_some(
347
- * boost::asio::buffer(data1),
348
- * boost::asio::deferred
349
- * )
350
- * );
351
- *
352
- * ops.push_back(
353
- * socket2.async_read_some(
354
- * boost::asio::buffer(data2),
355
- * boost::asio::deferred
356
- * )
357
- * );
370
+ * ops.push_back(socket1.async_read_some(boost::asio::buffer(data1)));
371
+ * ops.push_back(socket2.async_read_some(boost::asio::buffer(data2)));
358
372
  *
359
373
  * boost::asio::experimental::make_parallel_group(ops).async_wait(
360
374
  * boost::asio::experimental::wait_for_all(),
@@ -392,28 +406,12 @@ make_parallel_group(Range&& range,
392
406
  *
393
407
  * For example:
394
408
  * @code
395
- * using op_type = decltype(
396
- * socket1.async_read_some(
397
- * boost::asio::buffer(data1),
398
- * boost::asio::deferred
399
- * )
400
- * );
409
+ * using op_type =
410
+ * decltype(socket1.async_read_some(boost::asio::buffer(data1)));
401
411
  *
402
412
  * std::vector<op_type> ops;
403
- *
404
- * ops.push_back(
405
- * socket1.async_read_some(
406
- * boost::asio::buffer(data1),
407
- * boost::asio::deferred
408
- * )
409
- * );
410
- *
411
- * ops.push_back(
412
- * socket2.async_read_some(
413
- * boost::asio::buffer(data2),
414
- * boost::asio::deferred
415
- * )
416
- * );
413
+ * ops.push_back(socket1.async_read_some(boost::asio::buffer(data1)));
414
+ * ops.push_back(socket2.async_read_some(boost::asio::buffer(data2)));
417
415
  *
418
416
  * boost::asio::experimental::make_parallel_group(
419
417
  * std::allocator_arg_t,
@@ -85,8 +85,9 @@ struct promise_value_type<>
85
85
  * awaitable<void> read_write_some(boost::asio::ip::tcp::socket & sock,
86
86
  * boost::asio::mutable_buffer read_buf, boost::asio::const_buffer to_write)
87
87
  * {
88
- * auto p = boost::asio::async_read(read_buf, boost::asio::use_awaitable);
89
- * co_await boost::asio::async_write_some(to_write, boost::asio::deferred);
88
+ * auto p = boost::asio::async_read(read_buf,
89
+ * boost::asio::experimental::use_promise);
90
+ * co_await boost::asio::async_write_some(to_write);
90
91
  * co_await p;
91
92
  * }
92
93
  * @endcode
@@ -140,7 +141,6 @@ struct promise<void(Ts...), Executor, Allocator>
140
141
  */
141
142
  ~promise() { cancel(); }
142
143
 
143
-
144
144
  private:
145
145
  #if !defined(GENERATING_DOCUMENTATION)
146
146
  template <typename, typename, typename> friend struct promise;
@@ -48,8 +48,9 @@ namespace experimental {
48
48
  * the asynchronous operation completes, and the result of the operation is
49
49
  * returned.
50
50
  *
51
- * Note that this token is not the most efficient (use @c boost::asio::deferred
52
- * for that) but does provide type erasure, as it will always return a @c coro.
51
+ * Note that this token is not the most efficient (use the default completion
52
+ * token @c boost::asio::deferred for that) but does provide type erasure, as it
53
+ * will always return a @c coro.
53
54
  */
54
55
  template <typename Allocator = std::allocator<void>>
55
56
  struct use_coro_t
@@ -84,7 +85,6 @@ struct use_coro_t
84
85
  {
85
86
  }
86
87
 
87
-
88
88
  /// Specify an alternate allocator.
89
89
  template <typename OtherAllocator>
90
90
  use_coro_t<OtherAllocator> rebind(const OtherAllocator& allocator) const
@@ -174,9 +174,9 @@ private:
174
174
  * See the documentation for boost::asio::use_coro_t for a usage example.
175
175
  */
176
176
  #if defined(GENERATING_DOCUMENTATION)
177
- constexpr use_coro_t<> use_coro;
177
+ BOOST_ASIO_INLINE_VARIABLE constexpr use_coro_t<> use_coro;
178
178
  #else
179
- constexpr use_coro_t<> use_coro(0, 0, 0);
179
+ BOOST_ASIO_INLINE_VARIABLE constexpr use_coro_t<> use_coro(0, 0, 0);
180
180
  #endif
181
181
 
182
182
  } // namespace experimental
@@ -100,7 +100,7 @@ private:
100
100
  Allocator allocator_;
101
101
  };
102
102
 
103
- constexpr use_promise_t<> use_promise;
103
+ BOOST_ASIO_INLINE_VARIABLE constexpr use_promise_t<> use_promise;
104
104
 
105
105
  } // namespace experimental
106
106
  } // namespace asio
@@ -0,0 +1,144 @@
1
+ //
2
+ // immediate.hpp
3
+ // ~~~~~~~~~~~~~
4
+ //
5
+ // Copyright (c) 2003-2024 Christopher M. Kohlhoff (chris at kohlhoff dot com)
6
+ //
7
+ // Distributed under the Boost Software License, Version 1.0. (See accompanying
8
+ // file LICENSE_1_0.txt or copy at http://www.boost.org/LICENSE_1_0.txt)
9
+ //
10
+
11
+ #ifndef BOOST_ASIO_IMMEDIATE_HPP
12
+ #define BOOST_ASIO_IMMEDIATE_HPP
13
+
14
+ #if defined(_MSC_VER) && (_MSC_VER >= 1200)
15
+ # pragma once
16
+ #endif // defined(_MSC_VER) && (_MSC_VER >= 1200)
17
+
18
+ #include <boost/asio/detail/config.hpp>
19
+ #include <boost/asio/associated_immediate_executor.hpp>
20
+ #include <boost/asio/async_result.hpp>
21
+ #include <boost/asio/dispatch.hpp>
22
+
23
+ #include <boost/asio/detail/push_options.hpp>
24
+
25
+ namespace boost {
26
+ namespace asio {
27
+ namespace detail {
28
+
29
+ template <typename Executor>
30
+ class initiate_immediate
31
+ {
32
+ public:
33
+ typedef Executor executor_type;
34
+
35
+ explicit initiate_immediate(const Executor& ex)
36
+ : ex_(ex)
37
+ {
38
+ }
39
+
40
+ executor_type get_executor() const noexcept
41
+ {
42
+ return ex_;
43
+ }
44
+
45
+ template <typename CompletionHandler>
46
+ void operator()(CompletionHandler&& handler) const
47
+ {
48
+ typename associated_immediate_executor<
49
+ CompletionHandler, executor_type>::type ex =
50
+ (get_associated_immediate_executor)(handler, ex_);
51
+ (dispatch)(ex, static_cast<CompletionHandler&&>(handler));
52
+ }
53
+
54
+ private:
55
+ Executor ex_;
56
+ };
57
+
58
+ } // namespace detail
59
+
60
+ /// Launch a trivial asynchronous operation that completes immediately.
61
+ /**
62
+ * The async_immediate function is intended for use by composed operations,
63
+ * which can delegate to this operation in order to implement the correct
64
+ * semantics for immediate completion.
65
+ *
66
+ * @param ex The asynchronous operation's I/O executor.
67
+ *
68
+ * @param token The completion token.
69
+ *
70
+ * The completion handler is immediately submitted for execution by calling
71
+ * boost::asio::dispatch() on the handler's associated immediate executor.
72
+ *
73
+ * If the completion handler does not have a customised associated immediate
74
+ * executor, then the handler is submitted as if by calling boost::asio::post()
75
+ * on the supplied I/O executor.
76
+ *
77
+ * @par Completion Signature
78
+ * @code void() @endcode
79
+ */
80
+ template <typename Executor,
81
+ BOOST_ASIO_COMPLETION_TOKEN_FOR(void()) NullaryToken
82
+ = default_completion_token_t<Executor>>
83
+ inline auto async_immediate(const Executor& ex,
84
+ NullaryToken&& token = default_completion_token_t<Executor>(),
85
+ constraint_t<
86
+ (execution::is_executor<Executor>::value
87
+ && can_require<Executor, execution::blocking_t::never_t>::value)
88
+ || is_executor<Executor>::value
89
+ > = 0)
90
+ -> decltype(
91
+ async_initiate<NullaryToken, void()>(
92
+ declval<detail::initiate_immediate<Executor>>(), token))
93
+ {
94
+ return async_initiate<NullaryToken, void()>(
95
+ detail::initiate_immediate<Executor>(ex), token);
96
+ }
97
+
98
+ /// Launch a trivial asynchronous operation that completes immediately.
99
+ /**
100
+ * The async_immediate function is intended for use by composed operations,
101
+ * which can delegate to this operation in order to implement the correct
102
+ * semantics for immediate completion.
103
+ *
104
+ * @param ex The execution context used to obtain the asynchronous operation's
105
+ * I/O executor.
106
+ *
107
+ * @param token The completion token.
108
+ *
109
+ * The completion handler is immediately submitted for execution by calling
110
+ * boost::asio::dispatch() on the handler's associated immediate executor.
111
+ *
112
+ * If the completion handler does not have a customised associated immediate
113
+ * executor, then the handler is submitted as if by calling boost::asio::post()
114
+ * on the I/O executor obtained from the supplied execution context.
115
+ *
116
+ * @par Completion Signature
117
+ * @code void() @endcode
118
+ */
119
+ template <typename ExecutionContext,
120
+ BOOST_ASIO_COMPLETION_TOKEN_FOR(void()) NullaryToken
121
+ = default_completion_token_t<typename ExecutionContext::executor_type>>
122
+ inline auto async_immediate(ExecutionContext& ctx,
123
+ NullaryToken&& token = default_completion_token_t<
124
+ typename ExecutionContext::executor_type>(),
125
+ constraint_t<
126
+ is_convertible<ExecutionContext&, execution_context&>::value
127
+ > = 0)
128
+ -> decltype(
129
+ async_initiate<NullaryToken, void()>(
130
+ declval<detail::initiate_immediate<
131
+ typename ExecutionContext::executor_type>>(), token))
132
+ {
133
+ return async_initiate<NullaryToken, void()>(
134
+ detail::initiate_immediate<
135
+ typename ExecutionContext::executor_type>(
136
+ ctx.get_executor()), token);
137
+ }
138
+
139
+ } // namespace asio
140
+ } // namespace boost
141
+
142
+ #include <boost/asio/detail/pop_options.hpp>
143
+
144
+ #endif // BOOST_ASIO_IMMEDIATE_HPP
@@ -19,6 +19,7 @@
19
19
  #include <boost/asio/associator.hpp>
20
20
  #include <boost/asio/async_result.hpp>
21
21
  #include <boost/asio/detail/handler_cont_helpers.hpp>
22
+ #include <boost/asio/detail/initiation_base.hpp>
22
23
  #include <boost/asio/detail/type_traits.hpp>
23
24
  #include <boost/asio/detail/utility.hpp>
24
25
 
@@ -94,25 +95,31 @@ struct async_result<append_t<CompletionToken, Values...>, Signature>
94
95
  Signature, Values...>::type signature;
95
96
 
96
97
  template <typename Initiation>
97
- struct init_wrapper
98
+ struct init_wrapper : detail::initiation_base<Initiation>
98
99
  {
99
- init_wrapper(Initiation init)
100
- : initiation_(static_cast<Initiation&&>(init))
100
+ using detail::initiation_base<Initiation>::initiation_base;
101
+
102
+ template <typename Handler, typename... Args>
103
+ void operator()(Handler&& handler,
104
+ std::tuple<Values...> values, Args&&... args) &&
101
105
  {
106
+ static_cast<Initiation&&>(*this)(
107
+ detail::append_handler<decay_t<Handler>, Values...>(
108
+ static_cast<Handler&&>(handler),
109
+ static_cast<std::tuple<Values...>&&>(values)),
110
+ static_cast<Args&&>(args)...);
102
111
  }
103
112
 
104
113
  template <typename Handler, typename... Args>
105
114
  void operator()(Handler&& handler,
106
- std::tuple<Values...> values, Args&&... args)
115
+ std::tuple<Values...> values, Args&&... args) const &
107
116
  {
108
- static_cast<Initiation&&>(initiation_)(
117
+ static_cast<const Initiation&>(*this)(
109
118
  detail::append_handler<decay_t<Handler>, Values...>(
110
119
  static_cast<Handler&&>(handler),
111
120
  static_cast<std::tuple<Values...>&&>(values)),
112
121
  static_cast<Args&&>(args)...);
113
122
  }
114
-
115
- Initiation initiation_;
116
123
  };
117
124
 
118
125
  template <typename Initiation, typename RawCompletionToken, typename... Args>
@@ -17,9 +17,11 @@
17
17
 
18
18
  #include <boost/asio/detail/config.hpp>
19
19
  #include <tuple>
20
+ #include <boost/asio/associated_executor.hpp>
20
21
  #include <boost/asio/associator.hpp>
21
22
  #include <boost/asio/async_result.hpp>
22
23
  #include <boost/asio/detail/handler_cont_helpers.hpp>
24
+ #include <boost/asio/detail/initiation_base.hpp>
23
25
  #include <boost/asio/detail/type_traits.hpp>
24
26
 
25
27
  #include <boost/asio/detail/push_options.hpp>
@@ -119,23 +121,27 @@ struct async_result<as_tuple_t<CompletionToken>, Signatures...>
119
121
  typename detail::as_tuple_signature<Signatures>::type...>
120
122
  {
121
123
  template <typename Initiation>
122
- struct init_wrapper
124
+ struct init_wrapper : detail::initiation_base<Initiation>
123
125
  {
124
- init_wrapper(Initiation init)
125
- : initiation_(static_cast<Initiation&&>(init))
126
+ using detail::initiation_base<Initiation>::initiation_base;
127
+
128
+ template <typename Handler, typename... Args>
129
+ void operator()(Handler&& handler, Args&&... args) &&
126
130
  {
131
+ static_cast<Initiation&&>(*this)(
132
+ detail::as_tuple_handler<decay_t<Handler>>(
133
+ static_cast<Handler&&>(handler)),
134
+ static_cast<Args&&>(args)...);
127
135
  }
128
136
 
129
137
  template <typename Handler, typename... Args>
130
- void operator()(Handler&& handler, Args&&... args)
138
+ void operator()(Handler&& handler, Args&&... args) const &
131
139
  {
132
- static_cast<Initiation&&>(initiation_)(
140
+ static_cast<const Initiation&>(*this)(
133
141
  detail::as_tuple_handler<decay_t<Handler>>(
134
142
  static_cast<Handler&&>(handler)),
135
143
  static_cast<Args&&>(args)...);
136
144
  }
137
-
138
- Initiation initiation_;
139
145
  };
140
146
 
141
147
  template <typename Initiation, typename RawCompletionToken, typename... Args>
@@ -172,23 +178,27 @@ struct async_result<as_tuple_t<CompletionToken>, Signature>
172
178
  typename detail::as_tuple_signature<Signature>::type>
173
179
  {
174
180
  template <typename Initiation>
175
- struct init_wrapper
181
+ struct init_wrapper : detail::initiation_base<Initiation>
176
182
  {
177
- init_wrapper(Initiation init)
178
- : initiation_(static_cast<Initiation&&>(init))
183
+ using detail::initiation_base<Initiation>::initiation_base;
184
+
185
+ template <typename Handler, typename... Args>
186
+ void operator()(Handler&& handler, Args&&... args) &&
179
187
  {
188
+ static_cast<Initiation&&>(*this)(
189
+ detail::as_tuple_handler<decay_t<Handler>>(
190
+ static_cast<Handler&&>(handler)),
191
+ static_cast<Args&&>(args)...);
180
192
  }
181
193
 
182
194
  template <typename Handler, typename... Args>
183
- void operator()(Handler&& handler, Args&&... args)
195
+ void operator()(Handler&& handler, Args&&... args) const &
184
196
  {
185
- static_cast<Initiation&&>(initiation_)(
197
+ static_cast<const Initiation&>(*this)(
186
198
  detail::as_tuple_handler<decay_t<Handler>>(
187
199
  static_cast<Handler&&>(handler)),
188
200
  static_cast<Args&&>(args)...);
189
201
  }
190
-
191
- Initiation initiation_;
192
202
  };
193
203
 
194
204
  template <typename Initiation, typename RawCompletionToken, typename... Args>
@@ -237,6 +247,27 @@ struct associator<Associator,
237
247
  }
238
248
  };
239
249
 
250
+ template <typename... Signatures>
251
+ struct async_result<partial_as_tuple, Signatures...>
252
+ {
253
+ template <typename Initiation, typename RawCompletionToken, typename... Args>
254
+ static auto initiate(Initiation&& initiation,
255
+ RawCompletionToken&&, Args&&... args)
256
+ -> decltype(
257
+ async_initiate<Signatures...>(
258
+ static_cast<Initiation&&>(initiation),
259
+ as_tuple_t<
260
+ default_completion_token_t<associated_executor_t<Initiation>>>{},
261
+ static_cast<Args&&>(args)...))
262
+ {
263
+ return async_initiate<Signatures...>(
264
+ static_cast<Initiation&&>(initiation),
265
+ as_tuple_t<
266
+ default_completion_token_t<associated_executor_t<Initiation>>>{},
267
+ static_cast<Args&&>(args)...);
268
+ }
269
+ };
270
+
240
271
  #endif // !defined(GENERATING_DOCUMENTATION)
241
272
 
242
273
  } // namespace asio
@@ -546,7 +546,7 @@ public:
546
546
  {
547
547
  this->coro_ = coroutine_handle<awaitable_frame>::from_promise(*this);
548
548
  return awaitable<T, Executor>(this);
549
- };
549
+ }
550
550
 
551
551
  template <typename U>
552
552
  void return_value(U&& u)
@@ -583,7 +583,7 @@ public:
583
583
  {
584
584
  this->coro_ = coroutine_handle<awaitable_frame>::from_promise(*this);
585
585
  return awaitable<void, Executor>(this);
586
- };
586
+ }
587
587
 
588
588
  void return_void()
589
589
  {
@@ -621,7 +621,7 @@ public:
621
621
  {
622
622
  this->coro_ = coroutine_handle<awaitable_frame>::from_promise(*this);
623
623
  return awaitable<awaitable_thread_entry_point, Executor>(this);
624
- };
624
+ }
625
625
 
626
626
  void return_void()
627
627
  {