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
@@ -16,10 +16,12 @@
16
16
  #endif // defined(_MSC_VER) && (_MSC_VER >= 1200)
17
17
 
18
18
  #include <boost/asio/detail/config.hpp>
19
- #include <boost/asio/detail/type_traits.hpp>
20
19
  #include <boost/asio/associated_cancellation_slot.hpp>
20
+ #include <boost/asio/associated_executor.hpp>
21
21
  #include <boost/asio/associator.hpp>
22
22
  #include <boost/asio/async_result.hpp>
23
+ #include <boost/asio/detail/initiation_base.hpp>
24
+ #include <boost/asio/detail/type_traits.hpp>
23
25
 
24
26
  #include <boost/asio/detail/push_options.hpp>
25
27
 
@@ -367,6 +369,46 @@ private:
367
369
  T target_;
368
370
  };
369
371
 
372
+ /// A function object type that adapts a @ref completion_token to specify that
373
+ /// the completion handler should have the supplied cancellation slot as its
374
+ /// associated cancellation slot.
375
+ /**
376
+ * May also be used directly as a completion token, in which case it adapts the
377
+ * asynchronous operation's default completion token (or boost::asio::deferred
378
+ * if no default is available).
379
+ */
380
+ template <typename CancellationSlot>
381
+ struct partial_cancellation_slot_binder
382
+ {
383
+ /// Constructor that specifies associated cancellation slot.
384
+ explicit partial_cancellation_slot_binder(const CancellationSlot& ex)
385
+ : cancellation_slot_(ex)
386
+ {
387
+ }
388
+
389
+ /// Adapt a @ref completion_token to specify that the completion handler
390
+ /// should have the cancellation slot as its associated cancellation slot.
391
+ template <typename CompletionToken>
392
+ BOOST_ASIO_NODISCARD inline
393
+ constexpr cancellation_slot_binder<decay_t<CompletionToken>, CancellationSlot>
394
+ operator()(CompletionToken&& completion_token) const
395
+ {
396
+ return cancellation_slot_binder<decay_t<CompletionToken>, CancellationSlot>(
397
+ static_cast<CompletionToken&&>(completion_token), cancellation_slot_);
398
+ }
399
+
400
+ //private:
401
+ CancellationSlot cancellation_slot_;
402
+ };
403
+
404
+ /// Create a partial completion token that associates a cancellation slot.
405
+ template <typename CancellationSlot>
406
+ BOOST_ASIO_NODISCARD inline partial_cancellation_slot_binder<CancellationSlot>
407
+ bind_cancellation_slot(const CancellationSlot& ex)
408
+ {
409
+ return partial_cancellation_slot_binder<CancellationSlot>(ex);
410
+ }
411
+
370
412
  /// Associate an object of type @c T with a cancellation slot of type
371
413
  /// @c CancellationSlot.
372
414
  template <typename CancellationSlot, typename T>
@@ -447,50 +489,51 @@ public:
447
489
  }
448
490
 
449
491
  template <typename Initiation>
450
- struct init_wrapper
492
+ struct init_wrapper : detail::initiation_base<Initiation>
451
493
  {
452
- template <typename Init>
453
- init_wrapper(const CancellationSlot& slot, Init&& init)
454
- : slot_(slot),
455
- initiation_(static_cast<Init&&>(init))
456
- {
457
- }
494
+ using detail::initiation_base<Initiation>::initiation_base;
458
495
 
459
496
  template <typename Handler, typename... Args>
460
- void operator()(Handler&& handler, Args&&... args)
497
+ void operator()(Handler&& handler,
498
+ const CancellationSlot& slot, Args&&... args) &&
461
499
  {
462
- static_cast<Initiation&&>(initiation_)(
500
+ static_cast<Initiation&&>(*this)(
463
501
  cancellation_slot_binder<decay_t<Handler>, CancellationSlot>(
464
- slot_, static_cast<Handler&&>(handler)),
502
+ slot, static_cast<Handler&&>(handler)),
465
503
  static_cast<Args&&>(args)...);
466
504
  }
467
505
 
468
506
  template <typename Handler, typename... Args>
469
- void operator()(Handler&& handler, Args&&... args) const
507
+ void operator()(Handler&& handler,
508
+ const CancellationSlot& slot, Args&&... args) const &
470
509
  {
471
- initiation_(
510
+ static_cast<const Initiation&>(*this)(
472
511
  cancellation_slot_binder<decay_t<Handler>, CancellationSlot>(
473
- slot_, static_cast<Handler&&>(handler)),
512
+ slot, static_cast<Handler&&>(handler)),
474
513
  static_cast<Args&&>(args)...);
475
514
  }
476
-
477
- CancellationSlot slot_;
478
- Initiation initiation_;
479
515
  };
480
516
 
481
517
  template <typename Initiation, typename RawCompletionToken, typename... Args>
482
518
  static auto initiate(Initiation&& initiation,
483
519
  RawCompletionToken&& token, Args&&... args)
484
520
  -> decltype(
485
- async_initiate<T, Signature>(
521
+ async_initiate<
522
+ conditional_t<
523
+ is_const<remove_reference_t<RawCompletionToken>>::value, const T, T>,
524
+ Signature>(
486
525
  declval<init_wrapper<decay_t<Initiation>>>(),
487
- token.get(), static_cast<Args&&>(args)...))
526
+ token.get(), token.get_cancellation_slot(),
527
+ static_cast<Args&&>(args)...))
488
528
  {
489
- return async_initiate<T, Signature>(
529
+ return async_initiate<
530
+ conditional_t<
531
+ is_const<remove_reference_t<RawCompletionToken>>::value, const T, T>,
532
+ Signature>(
490
533
  init_wrapper<decay_t<Initiation>>(
491
- token.get_cancellation_slot(),
492
534
  static_cast<Initiation&&>(initiation)),
493
- token.get(), static_cast<Args&&>(args)...);
535
+ token.get(), token.get_cancellation_slot(),
536
+ static_cast<Args&&>(args)...);
494
537
  }
495
538
 
496
539
  private:
@@ -500,6 +543,32 @@ private:
500
543
  async_result<T, Signature> target_;
501
544
  };
502
545
 
546
+ template <typename CancellationSlot, typename... Signatures>
547
+ struct async_result<partial_cancellation_slot_binder<CancellationSlot>,
548
+ Signatures...>
549
+ {
550
+ template <typename Initiation, typename RawCompletionToken, typename... Args>
551
+ static auto initiate(Initiation&& initiation,
552
+ RawCompletionToken&& token, Args&&... args)
553
+ -> decltype(
554
+ async_initiate<Signatures...>(
555
+ static_cast<Initiation&&>(initiation),
556
+ cancellation_slot_binder<
557
+ default_completion_token_t<associated_executor_t<Initiation>>,
558
+ CancellationSlot>(token.cancellation_slot_,
559
+ default_completion_token_t<associated_executor_t<Initiation>>{}),
560
+ static_cast<Args&&>(args)...))
561
+ {
562
+ return async_initiate<Signatures...>(
563
+ static_cast<Initiation&&>(initiation),
564
+ cancellation_slot_binder<
565
+ default_completion_token_t<associated_executor_t<Initiation>>,
566
+ CancellationSlot>(token.cancellation_slot_,
567
+ default_completion_token_t<associated_executor_t<Initiation>>{}),
568
+ static_cast<Args&&>(args)...);
569
+ }
570
+ };
571
+
503
572
  template <template <typename, typename> class Associator,
504
573
  typename T, typename CancellationSlot, typename DefaultCandidate>
505
574
  struct associator<Associator,
@@ -16,10 +16,11 @@
16
16
  #endif // defined(_MSC_VER) && (_MSC_VER >= 1200)
17
17
 
18
18
  #include <boost/asio/detail/config.hpp>
19
- #include <boost/asio/detail/type_traits.hpp>
20
19
  #include <boost/asio/associated_executor.hpp>
21
20
  #include <boost/asio/associator.hpp>
22
21
  #include <boost/asio/async_result.hpp>
22
+ #include <boost/asio/detail/initiation_base.hpp>
23
+ #include <boost/asio/detail/type_traits.hpp>
23
24
  #include <boost/asio/execution/executor.hpp>
24
25
  #include <boost/asio/execution_context.hpp>
25
26
  #include <boost/asio/is_executor.hpp>
@@ -395,6 +396,49 @@ private:
395
396
  uses_executor<T, Executor>::value> base_type;
396
397
  };
397
398
 
399
+ /// A function object type that adapts a @ref completion_token to specify that
400
+ /// the completion handler should have the supplied executor as its associated
401
+ /// executor.
402
+ /**
403
+ * May also be used directly as a completion token, in which case it adapts the
404
+ * asynchronous operation's default completion token (or boost::asio::deferred
405
+ * if no default is available).
406
+ */
407
+ template <typename Executor>
408
+ struct partial_executor_binder
409
+ {
410
+ /// Constructor that specifies associated executor.
411
+ explicit partial_executor_binder(const Executor& ex)
412
+ : executor_(ex)
413
+ {
414
+ }
415
+
416
+ /// Adapt a @ref completion_token to specify that the completion handler
417
+ /// should have the executor as its associated executor.
418
+ template <typename CompletionToken>
419
+ BOOST_ASIO_NODISCARD inline
420
+ constexpr executor_binder<decay_t<CompletionToken>, Executor>
421
+ operator()(CompletionToken&& completion_token) const
422
+ {
423
+ return executor_binder<decay_t<CompletionToken>, Executor>(executor_arg_t(),
424
+ static_cast<CompletionToken&&>(completion_token), executor_);
425
+ }
426
+
427
+ //private:
428
+ Executor executor_;
429
+ };
430
+
431
+ /// Create a partial completion token that associates an executor.
432
+ template <typename Executor>
433
+ BOOST_ASIO_NODISCARD inline partial_executor_binder<Executor>
434
+ bind_executor(const Executor& ex,
435
+ constraint_t<
436
+ is_executor<Executor>::value || execution::is_executor<Executor>::value
437
+ > = 0)
438
+ {
439
+ return partial_executor_binder<Executor>(ex);
440
+ }
441
+
398
442
  /// Associate an object of type @c T with an executor of type @c Executor.
399
443
  template <typename Executor, typename T>
400
444
  BOOST_ASIO_NODISCARD inline executor_binder<decay_t<T>, Executor>
@@ -407,6 +451,20 @@ bind_executor(const Executor& ex, T&& t,
407
451
  executor_arg_t(), ex, static_cast<T&&>(t));
408
452
  }
409
453
 
454
+ /// Create a partial completion token that associates an execution context's
455
+ /// executor.
456
+ template <typename ExecutionContext>
457
+ BOOST_ASIO_NODISCARD inline partial_executor_binder<
458
+ typename ExecutionContext::executor_type>
459
+ bind_executor(ExecutionContext& ctx,
460
+ constraint_t<
461
+ is_convertible<ExecutionContext&, execution_context&>::value
462
+ > = 0)
463
+ {
464
+ return partial_executor_binder<typename ExecutionContext::executor_type>(
465
+ ctx.get_executor());
466
+ }
467
+
410
468
  /// Associate an object of type @c T with an execution context's executor.
411
469
  template <typename ExecutionContext, typename T>
412
470
  BOOST_ASIO_NODISCARD inline executor_binder<decay_t<T>,
@@ -492,49 +550,48 @@ public:
492
550
  }
493
551
 
494
552
  template <typename Initiation>
495
- struct init_wrapper
553
+ struct init_wrapper : detail::initiation_base<Initiation>
496
554
  {
497
- template <typename Init>
498
- init_wrapper(const Executor& ex, Init&& init)
499
- : ex_(ex),
500
- initiation_(static_cast<Init&&>(init))
501
- {
502
- }
555
+ using detail::initiation_base<Initiation>::initiation_base;
503
556
 
504
557
  template <typename Handler, typename... Args>
505
- void operator()(Handler&& handler, Args&&... args)
558
+ void operator()(Handler&& handler, const Executor& e, Args&&... args) &&
506
559
  {
507
- static_cast<Initiation&&>(initiation_)(
560
+ static_cast<Initiation&&>(*this)(
508
561
  executor_binder<decay_t<Handler>, Executor>(
509
- executor_arg_t(), ex_, static_cast<Handler&&>(handler)),
562
+ executor_arg_t(), e, static_cast<Handler&&>(handler)),
510
563
  static_cast<Args&&>(args)...);
511
564
  }
512
565
 
513
566
  template <typename Handler, typename... Args>
514
- void operator()(Handler&& handler, Args&&... args) const
567
+ void operator()(Handler&& handler,
568
+ const Executor& e, Args&&... args) const &
515
569
  {
516
- initiation_(
570
+ static_cast<const Initiation&>(*this)(
517
571
  executor_binder<decay_t<Handler>, Executor>(
518
- executor_arg_t(), ex_, static_cast<Handler&&>(handler)),
572
+ executor_arg_t(), e, static_cast<Handler&&>(handler)),
519
573
  static_cast<Args&&>(args)...);
520
574
  }
521
-
522
- Executor ex_;
523
- Initiation initiation_;
524
575
  };
525
576
 
526
577
  template <typename Initiation, typename RawCompletionToken, typename... Args>
527
578
  static auto initiate(Initiation&& initiation,
528
579
  RawCompletionToken&& token, Args&&... args)
529
580
  -> decltype(
530
- async_initiate<T, Signature>(
531
- declval<init_wrapper<decay_t<Initiation>>>(),
532
- token.get(), static_cast<Args&&>(args)...))
581
+ async_initiate<
582
+ conditional_t<
583
+ is_const<remove_reference_t<RawCompletionToken>>::value, const T, T>,
584
+ Signature>(
585
+ declval<init_wrapper<decay_t<Initiation>>>(),
586
+ token.get(), token.get_executor(), static_cast<Args&&>(args)...))
533
587
  {
534
- return async_initiate<T, Signature>(
588
+ return async_initiate<
589
+ conditional_t<
590
+ is_const<remove_reference_t<RawCompletionToken>>::value, const T, T>,
591
+ Signature>(
535
592
  init_wrapper<decay_t<Initiation>>(
536
- token.get_executor(), static_cast<Initiation&&>(initiation)),
537
- token.get(), static_cast<Args&&>(args)...);
593
+ static_cast<Initiation&&>(initiation)),
594
+ token.get(), token.get_executor(), static_cast<Args&&>(args)...);
538
595
  }
539
596
 
540
597
  private:
@@ -542,6 +599,31 @@ private:
542
599
  async_result& operator=(const async_result&) = delete;
543
600
  };
544
601
 
602
+ template <typename Executor, typename... Signatures>
603
+ struct async_result<partial_executor_binder<Executor>, Signatures...>
604
+ {
605
+ template <typename Initiation, typename RawCompletionToken, typename... Args>
606
+ static auto initiate(Initiation&& initiation,
607
+ RawCompletionToken&& token, Args&&... args)
608
+ -> decltype(
609
+ async_initiate<Signatures...>(
610
+ static_cast<Initiation&&>(initiation),
611
+ executor_binder<
612
+ default_completion_token_t<associated_executor_t<Initiation>>,
613
+ Executor>(executor_arg_t(), token.executor_,
614
+ default_completion_token_t<associated_executor_t<Initiation>>{}),
615
+ static_cast<Args&&>(args)...))
616
+ {
617
+ return async_initiate<Signatures...>(
618
+ static_cast<Initiation&&>(initiation),
619
+ executor_binder<
620
+ default_completion_token_t<associated_executor_t<Initiation>>,
621
+ Executor>(executor_arg_t(), token.executor_,
622
+ default_completion_token_t<associated_executor_t<Initiation>>{}),
623
+ static_cast<Args&&>(args)...);
624
+ }
625
+ };
626
+
545
627
  template <template <typename, typename> class Associator,
546
628
  typename T, typename Executor, typename DefaultCandidate>
547
629
  struct associator<Associator, executor_binder<T, Executor>, DefaultCandidate>
@@ -16,10 +16,12 @@
16
16
  #endif // defined(_MSC_VER) && (_MSC_VER >= 1200)
17
17
 
18
18
  #include <boost/asio/detail/config.hpp>
19
- #include <boost/asio/detail/type_traits.hpp>
19
+ #include <boost/asio/associated_executor.hpp>
20
20
  #include <boost/asio/associated_immediate_executor.hpp>
21
21
  #include <boost/asio/associator.hpp>
22
22
  #include <boost/asio/async_result.hpp>
23
+ #include <boost/asio/detail/initiation_base.hpp>
24
+ #include <boost/asio/detail/type_traits.hpp>
23
25
 
24
26
  #include <boost/asio/detail/push_options.hpp>
25
27
 
@@ -366,6 +368,46 @@ private:
366
368
  T target_;
367
369
  };
368
370
 
371
+ /// A function object type that adapts a @ref completion_token to specify that
372
+ /// the completion handler should have the supplied executor as its associated
373
+ /// immediate executor.
374
+ /**
375
+ * May also be used directly as a completion token, in which case it adapts the
376
+ * asynchronous operation's default completion token (or boost::asio::deferred
377
+ * if no default is available).
378
+ */
379
+ template <typename Executor>
380
+ struct partial_immediate_executor_binder
381
+ {
382
+ /// Constructor that specifies associated executor.
383
+ explicit partial_immediate_executor_binder(const Executor& ex)
384
+ : executor_(ex)
385
+ {
386
+ }
387
+
388
+ /// Adapt a @ref completion_token to specify that the completion handler
389
+ /// should have the executor as its associated immediate executor.
390
+ template <typename CompletionToken>
391
+ BOOST_ASIO_NODISCARD inline
392
+ constexpr immediate_executor_binder<decay_t<CompletionToken>, Executor>
393
+ operator()(CompletionToken&& completion_token) const
394
+ {
395
+ return immediate_executor_binder<decay_t<CompletionToken>, Executor>(
396
+ static_cast<CompletionToken&&>(completion_token), executor_);
397
+ }
398
+
399
+ //private:
400
+ Executor executor_;
401
+ };
402
+
403
+ /// Create a partial completion token that associates an executor.
404
+ template <typename Executor>
405
+ BOOST_ASIO_NODISCARD inline partial_immediate_executor_binder<Executor>
406
+ bind_immediate_executor(const Executor& ex)
407
+ {
408
+ return partial_immediate_executor_binder<Executor>(ex);
409
+ }
410
+
369
411
  /// Associate an object of type @c T with a immediate executor of type
370
412
  /// @c Executor.
371
413
  template <typename Executor, typename T>
@@ -450,52 +492,52 @@ public:
450
492
  }
451
493
 
452
494
  template <typename Initiation>
453
- struct init_wrapper
495
+ struct init_wrapper : detail::initiation_base<Initiation>
454
496
  {
455
- template <typename Init>
456
- init_wrapper(const Executor& e, Init&& init)
457
- : executor_(e),
458
- initiation_(static_cast<Init&&>(init))
459
- {
460
- }
497
+ using detail::initiation_base<Initiation>::initiation_base;
461
498
 
462
499
  template <typename Handler, typename... Args>
463
- void operator()(Handler&& handler, Args&&... args)
500
+ void operator()(Handler&& handler, const Executor& e, Args&&... args) &&
464
501
  {
465
- static_cast<Initiation&&>(initiation_)(
502
+ static_cast<Initiation&&>(*this)(
466
503
  immediate_executor_binder<
467
504
  decay_t<Handler>, Executor>(
468
- executor_, static_cast<Handler&&>(handler)),
505
+ e, static_cast<Handler&&>(handler)),
469
506
  static_cast<Args&&>(args)...);
470
507
  }
471
508
 
472
509
  template <typename Handler, typename... Args>
473
- void operator()(Handler&& handler, Args&&... args) const
510
+ void operator()(Handler&& handler,
511
+ const Executor& e, Args&&... args) const &
474
512
  {
475
- initiation_(
513
+ static_cast<const Initiation&>(*this)(
476
514
  immediate_executor_binder<
477
515
  decay_t<Handler>, Executor>(
478
- executor_, static_cast<Handler&&>(handler)),
516
+ e, static_cast<Handler&&>(handler)),
479
517
  static_cast<Args&&>(args)...);
480
518
  }
481
-
482
- Executor executor_;
483
- Initiation initiation_;
484
519
  };
485
520
 
486
521
  template <typename Initiation, typename RawCompletionToken, typename... Args>
487
522
  static auto initiate(Initiation&& initiation,
488
523
  RawCompletionToken&& token, Args&&... args)
489
524
  -> decltype(
490
- async_initiate<T, Signature>(
491
- declval<init_wrapper<decay_t<Initiation>>>(),
492
- token.get(), static_cast<Args&&>(args)...))
525
+ async_initiate<
526
+ conditional_t<
527
+ is_const<remove_reference_t<RawCompletionToken>>::value, const T, T>,
528
+ Signature>(
529
+ declval<init_wrapper<decay_t<Initiation>>>(),
530
+ token.get(), token.get_immediate_executor(),
531
+ static_cast<Args&&>(args)...))
493
532
  {
494
- return async_initiate<T, Signature>(
533
+ return async_initiate<
534
+ conditional_t<
535
+ is_const<remove_reference_t<RawCompletionToken>>::value, const T, T>,
536
+ Signature>(
495
537
  init_wrapper<decay_t<Initiation>>(
496
- token.get_immediate_executor(),
497
538
  static_cast<Initiation&&>(initiation)),
498
- token.get(), static_cast<Args&&>(args)...);
539
+ token.get(), token.get_immediate_executor(),
540
+ static_cast<Args&&>(args)...);
499
541
  }
500
542
 
501
543
  private:
@@ -505,6 +547,31 @@ private:
505
547
  async_result<T, Signature> target_;
506
548
  };
507
549
 
550
+ template <typename Executor, typename... Signatures>
551
+ struct async_result<partial_immediate_executor_binder<Executor>, Signatures...>
552
+ {
553
+ template <typename Initiation, typename RawCompletionToken, typename... Args>
554
+ static auto initiate(Initiation&& initiation,
555
+ RawCompletionToken&& token, Args&&... args)
556
+ -> decltype(
557
+ async_initiate<Signatures...>(
558
+ static_cast<Initiation&&>(initiation),
559
+ immediate_executor_binder<
560
+ default_completion_token_t<associated_executor_t<Initiation>>,
561
+ Executor>(token.executor_,
562
+ default_completion_token_t<associated_executor_t<Initiation>>{}),
563
+ static_cast<Args&&>(args)...))
564
+ {
565
+ return async_initiate<Signatures...>(
566
+ static_cast<Initiation&&>(initiation),
567
+ immediate_executor_binder<
568
+ default_completion_token_t<associated_executor_t<Initiation>>,
569
+ Executor>(token.executor_,
570
+ default_completion_token_t<associated_executor_t<Initiation>>{}),
571
+ static_cast<Args&&>(args)...);
572
+ }
573
+ };
574
+
508
575
  template <template <typename, typename> class Associator,
509
576
  typename T, typename Executor, typename DefaultCandidate>
510
577
  struct associator<Associator,
@@ -2731,7 +2731,7 @@ struct literal<'0', 'X', Chars...> :
2731
2731
  } // namespace detail
2732
2732
 
2733
2733
  /// Literal operator for creating const_buffer objects from string literals.
2734
- inline BOOST_ASIO_CONST_BUFFER operator"" _buf(const char* data, std::size_t n)
2734
+ inline BOOST_ASIO_CONST_BUFFER operator ""_buf(const char* data, std::size_t n)
2735
2735
  {
2736
2736
  return BOOST_ASIO_CONST_BUFFER(data, n);
2737
2737
  }
@@ -2739,7 +2739,7 @@ inline BOOST_ASIO_CONST_BUFFER operator"" _buf(const char* data, std::size_t n)
2739
2739
  /// Literal operator for creating const_buffer objects from unbounded binary or
2740
2740
  /// hexadecimal integer literals.
2741
2741
  template <char... Chars>
2742
- inline BOOST_ASIO_CONST_BUFFER operator"" _buf()
2742
+ inline BOOST_ASIO_CONST_BUFFER operator ""_buf()
2743
2743
  {
2744
2744
  return BOOST_ASIO_CONST_BUFFER(
2745
2745
  +detail::literal<Chars...>::data,
@@ -130,7 +130,7 @@ public:
130
130
  service_->unregister_buffers();
131
131
  #endif // defined(BOOST_ASIO_HAS_IO_URING)
132
132
  }
133
-
133
+
134
134
  /// Move assignment.
135
135
  buffer_registration& operator=(buffer_registration&& other) noexcept
136
136
  {