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
@@ -32,34 +32,97 @@ namespace detail
32
32
  template <typename, typename> class initiate_async_range_connect;
33
33
  template <typename, typename> class initiate_async_iterator_connect;
34
34
 
35
- char (&has_iterator_helper(...))[2];
35
+ template <typename T, typename = void, typename = void>
36
+ struct is_endpoint_sequence_helper : false_type
37
+ {
38
+ };
36
39
 
37
40
  template <typename T>
38
- char has_iterator_helper(T*, typename T::iterator* = 0);
41
+ struct is_endpoint_sequence_helper<T,
42
+ void_t<
43
+ decltype(declval<T>().begin())
44
+ >,
45
+ void_t<
46
+ decltype(declval<T>().end())
47
+ >
48
+ > : true_type
49
+ {
50
+ };
39
51
 
40
- template <typename T>
41
- struct has_iterator_typedef
52
+ template <typename T, typename Iterator, typename = void>
53
+ struct is_connect_condition_helper : false_type
54
+ {
55
+ };
56
+
57
+ template <typename T, typename Iterator>
58
+ struct is_connect_condition_helper<T, Iterator,
59
+ enable_if_t<
60
+ is_same<
61
+ result_of_t<T(boost::system::error_code, Iterator)>,
62
+ Iterator
63
+ >::value
64
+ >
65
+ > : true_type
66
+ {
67
+ };
68
+
69
+ template <typename T, typename Iterator>
70
+ struct is_connect_condition_helper<T, Iterator,
71
+ enable_if_t<
72
+ is_same<
73
+ result_of_t<T(boost::system::error_code,
74
+ decltype(*declval<Iterator>()))>,
75
+ bool
76
+ >::value
77
+ >
78
+ > : true_type
42
79
  {
43
- enum { value = (sizeof((has_iterator_helper)((T*)(0))) == 1) };
80
+ };
81
+
82
+ struct default_connect_condition
83
+ {
84
+ template <typename Endpoint>
85
+ bool operator()(const boost::system::error_code&, const Endpoint&)
86
+ {
87
+ return true;
88
+ }
44
89
  };
45
90
  } // namespace detail
46
91
 
92
+ #if defined(GENERATING_DOCUMENTATION)
93
+
47
94
  /// Type trait used to determine whether a type is an endpoint sequence that can
48
95
  /// be used with with @c connect and @c async_connect.
49
96
  template <typename T>
50
97
  struct is_endpoint_sequence
51
98
  {
52
- #if defined(GENERATING_DOCUMENTATION)
53
99
  /// The value member is true if the type may be used as an endpoint sequence.
54
- static const bool value;
55
- #else
56
- enum
57
- {
58
- value = detail::has_iterator_typedef<T>::value
59
- };
60
- #endif
100
+ static const bool value = automatically_determined;
101
+ };
102
+
103
+ /// Trait for determining whether a function object is a connect condition that
104
+ /// can be used with @c connect and @c async_connect.
105
+ template <typename T, typename Iterator>
106
+ struct is_connect_condition
107
+ {
108
+ /// The value member is true if the type may be used as a connect condition.
109
+ static constexpr bool value = automatically_determined;
110
+ };
111
+
112
+ #else // defined(GENERATING_DOCUMENTATION)
113
+
114
+ template <typename T>
115
+ struct is_endpoint_sequence : detail::is_endpoint_sequence_helper<T>
116
+ {
117
+ };
118
+
119
+ template <typename T, typename Iterator>
120
+ struct is_connect_condition : detail::is_connect_condition_helper<T, Iterator>
121
+ {
61
122
  };
62
123
 
124
+ #endif // defined(GENERATING_DOCUMENTATION)
125
+
63
126
  /**
64
127
  * @defgroup connect boost::asio::connect
65
128
  *
@@ -95,7 +158,9 @@ struct is_endpoint_sequence
95
158
  template <typename Protocol, typename Executor, typename EndpointSequence>
96
159
  typename Protocol::endpoint connect(basic_socket<Protocol, Executor>& s,
97
160
  const EndpointSequence& endpoints,
98
- constraint_t<is_endpoint_sequence<EndpointSequence>::value> = 0);
161
+ constraint_t<
162
+ is_endpoint_sequence<EndpointSequence>::value
163
+ > = 0);
99
164
 
100
165
  /// Establishes a socket connection by trying each endpoint in a sequence.
101
166
  /**
@@ -130,7 +195,9 @@ typename Protocol::endpoint connect(basic_socket<Protocol, Executor>& s,
130
195
  template <typename Protocol, typename Executor, typename EndpointSequence>
131
196
  typename Protocol::endpoint connect(basic_socket<Protocol, Executor>& s,
132
197
  const EndpointSequence& endpoints, boost::system::error_code& ec,
133
- constraint_t<is_endpoint_sequence<EndpointSequence>::value> = 0);
198
+ constraint_t<
199
+ is_endpoint_sequence<EndpointSequence>::value
200
+ > = 0);
134
201
 
135
202
  #if !defined(BOOST_ASIO_NO_DEPRECATED)
136
203
  /// (Deprecated: Use range overload.) Establishes a socket connection by trying
@@ -159,7 +226,9 @@ typename Protocol::endpoint connect(basic_socket<Protocol, Executor>& s,
159
226
  */
160
227
  template <typename Protocol, typename Executor, typename Iterator>
161
228
  Iterator connect(basic_socket<Protocol, Executor>& s, Iterator begin,
162
- constraint_t<!is_endpoint_sequence<Iterator>::value> = 0);
229
+ constraint_t<
230
+ !is_endpoint_sequence<Iterator>::value
231
+ > = 0);
163
232
 
164
233
  /// (Deprecated: Use range overload.) Establishes a socket connection by trying
165
234
  /// each endpoint in a sequence.
@@ -188,7 +257,9 @@ Iterator connect(basic_socket<Protocol, Executor>& s, Iterator begin,
188
257
  template <typename Protocol, typename Executor, typename Iterator>
189
258
  Iterator connect(basic_socket<Protocol, Executor>& s,
190
259
  Iterator begin, boost::system::error_code& ec,
191
- constraint_t<!is_endpoint_sequence<Iterator>::value> = 0);
260
+ constraint_t<
261
+ !is_endpoint_sequence<Iterator>::value
262
+ > = 0);
192
263
  #endif // !defined(BOOST_ASIO_NO_DEPRECATED)
193
264
 
194
265
  /// Establishes a socket connection by trying each endpoint in a sequence.
@@ -314,7 +385,13 @@ template <typename Protocol, typename Executor,
314
385
  typename EndpointSequence, typename ConnectCondition>
315
386
  typename Protocol::endpoint connect(basic_socket<Protocol, Executor>& s,
316
387
  const EndpointSequence& endpoints, ConnectCondition connect_condition,
317
- constraint_t<is_endpoint_sequence<EndpointSequence>::value> = 0);
388
+ constraint_t<
389
+ is_endpoint_sequence<EndpointSequence>::value
390
+ > = 0,
391
+ constraint_t<
392
+ is_connect_condition<ConnectCondition,
393
+ decltype(declval<const EndpointSequence&>().begin())>::value
394
+ > = 0);
318
395
 
319
396
  /// Establishes a socket connection by trying each endpoint in a sequence.
320
397
  /**
@@ -381,7 +458,13 @@ template <typename Protocol, typename Executor,
381
458
  typename Protocol::endpoint connect(basic_socket<Protocol, Executor>& s,
382
459
  const EndpointSequence& endpoints, ConnectCondition connect_condition,
383
460
  boost::system::error_code& ec,
384
- constraint_t<is_endpoint_sequence<EndpointSequence>::value> = 0);
461
+ constraint_t<
462
+ is_endpoint_sequence<EndpointSequence>::value
463
+ > = 0,
464
+ constraint_t<
465
+ is_connect_condition<ConnectCondition,
466
+ decltype(declval<const EndpointSequence&>().begin())>::value
467
+ > = 0);
385
468
 
386
469
  #if !defined(BOOST_ASIO_NO_DEPRECATED)
387
470
  /// (Deprecated: Use range overload.) Establishes a socket connection by trying
@@ -423,7 +506,12 @@ template <typename Protocol, typename Executor,
423
506
  typename Iterator, typename ConnectCondition>
424
507
  Iterator connect(basic_socket<Protocol, Executor>& s,
425
508
  Iterator begin, ConnectCondition connect_condition,
426
- constraint_t<!is_endpoint_sequence<Iterator>::value> = 0);
509
+ constraint_t<
510
+ !is_endpoint_sequence<Iterator>::value
511
+ > = 0,
512
+ constraint_t<
513
+ is_connect_condition<ConnectCondition, Iterator>::value
514
+ > = 0);
427
515
 
428
516
  /// (Deprecated: Use range overload.) Establishes a socket connection by trying
429
517
  /// each endpoint in a sequence.
@@ -464,7 +552,12 @@ template <typename Protocol, typename Executor,
464
552
  typename Iterator, typename ConnectCondition>
465
553
  Iterator connect(basic_socket<Protocol, Executor>& s, Iterator begin,
466
554
  ConnectCondition connect_condition, boost::system::error_code& ec,
467
- constraint_t<!is_endpoint_sequence<Iterator>::value> = 0);
555
+ constraint_t<
556
+ !is_endpoint_sequence<Iterator>::value
557
+ > = 0,
558
+ constraint_t<
559
+ is_connect_condition<ConnectCondition, Iterator>::value
560
+ > = 0);
468
561
  #endif // !defined(BOOST_ASIO_NO_DEPRECATED)
469
562
 
470
563
  /// Establishes a socket connection by trying each endpoint in a sequence.
@@ -524,7 +617,10 @@ Iterator connect(basic_socket<Protocol, Executor>& s, Iterator begin,
524
617
  template <typename Protocol, typename Executor,
525
618
  typename Iterator, typename ConnectCondition>
526
619
  Iterator connect(basic_socket<Protocol, Executor>& s, Iterator begin,
527
- Iterator end, ConnectCondition connect_condition);
620
+ Iterator end, ConnectCondition connect_condition,
621
+ constraint_t<
622
+ is_connect_condition<ConnectCondition, Iterator>::value
623
+ > = 0);
528
624
 
529
625
  /// Establishes a socket connection by trying each endpoint in a sequence.
530
626
  /**
@@ -593,7 +689,10 @@ template <typename Protocol, typename Executor,
593
689
  typename Iterator, typename ConnectCondition>
594
690
  Iterator connect(basic_socket<Protocol, Executor>& s,
595
691
  Iterator begin, Iterator end, ConnectCondition connect_condition,
596
- boost::system::error_code& ec);
692
+ boost::system::error_code& ec,
693
+ constraint_t<
694
+ is_connect_condition<ConnectCondition, Iterator>::value
695
+ > = 0);
597
696
 
598
697
  /*@}*/
599
698
 
@@ -637,7 +736,7 @@ Iterator connect(basic_socket<Protocol, Executor>& s,
637
736
  * Regardless of whether the asynchronous operation completes immediately or
638
737
  * not, the completion handler will not be invoked from within this function.
639
738
  * On immediate completion, invocation of the handler will be performed in a
640
- * manner equivalent to using boost::asio::post().
739
+ * manner equivalent to using boost::asio::async_immediate().
641
740
  *
642
741
  * @par Completion Signature
643
742
  * @code void(boost::system::error_code, typename Protocol::endpoint) @endcode
@@ -686,15 +785,27 @@ template <typename Protocol, typename Executor, typename EndpointSequence,
686
785
  BOOST_ASIO_COMPLETION_TOKEN_FOR(void (boost::system::error_code,
687
786
  typename Protocol::endpoint)) RangeConnectToken
688
787
  = default_completion_token_t<Executor>>
689
- auto async_connect(basic_socket<Protocol, Executor>& s,
788
+ inline auto async_connect(basic_socket<Protocol, Executor>& s,
690
789
  const EndpointSequence& endpoints,
691
790
  RangeConnectToken&& token = default_completion_token_t<Executor>(),
692
- constraint_t<is_endpoint_sequence<EndpointSequence>::value> = 0)
791
+ constraint_t<
792
+ is_endpoint_sequence<EndpointSequence>::value
793
+ > = 0,
794
+ constraint_t<
795
+ !is_connect_condition<RangeConnectToken,
796
+ decltype(declval<const EndpointSequence&>().begin())>::value
797
+ > = 0)
693
798
  -> decltype(
694
799
  async_initiate<RangeConnectToken,
695
800
  void (boost::system::error_code, typename Protocol::endpoint)>(
696
801
  declval<detail::initiate_async_range_connect<Protocol, Executor>>(),
697
- token, endpoints, declval<detail::default_connect_condition>()));
802
+ token, endpoints, declval<detail::default_connect_condition>()))
803
+ {
804
+ return async_initiate<RangeConnectToken,
805
+ void (boost::system::error_code, typename Protocol::endpoint)>(
806
+ detail::initiate_async_range_connect<Protocol, Executor>(s),
807
+ token, endpoints, detail::default_connect_condition());
808
+ }
698
809
 
699
810
  #if !defined(BOOST_ASIO_NO_DEPRECATED)
700
811
  /// (Deprecated: Use range overload.) Asynchronously establishes a socket
@@ -729,7 +840,7 @@ auto async_connect(basic_socket<Protocol, Executor>& s,
729
840
  * Regardless of whether the asynchronous operation completes immediately or
730
841
  * not, the completion handler will not be invoked from within this function.
731
842
  * On immediate completion, invocation of the handler will be performed in a
732
- * manner equivalent to using boost::asio::post().
843
+ * manner equivalent to using boost::asio::async_immediate().
733
844
  *
734
845
  * @par Completion Signature
735
846
  * @code void(boost::system::error_code, Iterator) @endcode
@@ -751,15 +862,29 @@ auto async_connect(basic_socket<Protocol, Executor>& s,
751
862
  template <typename Protocol, typename Executor, typename Iterator,
752
863
  BOOST_ASIO_COMPLETION_TOKEN_FOR(void (boost::system::error_code,
753
864
  Iterator)) IteratorConnectToken = default_completion_token_t<Executor>>
754
- auto async_connect(basic_socket<Protocol, Executor>& s, Iterator begin,
865
+ inline auto async_connect(basic_socket<Protocol, Executor>& s, Iterator begin,
755
866
  IteratorConnectToken&& token = default_completion_token_t<Executor>(),
756
- constraint_t<!is_endpoint_sequence<Iterator>::value> = 0)
867
+ constraint_t<
868
+ !is_endpoint_sequence<Iterator>::value
869
+ > = 0,
870
+ constraint_t<
871
+ !is_same<Iterator, decay_t<IteratorConnectToken>>::value
872
+ > = 0,
873
+ constraint_t<
874
+ !is_connect_condition<IteratorConnectToken, Iterator>::value
875
+ > = 0)
757
876
  -> decltype(
758
877
  async_initiate<IteratorConnectToken,
759
878
  void (boost::system::error_code, Iterator)>(
760
879
  declval<detail::initiate_async_iterator_connect<Protocol, Executor>>(),
761
880
  token, begin, Iterator(),
762
- declval<detail::default_connect_condition>()));
881
+ declval<detail::default_connect_condition>()))
882
+ {
883
+ return async_initiate<IteratorConnectToken,
884
+ void (boost::system::error_code, Iterator)>(
885
+ detail::initiate_async_iterator_connect<Protocol, Executor>(s),
886
+ token, begin, Iterator(), detail::default_connect_condition());
887
+ }
763
888
  #endif // !defined(BOOST_ASIO_NO_DEPRECATED)
764
889
 
765
890
  /// Asynchronously establishes a socket connection by trying each endpoint in a
@@ -796,7 +921,7 @@ auto async_connect(basic_socket<Protocol, Executor>& s, Iterator begin,
796
921
  * Regardless of whether the asynchronous operation completes immediately or
797
922
  * not, the completion handler will not be invoked from within this function.
798
923
  * On immediate completion, invocation of the handler will be performed in a
799
- * manner equivalent to using boost::asio::post().
924
+ * manner equivalent to using boost::asio::async_immediate().
800
925
  *
801
926
  * @par Completion Signature
802
927
  * @code void(boost::system::error_code, Iterator) @endcode
@@ -830,14 +955,23 @@ auto async_connect(basic_socket<Protocol, Executor>& s, Iterator begin,
830
955
  template <typename Protocol, typename Executor, typename Iterator,
831
956
  BOOST_ASIO_COMPLETION_TOKEN_FOR(void (boost::system::error_code,
832
957
  Iterator)) IteratorConnectToken = default_completion_token_t<Executor>>
833
- auto async_connect(
958
+ inline auto async_connect(
834
959
  basic_socket<Protocol, Executor>& s, Iterator begin, Iterator end,
835
- IteratorConnectToken&& token = default_completion_token_t<Executor>())
960
+ IteratorConnectToken&& token = default_completion_token_t<Executor>(),
961
+ constraint_t<
962
+ !is_connect_condition<IteratorConnectToken, Iterator>::value
963
+ > = 0)
836
964
  -> decltype(
837
965
  async_initiate<IteratorConnectToken,
838
966
  void (boost::system::error_code, Iterator)>(
839
967
  declval<detail::initiate_async_iterator_connect<Protocol, Executor>>(),
840
- token, begin, end, declval<detail::default_connect_condition>()));
968
+ token, begin, end, declval<detail::default_connect_condition>()))
969
+ {
970
+ return async_initiate<IteratorConnectToken,
971
+ void (boost::system::error_code, Iterator)>(
972
+ detail::initiate_async_iterator_connect<Protocol, Executor>(s),
973
+ token, begin, end, detail::default_connect_condition());
974
+ }
841
975
 
842
976
  /// Asynchronously establishes a socket connection by trying each endpoint in a
843
977
  /// sequence.
@@ -882,7 +1016,7 @@ auto async_connect(
882
1016
  * Regardless of whether the asynchronous operation completes immediately or
883
1017
  * not, the completion handler will not be invoked from within this function.
884
1018
  * On immediate completion, invocation of the handler will be performed in a
885
- * manner equivalent to using boost::asio::post().
1019
+ * manner equivalent to using boost::asio::async_immediate().
886
1020
  *
887
1021
  * @par Completion Signature
888
1022
  * @code void(boost::system::error_code, typename Protocol::endpoint) @endcode
@@ -955,15 +1089,27 @@ template <typename Protocol, typename Executor,
955
1089
  BOOST_ASIO_COMPLETION_TOKEN_FOR(void (boost::system::error_code,
956
1090
  typename Protocol::endpoint)) RangeConnectToken
957
1091
  = default_completion_token_t<Executor>>
958
- auto async_connect(basic_socket<Protocol, Executor>& s,
1092
+ inline auto async_connect(basic_socket<Protocol, Executor>& s,
959
1093
  const EndpointSequence& endpoints, ConnectCondition connect_condition,
960
1094
  RangeConnectToken&& token = default_completion_token_t<Executor>(),
961
- constraint_t<is_endpoint_sequence<EndpointSequence>::value> = 0)
1095
+ constraint_t<
1096
+ is_endpoint_sequence<EndpointSequence>::value
1097
+ > = 0,
1098
+ constraint_t<
1099
+ is_connect_condition<ConnectCondition,
1100
+ decltype(declval<const EndpointSequence&>().begin())>::value
1101
+ > = 0)
962
1102
  -> decltype(
963
1103
  async_initiate<RangeConnectToken,
964
1104
  void (boost::system::error_code, typename Protocol::endpoint)>(
965
1105
  declval<detail::initiate_async_range_connect<Protocol, Executor>>(),
966
- token, endpoints, connect_condition));
1106
+ token, endpoints, connect_condition))
1107
+ {
1108
+ return async_initiate<RangeConnectToken,
1109
+ void (boost::system::error_code, typename Protocol::endpoint)>(
1110
+ detail::initiate_async_range_connect<Protocol, Executor>(s),
1111
+ token, endpoints, connect_condition);
1112
+ }
967
1113
 
968
1114
  #if !defined(BOOST_ASIO_NO_DEPRECATED)
969
1115
  /// (Deprecated: Use range overload.) Asynchronously establishes a socket
@@ -1009,7 +1155,7 @@ auto async_connect(basic_socket<Protocol, Executor>& s,
1009
1155
  * Regardless of whether the asynchronous operation completes immediately or
1010
1156
  * not, the completion handler will not be invoked from within this function.
1011
1157
  * On immediate completion, invocation of the handler will be performed in a
1012
- * manner equivalent to using boost::asio::post().
1158
+ * manner equivalent to using boost::asio::async_immediate().
1013
1159
  *
1014
1160
  * @par Completion Signature
1015
1161
  * @code void(boost::system::error_code, Iterator) @endcode
@@ -1032,15 +1178,26 @@ template <typename Protocol, typename Executor,
1032
1178
  typename Iterator, typename ConnectCondition,
1033
1179
  BOOST_ASIO_COMPLETION_TOKEN_FOR(void (boost::system::error_code,
1034
1180
  Iterator)) IteratorConnectToken = default_completion_token_t<Executor>>
1035
- auto async_connect(basic_socket<Protocol, Executor>& s,
1181
+ inline auto async_connect(basic_socket<Protocol, Executor>& s,
1036
1182
  Iterator begin, ConnectCondition connect_condition,
1037
1183
  IteratorConnectToken&& token = default_completion_token_t<Executor>(),
1038
- constraint_t<!is_endpoint_sequence<Iterator>::value> = 0)
1184
+ constraint_t<
1185
+ !is_endpoint_sequence<Iterator>::value
1186
+ > = 0,
1187
+ constraint_t<
1188
+ is_connect_condition<ConnectCondition, Iterator>::value
1189
+ > = 0)
1039
1190
  -> decltype(
1040
1191
  async_initiate<IteratorConnectToken,
1041
1192
  void (boost::system::error_code, Iterator)>(
1042
1193
  declval<detail::initiate_async_iterator_connect<Protocol, Executor>>(),
1043
- token, begin, Iterator(), connect_condition));
1194
+ token, begin, Iterator(), connect_condition))
1195
+ {
1196
+ return async_initiate<IteratorConnectToken,
1197
+ void (boost::system::error_code, Iterator)>(
1198
+ detail::initiate_async_iterator_connect<Protocol, Executor>(s),
1199
+ token, begin, Iterator(), connect_condition);
1200
+ }
1044
1201
  #endif // !defined(BOOST_ASIO_NO_DEPRECATED)
1045
1202
 
1046
1203
  /// Asynchronously establishes a socket connection by trying each endpoint in a
@@ -1088,7 +1245,7 @@ auto async_connect(basic_socket<Protocol, Executor>& s,
1088
1245
  * Regardless of whether the asynchronous operation completes immediately or
1089
1246
  * not, the completion handler will not be invoked from within this function.
1090
1247
  * On immediate completion, invocation of the handler will be performed in a
1091
- * manner equivalent to using boost::asio::post().
1248
+ * manner equivalent to using boost::asio::async_immediate().
1092
1249
  *
1093
1250
  * @par Completion Signature
1094
1251
  * @code void(boost::system::error_code, Iterator) @endcode
@@ -1161,14 +1318,23 @@ template <typename Protocol, typename Executor,
1161
1318
  typename Iterator, typename ConnectCondition,
1162
1319
  BOOST_ASIO_COMPLETION_TOKEN_FOR(void (boost::system::error_code,
1163
1320
  Iterator)) IteratorConnectToken = default_completion_token_t<Executor>>
1164
- auto async_connect(basic_socket<Protocol, Executor>& s,
1321
+ inline auto async_connect(basic_socket<Protocol, Executor>& s,
1165
1322
  Iterator begin, Iterator end, ConnectCondition connect_condition,
1166
- IteratorConnectToken&& token = default_completion_token_t<Executor>())
1323
+ IteratorConnectToken&& token = default_completion_token_t<Executor>(),
1324
+ constraint_t<
1325
+ is_connect_condition<ConnectCondition, Iterator>::value
1326
+ > = 0)
1167
1327
  -> decltype(
1168
1328
  async_initiate<IteratorConnectToken,
1169
1329
  void (boost::system::error_code, Iterator)>(
1170
1330
  declval<detail::initiate_async_iterator_connect<Protocol, Executor>>(),
1171
- token, begin, end, connect_condition));
1331
+ token, begin, end, connect_condition))
1332
+ {
1333
+ return async_initiate<IteratorConnectToken,
1334
+ void (boost::system::error_code, Iterator)>(
1335
+ detail::initiate_async_iterator_connect<Protocol, Executor>(s),
1336
+ token, begin, end, connect_condition);
1337
+ }
1172
1338
 
1173
1339
  /*@}*/
1174
1340
 
@@ -1179,4 +1345,4 @@ auto async_connect(basic_socket<Protocol, Executor>& s,
1179
1345
 
1180
1346
  #include <boost/asio/impl/connect.hpp>
1181
1347
 
1182
- #endif
1348
+ #endif // BOOST_ASIO_CONNECT_HPP
@@ -201,7 +201,7 @@ class coroutine_ref;
201
201
  * The @c fork pseudo-keyword is used when "forking" a coroutine, i.e. splitting
202
202
  * it into two (or more) copies. One use of @c fork is in a server, where a new
203
203
  * coroutine is created to handle each client connection:
204
- *
204
+ *
205
205
  * @code reenter (this)
206
206
  * {
207
207
  * do
@@ -212,9 +212,9 @@ class coroutine_ref;
212
212
  * } while (is_parent());
213
213
  * ... client-specific handling follows ...
214
214
  * } @endcode
215
- *
215
+ *
216
216
  * The logical steps involved in a @c fork are:
217
- *
217
+ *
218
218
  * @li @c fork saves the current state of the coroutine.
219
219
  * @li The statement creates a copy of the coroutine and either executes it
220
220
  * immediately or schedules it for later execution.
@@ -259,7 +259,6 @@ private:
259
259
  int value_;
260
260
  };
261
261
 
262
-
263
262
  namespace detail {
264
263
 
265
264
  class coroutine_ref
@@ -0,0 +1,91 @@
1
+ //
2
+ // default_completion_token.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_DEFAULT_COMPLETION_TOKEN_HPP
12
+ #define BOOST_ASIO_DEFAULT_COMPLETION_TOKEN_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/detail/type_traits.hpp>
20
+
21
+ #include <boost/asio/detail/push_options.hpp>
22
+
23
+ namespace boost {
24
+ namespace asio {
25
+
26
+ class deferred_t;
27
+
28
+ namespace detail {
29
+
30
+ template <typename T, typename = void>
31
+ struct default_completion_token_impl
32
+ {
33
+ typedef deferred_t type;
34
+ };
35
+
36
+ template <typename T>
37
+ struct default_completion_token_impl<T,
38
+ void_t<typename T::default_completion_token_type>
39
+ >
40
+ {
41
+ typedef typename T::default_completion_token_type type;
42
+ };
43
+
44
+ } // namespace detail
45
+
46
+ #if defined(GENERATING_DOCUMENTATION)
47
+
48
+ /// Traits type used to determine the default completion token type associated
49
+ /// with a type (such as an executor).
50
+ /**
51
+ * A program may specialise this traits type if the @c T template parameter in
52
+ * the specialisation is a user-defined type.
53
+ *
54
+ * Specialisations of this trait may provide a nested typedef @c type, which is
55
+ * a default-constructible completion token type.
56
+ *
57
+ * If not otherwise specialised, the default completion token type is
58
+ * boost::asio::deferred_t.
59
+ */
60
+ template <typename T>
61
+ struct default_completion_token
62
+ {
63
+ /// If @c T has a nested type @c default_completion_token_type,
64
+ /// <tt>T::default_completion_token_type</tt>. Otherwise the typedef @c type
65
+ /// is boost::asio::deferred_t.
66
+ typedef see_below type;
67
+ };
68
+ #else
69
+ template <typename T>
70
+ struct default_completion_token
71
+ : detail::default_completion_token_impl<T>
72
+ {
73
+ };
74
+ #endif
75
+
76
+ template <typename T>
77
+ using default_completion_token_t = typename default_completion_token<T>::type;
78
+
79
+ #define BOOST_ASIO_DEFAULT_COMPLETION_TOKEN_TYPE(e) \
80
+ = typename ::boost::asio::default_completion_token<e>::type
81
+ #define BOOST_ASIO_DEFAULT_COMPLETION_TOKEN(e) \
82
+ = typename ::boost::asio::default_completion_token<e>::type()
83
+
84
+ } // namespace asio
85
+ } // namespace boost
86
+
87
+ #include <boost/asio/detail/pop_options.hpp>
88
+
89
+ #include <boost/asio/deferred.hpp>
90
+
91
+ #endif // BOOST_ASIO_DEFAULT_COMPLETION_TOKEN_HPP
@@ -185,7 +185,7 @@ template <typename Function>
185
185
  class deferred_function
186
186
  {
187
187
  public:
188
- /// Constructor.
188
+ /// Constructor.
189
189
  template <typename F>
190
190
  constexpr explicit deferred_function(deferred_init_tag, F&& function)
191
191
  : function_(static_cast<F&&>(function))
@@ -326,7 +326,8 @@ private:
326
326
  detail::index_sequence<I...>) const &
327
327
  -> decltype(
328
328
  async_initiate<CompletionToken, Signature>(
329
- initiation_t(initiation_), token, std::get<I>(init_args_)...))
329
+ conditional_t<true, initiation_t, CompletionToken>(initiation_),
330
+ token, std::get<I>(init_args_)...))
330
331
  {
331
332
  return async_initiate<CompletionToken, Signature>(
332
333
  initiation_t(initiation_), token, std::get<I>(init_args_)...);
@@ -593,8 +594,11 @@ struct is_deferred<deferred_conditional<OnTrue, OnFalse>> : true_type
593
594
  * The deferred_t class is used to indicate that an asynchronous operation
594
595
  * should return a function object which is itself an initiation function. A
595
596
  * deferred_t object may be passed as a completion token to an asynchronous
596
- * operation, typically using the special value @c boost::asio::deferred. For
597
- * example:
597
+ * operation, typically as the default completion token:
598
+ *
599
+ * @code auto my_deferred_op = my_socket.async_read_some(my_buffer); @endcode
600
+ *
601
+ * or by explicitly passing the special value @c boost::asio::deferred:
598
602
  *
599
603
  * @code auto my_deferred_op
600
604
  * = my_socket.async_read_some(my_buffer,
@@ -705,7 +709,7 @@ inline auto operator|(Head head, Tail&& tail)
705
709
  /**
706
710
  * See the documentation for boost::asio::deferred_t for a usage example.
707
711
  */
708
- constexpr deferred_t deferred;
712
+ BOOST_ASIO_INLINE_VARIABLE constexpr deferred_t deferred;
709
713
 
710
714
  } // namespace asio
711
715
  } // namespace boost
@@ -39,7 +39,7 @@ namespace asio {
39
39
  class detached_t
40
40
  {
41
41
  public:
42
- /// Constructor.
42
+ /// Constructor.
43
43
  constexpr detached_t()
44
44
  {
45
45
  }
@@ -95,7 +95,7 @@ public:
95
95
  /**
96
96
  * See the documentation for boost::asio::detached_t for a usage example.
97
97
  */
98
- constexpr detached_t detached;
98
+ BOOST_ASIO_INLINE_VARIABLE constexpr detached_t detached;
99
99
 
100
100
  } // namespace asio
101
101
  } // namespace boost
@@ -114,7 +114,7 @@ private:
114
114
 
115
115
  // The offset to the end of the unread data.
116
116
  size_type end_offset_;
117
-
117
+
118
118
  // The data in the buffer.
119
119
  std::vector<byte_type> buffer_;
120
120
  };