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
@@ -185,6 +185,9 @@ std::size_t read(SyncReadStream& s, const MutableBufferSequence& buffers,
185
185
  CompletionCondition completion_condition,
186
186
  constraint_t<
187
187
  is_mutable_buffer_sequence<MutableBufferSequence>::value
188
+ > = 0,
189
+ constraint_t<
190
+ is_completion_condition<CompletionCondition>::value
188
191
  > = 0);
189
192
 
190
193
  /// Attempt to read a certain amount of data from a stream before returning.
@@ -232,6 +235,9 @@ std::size_t read(SyncReadStream& s, const MutableBufferSequence& buffers,
232
235
  CompletionCondition completion_condition, boost::system::error_code& ec,
233
236
  constraint_t<
234
237
  is_mutable_buffer_sequence<MutableBufferSequence>::value
238
+ > = 0,
239
+ constraint_t<
240
+ is_completion_condition<CompletionCondition>::value
235
241
  > = 0);
236
242
 
237
243
  #if !defined(BOOST_ASIO_NO_DYNAMIC_BUFFER_V1)
@@ -356,6 +362,9 @@ std::size_t read(SyncReadStream& s,
356
362
  > = 0,
357
363
  constraint_t<
358
364
  !is_dynamic_buffer_v2<decay_t<DynamicBuffer_v1>>::value
365
+ > = 0,
366
+ constraint_t<
367
+ is_completion_condition<CompletionCondition>::value
359
368
  > = 0);
360
369
 
361
370
  /// Attempt to read a certain amount of data from a stream before returning.
@@ -405,6 +414,9 @@ std::size_t read(SyncReadStream& s,
405
414
  > = 0,
406
415
  constraint_t<
407
416
  !is_dynamic_buffer_v2<decay_t<DynamicBuffer_v1>>::value
417
+ > = 0,
418
+ constraint_t<
419
+ is_completion_condition<CompletionCondition>::value
408
420
  > = 0);
409
421
 
410
422
  #if !defined(BOOST_ASIO_NO_EXTENSIONS)
@@ -507,7 +519,10 @@ std::size_t read(SyncReadStream& s, basic_streambuf<Allocator>& b,
507
519
  template <typename SyncReadStream, typename Allocator,
508
520
  typename CompletionCondition>
509
521
  std::size_t read(SyncReadStream& s, basic_streambuf<Allocator>& b,
510
- CompletionCondition completion_condition);
522
+ CompletionCondition completion_condition,
523
+ constraint_t<
524
+ is_completion_condition<CompletionCondition>::value
525
+ > = 0);
511
526
 
512
527
  /// Attempt to read a certain amount of data from a stream before returning.
513
528
  /**
@@ -548,7 +563,10 @@ std::size_t read(SyncReadStream& s, basic_streambuf<Allocator>& b,
548
563
  template <typename SyncReadStream, typename Allocator,
549
564
  typename CompletionCondition>
550
565
  std::size_t read(SyncReadStream& s, basic_streambuf<Allocator>& b,
551
- CompletionCondition completion_condition, boost::system::error_code& ec);
566
+ CompletionCondition completion_condition, boost::system::error_code& ec,
567
+ constraint_t<
568
+ is_completion_condition<CompletionCondition>::value
569
+ > = 0);
552
570
 
553
571
  #endif // !defined(BOOST_ASIO_NO_IOSTREAM)
554
572
  #endif // !defined(BOOST_ASIO_NO_EXTENSIONS)
@@ -662,6 +680,9 @@ std::size_t read(SyncReadStream& s, DynamicBuffer_v2 buffers,
662
680
  CompletionCondition completion_condition,
663
681
  constraint_t<
664
682
  is_dynamic_buffer_v2<DynamicBuffer_v2>::value
683
+ > = 0,
684
+ constraint_t<
685
+ is_completion_condition<CompletionCondition>::value
665
686
  > = 0);
666
687
 
667
688
  /// Attempt to read a certain amount of data from a stream before returning.
@@ -707,6 +728,9 @@ std::size_t read(SyncReadStream& s, DynamicBuffer_v2 buffers,
707
728
  CompletionCondition completion_condition, boost::system::error_code& ec,
708
729
  constraint_t<
709
730
  is_dynamic_buffer_v2<DynamicBuffer_v2>::value
731
+ > = 0,
732
+ constraint_t<
733
+ is_completion_condition<CompletionCondition>::value
710
734
  > = 0);
711
735
 
712
736
  /*@}*/
@@ -763,7 +787,7 @@ std::size_t read(SyncReadStream& s, DynamicBuffer_v2 buffers,
763
787
  * Regardless of whether the asynchronous operation completes immediately or
764
788
  * not, the completion handler will not be invoked from within this function.
765
789
  * On immediate completion, invocation of the handler will be performed in a
766
- * manner equivalent to using boost::asio::post().
790
+ * manner equivalent to using boost::asio::async_immediate().
767
791
  *
768
792
  * @par Completion Signature
769
793
  * @code void(boost::system::error_code, std::size_t) @endcode
@@ -798,17 +822,26 @@ template <typename AsyncReadStream, typename MutableBufferSequence,
798
822
  BOOST_ASIO_COMPLETION_TOKEN_FOR(void (boost::system::error_code,
799
823
  std::size_t)) ReadToken = default_completion_token_t<
800
824
  typename AsyncReadStream::executor_type>>
801
- auto async_read(AsyncReadStream& s, const MutableBufferSequence& buffers,
825
+ inline auto async_read(AsyncReadStream& s, const MutableBufferSequence& buffers,
802
826
  ReadToken&& token = default_completion_token_t<
803
827
  typename AsyncReadStream::executor_type>(),
804
828
  constraint_t<
805
829
  is_mutable_buffer_sequence<MutableBufferSequence>::value
830
+ > = 0,
831
+ constraint_t<
832
+ !is_completion_condition<ReadToken>::value
806
833
  > = 0)
807
834
  -> decltype(
808
835
  async_initiate<ReadToken,
809
836
  void (boost::system::error_code, std::size_t)>(
810
837
  declval<detail::initiate_async_read<AsyncReadStream>>(),
811
- token, buffers, transfer_all()));
838
+ token, buffers, transfer_all()))
839
+ {
840
+ return async_initiate<ReadToken,
841
+ void (boost::system::error_code, std::size_t)>(
842
+ detail::initiate_async_read<AsyncReadStream>(s),
843
+ token, buffers, transfer_all());
844
+ }
812
845
 
813
846
  /// Start an asynchronous operation to read a certain amount of data from a
814
847
  /// stream.
@@ -863,7 +896,7 @@ auto async_read(AsyncReadStream& s, const MutableBufferSequence& buffers,
863
896
  * Regardless of whether the asynchronous operation completes immediately or
864
897
  * not, the completion handler will not be invoked from within this function.
865
898
  * On immediate completion, invocation of the handler will be performed in a
866
- * manner equivalent to using boost::asio::post().
899
+ * manner equivalent to using boost::asio::async_immediate().
867
900
  *
868
901
  * @par Completion Signature
869
902
  * @code void(boost::system::error_code, std::size_t) @endcode
@@ -894,19 +927,28 @@ template <typename AsyncReadStream,
894
927
  BOOST_ASIO_COMPLETION_TOKEN_FOR(void (boost::system::error_code,
895
928
  std::size_t)) ReadToken = default_completion_token_t<
896
929
  typename AsyncReadStream::executor_type>>
897
- auto async_read(AsyncReadStream& s, const MutableBufferSequence& buffers,
930
+ inline auto async_read(AsyncReadStream& s, const MutableBufferSequence& buffers,
898
931
  CompletionCondition completion_condition,
899
932
  ReadToken&& token = default_completion_token_t<
900
933
  typename AsyncReadStream::executor_type>(),
901
934
  constraint_t<
902
935
  is_mutable_buffer_sequence<MutableBufferSequence>::value
936
+ > = 0,
937
+ constraint_t<
938
+ is_completion_condition<CompletionCondition>::value
903
939
  > = 0)
904
940
  -> decltype(
905
941
  async_initiate<ReadToken,
906
942
  void (boost::system::error_code, std::size_t)>(
907
943
  declval<detail::initiate_async_read<AsyncReadStream>>(),
908
944
  token, buffers,
909
- static_cast<CompletionCondition&&>(completion_condition)));
945
+ static_cast<CompletionCondition&&>(completion_condition)))
946
+ {
947
+ return async_initiate<ReadToken,
948
+ void (boost::system::error_code, std::size_t)>(
949
+ detail::initiate_async_read<AsyncReadStream>(s), token, buffers,
950
+ static_cast<CompletionCondition&&>(completion_condition));
951
+ }
910
952
 
911
953
  #if !defined(BOOST_ASIO_NO_DYNAMIC_BUFFER_V1)
912
954
 
@@ -954,7 +996,7 @@ auto async_read(AsyncReadStream& s, const MutableBufferSequence& buffers,
954
996
  * Regardless of whether the asynchronous operation completes immediately or
955
997
  * not, the completion handler will not be invoked from within this function.
956
998
  * On immediate completion, invocation of the handler will be performed in a
957
- * manner equivalent to using boost::asio::post().
999
+ * manner equivalent to using boost::asio::async_immediate().
958
1000
  *
959
1001
  * @par Completion Signature
960
1002
  * @code void(boost::system::error_code, std::size_t) @endcode
@@ -980,7 +1022,7 @@ template <typename AsyncReadStream, typename DynamicBuffer_v1,
980
1022
  BOOST_ASIO_COMPLETION_TOKEN_FOR(void (boost::system::error_code,
981
1023
  std::size_t)) ReadToken = default_completion_token_t<
982
1024
  typename AsyncReadStream::executor_type>>
983
- auto async_read(AsyncReadStream& s, DynamicBuffer_v1&& buffers,
1025
+ inline auto async_read(AsyncReadStream& s, DynamicBuffer_v1&& buffers,
984
1026
  ReadToken&& token = default_completion_token_t<
985
1027
  typename AsyncReadStream::executor_type>(),
986
1028
  constraint_t<
@@ -988,12 +1030,21 @@ auto async_read(AsyncReadStream& s, DynamicBuffer_v1&& buffers,
988
1030
  > = 0,
989
1031
  constraint_t<
990
1032
  !is_dynamic_buffer_v2<decay_t<DynamicBuffer_v1>>::value
1033
+ > = 0,
1034
+ constraint_t<
1035
+ !is_completion_condition<ReadToken>::value
991
1036
  > = 0)
992
1037
  -> decltype(
993
1038
  async_initiate<ReadToken,
994
1039
  void (boost::system::error_code, std::size_t)>(
995
1040
  declval<detail::initiate_async_read_dynbuf_v1<AsyncReadStream>>(),
996
- token, static_cast<DynamicBuffer_v1&&>(buffers), transfer_all()));
1041
+ token, static_cast<DynamicBuffer_v1&&>(buffers), transfer_all()))
1042
+ {
1043
+ return async_initiate<ReadToken,
1044
+ void (boost::system::error_code, std::size_t)>(
1045
+ detail::initiate_async_read_dynbuf_v1<AsyncReadStream>(s),
1046
+ token, static_cast<DynamicBuffer_v1&&>(buffers), transfer_all());
1047
+ }
997
1048
 
998
1049
  /// Start an asynchronous operation to read a certain amount of data from a
999
1050
  /// stream.
@@ -1053,7 +1104,7 @@ auto async_read(AsyncReadStream& s, DynamicBuffer_v1&& buffers,
1053
1104
  * Regardless of whether the asynchronous operation completes immediately or
1054
1105
  * not, the completion handler will not be invoked from within this function.
1055
1106
  * On immediate completion, invocation of the handler will be performed in a
1056
- * manner equivalent to using boost::asio::post().
1107
+ * manner equivalent to using boost::asio::async_immediate().
1057
1108
  *
1058
1109
  * @par Completion Signature
1059
1110
  * @code void(boost::system::error_code, std::size_t) @endcode
@@ -1074,7 +1125,7 @@ template <typename AsyncReadStream,
1074
1125
  BOOST_ASIO_COMPLETION_TOKEN_FOR(void (boost::system::error_code,
1075
1126
  std::size_t)) ReadToken = default_completion_token_t<
1076
1127
  typename AsyncReadStream::executor_type>>
1077
- auto async_read(AsyncReadStream& s, DynamicBuffer_v1&& buffers,
1128
+ inline auto async_read(AsyncReadStream& s, DynamicBuffer_v1&& buffers,
1078
1129
  CompletionCondition completion_condition,
1079
1130
  ReadToken&& token = default_completion_token_t<
1080
1131
  typename AsyncReadStream::executor_type>(),
@@ -1083,13 +1134,23 @@ auto async_read(AsyncReadStream& s, DynamicBuffer_v1&& buffers,
1083
1134
  > = 0,
1084
1135
  constraint_t<
1085
1136
  !is_dynamic_buffer_v2<decay_t<DynamicBuffer_v1>>::value
1137
+ > = 0,
1138
+ constraint_t<
1139
+ is_completion_condition<CompletionCondition>::value
1086
1140
  > = 0)
1087
1141
  -> decltype(
1088
1142
  async_initiate<ReadToken,
1089
1143
  void (boost::system::error_code, std::size_t)>(
1090
1144
  declval<detail::initiate_async_read_dynbuf_v1<AsyncReadStream>>(),
1091
1145
  token, static_cast<DynamicBuffer_v1&&>(buffers),
1092
- static_cast<CompletionCondition&&>(completion_condition)));
1146
+ static_cast<CompletionCondition&&>(completion_condition)))
1147
+ {
1148
+ return async_initiate<ReadToken,
1149
+ void (boost::system::error_code, std::size_t)>(
1150
+ detail::initiate_async_read_dynbuf_v1<AsyncReadStream>(s),
1151
+ token, static_cast<DynamicBuffer_v1&&>(buffers),
1152
+ static_cast<CompletionCondition&&>(completion_condition));
1153
+ }
1093
1154
 
1094
1155
  #if !defined(BOOST_ASIO_NO_EXTENSIONS)
1095
1156
  #if !defined(BOOST_ASIO_NO_IOSTREAM)
@@ -1136,7 +1197,7 @@ auto async_read(AsyncReadStream& s, DynamicBuffer_v1&& buffers,
1136
1197
  * Regardless of whether the asynchronous operation completes immediately or
1137
1198
  * not, the completion handler will not be invoked from within this function.
1138
1199
  * On immediate completion, invocation of the handler will be performed in a
1139
- * manner equivalent to using boost::asio::post().
1200
+ * manner equivalent to using boost::asio::async_immediate().
1140
1201
  *
1141
1202
  * @par Completion Signature
1142
1203
  * @code void(boost::system::error_code, std::size_t) @endcode
@@ -1162,14 +1223,23 @@ template <typename AsyncReadStream, typename Allocator,
1162
1223
  BOOST_ASIO_COMPLETION_TOKEN_FOR(void (boost::system::error_code,
1163
1224
  std::size_t)) ReadToken = default_completion_token_t<
1164
1225
  typename AsyncReadStream::executor_type>>
1165
- auto async_read(AsyncReadStream& s, basic_streambuf<Allocator>& b,
1226
+ inline auto async_read(AsyncReadStream& s, basic_streambuf<Allocator>& b,
1166
1227
  ReadToken&& token = default_completion_token_t<
1167
- typename AsyncReadStream::executor_type>())
1228
+ typename AsyncReadStream::executor_type>(),
1229
+ constraint_t<
1230
+ !is_completion_condition<ReadToken>::value
1231
+ > = 0)
1168
1232
  -> decltype(
1169
1233
  async_initiate<ReadToken,
1170
1234
  void (boost::system::error_code, std::size_t)>(
1171
1235
  declval<detail::initiate_async_read_dynbuf_v1<AsyncReadStream>>(),
1172
- token, basic_streambuf_ref<Allocator>(b), transfer_all()));
1236
+ token, basic_streambuf_ref<Allocator>(b), transfer_all()))
1237
+ {
1238
+ return async_initiate<ReadToken,
1239
+ void (boost::system::error_code, std::size_t)>(
1240
+ detail::initiate_async_read_dynbuf_v1<AsyncReadStream>(s),
1241
+ token, basic_streambuf_ref<Allocator>(b), transfer_all());
1242
+ }
1173
1243
 
1174
1244
  /// Start an asynchronous operation to read a certain amount of data from a
1175
1245
  /// stream.
@@ -1227,7 +1297,7 @@ auto async_read(AsyncReadStream& s, basic_streambuf<Allocator>& b,
1227
1297
  * Regardless of whether the asynchronous operation completes immediately or
1228
1298
  * not, the completion handler will not be invoked from within this function.
1229
1299
  * On immediate completion, invocation of the handler will be performed in a
1230
- * manner equivalent to using boost::asio::post().
1300
+ * manner equivalent to using boost::asio::async_immediate().
1231
1301
  *
1232
1302
  * @par Completion Signature
1233
1303
  * @code void(boost::system::error_code, std::size_t) @endcode
@@ -1248,16 +1318,26 @@ template <typename AsyncReadStream,
1248
1318
  BOOST_ASIO_COMPLETION_TOKEN_FOR(void (boost::system::error_code,
1249
1319
  std::size_t)) ReadToken = default_completion_token_t<
1250
1320
  typename AsyncReadStream::executor_type>>
1251
- auto async_read(AsyncReadStream& s, basic_streambuf<Allocator>& b,
1321
+ inline auto async_read(AsyncReadStream& s, basic_streambuf<Allocator>& b,
1252
1322
  CompletionCondition completion_condition,
1253
1323
  ReadToken&& token = default_completion_token_t<
1254
- typename AsyncReadStream::executor_type>())
1324
+ typename AsyncReadStream::executor_type>(),
1325
+ constraint_t<
1326
+ is_completion_condition<CompletionCondition>::value
1327
+ > = 0)
1255
1328
  -> decltype(
1256
1329
  async_initiate<ReadToken,
1257
1330
  void (boost::system::error_code, std::size_t)>(
1258
1331
  declval<detail::initiate_async_read_dynbuf_v1<AsyncReadStream>>(),
1259
1332
  token, basic_streambuf_ref<Allocator>(b),
1260
- static_cast<CompletionCondition&&>(completion_condition)));
1333
+ static_cast<CompletionCondition&&>(completion_condition)))
1334
+ {
1335
+ return async_initiate<ReadToken,
1336
+ void (boost::system::error_code, std::size_t)>(
1337
+ detail::initiate_async_read_dynbuf_v1<AsyncReadStream>(s),
1338
+ token, basic_streambuf_ref<Allocator>(b),
1339
+ static_cast<CompletionCondition&&>(completion_condition));
1340
+ }
1261
1341
 
1262
1342
  #endif // !defined(BOOST_ASIO_NO_IOSTREAM)
1263
1343
  #endif // !defined(BOOST_ASIO_NO_EXTENSIONS)
@@ -1307,7 +1387,7 @@ auto async_read(AsyncReadStream& s, basic_streambuf<Allocator>& b,
1307
1387
  * Regardless of whether the asynchronous operation completes immediately or
1308
1388
  * not, the completion handler will not be invoked from within this function.
1309
1389
  * On immediate completion, invocation of the handler will be performed in a
1310
- * manner equivalent to using boost::asio::post().
1390
+ * manner equivalent to using boost::asio::async_immediate().
1311
1391
  *
1312
1392
  * @par Completion Signature
1313
1393
  * @code void(boost::system::error_code, std::size_t) @endcode
@@ -1333,17 +1413,26 @@ template <typename AsyncReadStream, typename DynamicBuffer_v2,
1333
1413
  BOOST_ASIO_COMPLETION_TOKEN_FOR(void (boost::system::error_code,
1334
1414
  std::size_t)) ReadToken = default_completion_token_t<
1335
1415
  typename AsyncReadStream::executor_type>>
1336
- auto async_read(AsyncReadStream& s, DynamicBuffer_v2 buffers,
1416
+ inline auto async_read(AsyncReadStream& s, DynamicBuffer_v2 buffers,
1337
1417
  ReadToken&& token = default_completion_token_t<
1338
1418
  typename AsyncReadStream::executor_type>(),
1339
1419
  constraint_t<
1340
1420
  is_dynamic_buffer_v2<DynamicBuffer_v2>::value
1421
+ > = 0,
1422
+ constraint_t<
1423
+ !is_completion_condition<ReadToken>::value
1341
1424
  > = 0)
1342
1425
  -> decltype(
1343
1426
  async_initiate<ReadToken,
1344
1427
  void (boost::system::error_code, std::size_t)>(
1345
1428
  declval<detail::initiate_async_read_dynbuf_v2<AsyncReadStream>>(),
1346
- token, static_cast<DynamicBuffer_v2&&>(buffers), transfer_all()));
1429
+ token, static_cast<DynamicBuffer_v2&&>(buffers), transfer_all()))
1430
+ {
1431
+ return async_initiate<ReadToken,
1432
+ void (boost::system::error_code, std::size_t)>(
1433
+ detail::initiate_async_read_dynbuf_v2<AsyncReadStream>(s),
1434
+ token, static_cast<DynamicBuffer_v2&&>(buffers), transfer_all());
1435
+ }
1347
1436
 
1348
1437
  /// Start an asynchronous operation to read a certain amount of data from a
1349
1438
  /// stream.
@@ -1403,7 +1492,7 @@ auto async_read(AsyncReadStream& s, DynamicBuffer_v2 buffers,
1403
1492
  * Regardless of whether the asynchronous operation completes immediately or
1404
1493
  * not, the completion handler will not be invoked from within this function.
1405
1494
  * On immediate completion, invocation of the handler will be performed in a
1406
- * manner equivalent to using boost::asio::post().
1495
+ * manner equivalent to using boost::asio::async_immediate().
1407
1496
  *
1408
1497
  * @par Completion Signature
1409
1498
  * @code void(boost::system::error_code, std::size_t) @endcode
@@ -1424,19 +1513,29 @@ template <typename AsyncReadStream,
1424
1513
  BOOST_ASIO_COMPLETION_TOKEN_FOR(void (boost::system::error_code,
1425
1514
  std::size_t)) ReadToken = default_completion_token_t<
1426
1515
  typename AsyncReadStream::executor_type>>
1427
- auto async_read(AsyncReadStream& s, DynamicBuffer_v2 buffers,
1516
+ inline auto async_read(AsyncReadStream& s, DynamicBuffer_v2 buffers,
1428
1517
  CompletionCondition completion_condition,
1429
1518
  ReadToken&& token = default_completion_token_t<
1430
1519
  typename AsyncReadStream::executor_type>(),
1431
1520
  constraint_t<
1432
1521
  is_dynamic_buffer_v2<DynamicBuffer_v2>::value
1522
+ > = 0,
1523
+ constraint_t<
1524
+ is_completion_condition<CompletionCondition>::value
1433
1525
  > = 0)
1434
1526
  -> decltype(
1435
1527
  async_initiate<ReadToken,
1436
1528
  void (boost::system::error_code, std::size_t)>(
1437
1529
  declval<detail::initiate_async_read_dynbuf_v2<AsyncReadStream>>(),
1438
1530
  token, static_cast<DynamicBuffer_v2&&>(buffers),
1439
- static_cast<CompletionCondition&&>(completion_condition)));
1531
+ static_cast<CompletionCondition&&>(completion_condition)))
1532
+ {
1533
+ return async_initiate<ReadToken,
1534
+ void (boost::system::error_code, std::size_t)>(
1535
+ detail::initiate_async_read_dynbuf_v2<AsyncReadStream>(s),
1536
+ token, static_cast<DynamicBuffer_v2&&>(buffers),
1537
+ static_cast<CompletionCondition&&>(completion_condition));
1538
+ }
1440
1539
 
1441
1540
  /*@}*/
1442
1541
 
@@ -191,7 +191,10 @@ template <typename SyncRandomAccessReadDevice, typename MutableBufferSequence,
191
191
  typename CompletionCondition>
192
192
  std::size_t read_at(SyncRandomAccessReadDevice& d,
193
193
  uint64_t offset, const MutableBufferSequence& buffers,
194
- CompletionCondition completion_condition);
194
+ CompletionCondition completion_condition,
195
+ constraint_t<
196
+ is_completion_condition<CompletionCondition>::value
197
+ > = 0);
195
198
 
196
199
  /// Attempt to read a certain amount of data at the specified offset before
197
200
  /// returning.
@@ -240,7 +243,10 @@ template <typename SyncRandomAccessReadDevice, typename MutableBufferSequence,
240
243
  typename CompletionCondition>
241
244
  std::size_t read_at(SyncRandomAccessReadDevice& d,
242
245
  uint64_t offset, const MutableBufferSequence& buffers,
243
- CompletionCondition completion_condition, boost::system::error_code& ec);
246
+ CompletionCondition completion_condition, boost::system::error_code& ec,
247
+ constraint_t<
248
+ is_completion_condition<CompletionCondition>::value
249
+ > = 0);
244
250
 
245
251
  #if !defined(BOOST_ASIO_NO_EXTENSIONS)
246
252
  #if !defined(BOOST_ASIO_NO_IOSTREAM)
@@ -351,7 +357,10 @@ template <typename SyncRandomAccessReadDevice, typename Allocator,
351
357
  typename CompletionCondition>
352
358
  std::size_t read_at(SyncRandomAccessReadDevice& d,
353
359
  uint64_t offset, basic_streambuf<Allocator>& b,
354
- CompletionCondition completion_condition);
360
+ CompletionCondition completion_condition,
361
+ constraint_t<
362
+ is_completion_condition<CompletionCondition>::value
363
+ > = 0);
355
364
 
356
365
  /// Attempt to read a certain amount of data at the specified offset before
357
366
  /// returning.
@@ -395,7 +404,10 @@ template <typename SyncRandomAccessReadDevice, typename Allocator,
395
404
  typename CompletionCondition>
396
405
  std::size_t read_at(SyncRandomAccessReadDevice& d,
397
406
  uint64_t offset, basic_streambuf<Allocator>& b,
398
- CompletionCondition completion_condition, boost::system::error_code& ec);
407
+ CompletionCondition completion_condition, boost::system::error_code& ec,
408
+ constraint_t<
409
+ is_completion_condition<CompletionCondition>::value
410
+ > = 0);
399
411
 
400
412
  #endif // !defined(BOOST_ASIO_NO_IOSTREAM)
401
413
  #endif // !defined(BOOST_ASIO_NO_EXTENSIONS)
@@ -454,7 +466,7 @@ std::size_t read_at(SyncRandomAccessReadDevice& d,
454
466
  * Regardless of whether the asynchronous operation completes immediately or
455
467
  * not, the completion handler will not be invoked from within this function.
456
468
  * On immediate completion, invocation of the handler will be performed in a
457
- * manner equivalent to using boost::asio::post().
469
+ * manner equivalent to using boost::asio::async_immediate().
458
470
  *
459
471
  * @par Completion Signature
460
472
  * @code void(boost::system::error_code, std::size_t) @endcode
@@ -489,15 +501,24 @@ template <typename AsyncRandomAccessReadDevice, typename MutableBufferSequence,
489
501
  BOOST_ASIO_COMPLETION_TOKEN_FOR(void (boost::system::error_code,
490
502
  std::size_t)) ReadToken = default_completion_token_t<
491
503
  typename AsyncRandomAccessReadDevice::executor_type>>
492
- auto async_read_at(AsyncRandomAccessReadDevice& d,
504
+ inline auto async_read_at(AsyncRandomAccessReadDevice& d,
493
505
  uint64_t offset, const MutableBufferSequence& buffers,
494
506
  ReadToken&& token = default_completion_token_t<
495
- typename AsyncRandomAccessReadDevice::executor_type>())
507
+ typename AsyncRandomAccessReadDevice::executor_type>(),
508
+ constraint_t<
509
+ !is_completion_condition<ReadToken>::value
510
+ > = 0)
496
511
  -> decltype(
497
512
  async_initiate<ReadToken,
498
513
  void (boost::system::error_code, std::size_t)>(
499
514
  declval<detail::initiate_async_read_at<AsyncRandomAccessReadDevice>>(),
500
- token, offset, buffers, transfer_all()));
515
+ token, offset, buffers, transfer_all()))
516
+ {
517
+ return async_initiate<ReadToken,
518
+ void (boost::system::error_code, std::size_t)>(
519
+ detail::initiate_async_read_at<AsyncRandomAccessReadDevice>(d),
520
+ token, offset, buffers, transfer_all());
521
+ }
501
522
 
502
523
  /// Start an asynchronous operation to read a certain amount of data at the
503
524
  /// specified offset.
@@ -555,7 +576,7 @@ auto async_read_at(AsyncRandomAccessReadDevice& d,
555
576
  * Regardless of whether the asynchronous operation completes immediately or
556
577
  * not, the completion handler will not be invoked from within this function.
557
578
  * On immediate completion, invocation of the handler will be performed in a
558
- * manner equivalent to using boost::asio::post().
579
+ * manner equivalent to using boost::asio::async_immediate().
559
580
  *
560
581
  * @par Completion Signature
561
582
  * @code void(boost::system::error_code, std::size_t) @endcode
@@ -586,17 +607,27 @@ template <typename AsyncRandomAccessReadDevice,
586
607
  BOOST_ASIO_COMPLETION_TOKEN_FOR(void (boost::system::error_code,
587
608
  std::size_t)) ReadToken = default_completion_token_t<
588
609
  typename AsyncRandomAccessReadDevice::executor_type>>
589
- auto async_read_at(AsyncRandomAccessReadDevice& d,
610
+ inline auto async_read_at(AsyncRandomAccessReadDevice& d,
590
611
  uint64_t offset, const MutableBufferSequence& buffers,
591
612
  CompletionCondition completion_condition,
592
613
  ReadToken&& token = default_completion_token_t<
593
- typename AsyncRandomAccessReadDevice::executor_type>())
614
+ typename AsyncRandomAccessReadDevice::executor_type>(),
615
+ constraint_t<
616
+ is_completion_condition<CompletionCondition>::value
617
+ > = 0)
594
618
  -> decltype(
595
619
  async_initiate<ReadToken,
596
620
  void (boost::system::error_code, std::size_t)>(
597
621
  declval<detail::initiate_async_read_at<AsyncRandomAccessReadDevice>>(),
598
622
  token, offset, buffers,
599
- static_cast<CompletionCondition&&>(completion_condition)));
623
+ static_cast<CompletionCondition&&>(completion_condition)))
624
+ {
625
+ return async_initiate<ReadToken,
626
+ void (boost::system::error_code, std::size_t)>(
627
+ detail::initiate_async_read_at<AsyncRandomAccessReadDevice>(d),
628
+ token, offset, buffers,
629
+ static_cast<CompletionCondition&&>(completion_condition));
630
+ }
600
631
 
601
632
  #if !defined(BOOST_ASIO_NO_EXTENSIONS)
602
633
  #if !defined(BOOST_ASIO_NO_IOSTREAM)
@@ -641,7 +672,7 @@ auto async_read_at(AsyncRandomAccessReadDevice& d,
641
672
  * Regardless of whether the asynchronous operation completes immediately or
642
673
  * not, the completion handler will not be invoked from within this function.
643
674
  * On immediate completion, invocation of the handler will be performed in a
644
- * manner equivalent to using boost::asio::post().
675
+ * manner equivalent to using boost::asio::async_immediate().
645
676
  *
646
677
  * @par Completion Signature
647
678
  * @code void(boost::system::error_code, std::size_t) @endcode
@@ -667,16 +698,25 @@ template <typename AsyncRandomAccessReadDevice, typename Allocator,
667
698
  BOOST_ASIO_COMPLETION_TOKEN_FOR(void (boost::system::error_code,
668
699
  std::size_t)) ReadToken = default_completion_token_t<
669
700
  typename AsyncRandomAccessReadDevice::executor_type>>
670
- auto async_read_at(AsyncRandomAccessReadDevice& d,
701
+ inline auto async_read_at(AsyncRandomAccessReadDevice& d,
671
702
  uint64_t offset, basic_streambuf<Allocator>& b,
672
703
  ReadToken&& token = default_completion_token_t<
673
- typename AsyncRandomAccessReadDevice::executor_type>())
704
+ typename AsyncRandomAccessReadDevice::executor_type>(),
705
+ constraint_t<
706
+ !is_completion_condition<ReadToken>::value
707
+ > = 0)
674
708
  -> decltype(
675
709
  async_initiate<ReadToken,
676
710
  void (boost::system::error_code, std::size_t)>(
677
711
  declval<detail::initiate_async_read_at_streambuf<
678
712
  AsyncRandomAccessReadDevice>>(),
679
- token, offset, &b, transfer_all()));
713
+ token, offset, &b, transfer_all()))
714
+ {
715
+ return async_initiate<ReadToken,
716
+ void (boost::system::error_code, std::size_t)>(
717
+ detail::initiate_async_read_at_streambuf<AsyncRandomAccessReadDevice>(d),
718
+ token, offset, &b, transfer_all());
719
+ }
680
720
 
681
721
  /// Start an asynchronous operation to read a certain amount of data at the
682
722
  /// specified offset.
@@ -732,7 +772,7 @@ auto async_read_at(AsyncRandomAccessReadDevice& d,
732
772
  * Regardless of whether the asynchronous operation completes immediately or
733
773
  * not, the completion handler will not be invoked from within this function.
734
774
  * On immediate completion, invocation of the handler will be performed in a
735
- * manner equivalent to using boost::asio::post().
775
+ * manner equivalent to using boost::asio::async_immediate().
736
776
  *
737
777
  * @par Completion Signature
738
778
  * @code void(boost::system::error_code, std::size_t) @endcode
@@ -753,17 +793,27 @@ template <typename AsyncRandomAccessReadDevice,
753
793
  BOOST_ASIO_COMPLETION_TOKEN_FOR(void (boost::system::error_code,
754
794
  std::size_t)) ReadToken = default_completion_token_t<
755
795
  typename AsyncRandomAccessReadDevice::executor_type>>
756
- auto async_read_at(AsyncRandomAccessReadDevice& d, uint64_t offset,
796
+ inline auto async_read_at(AsyncRandomAccessReadDevice& d, uint64_t offset,
757
797
  basic_streambuf<Allocator>& b, CompletionCondition completion_condition,
758
798
  ReadToken&& token = default_completion_token_t<
759
- typename AsyncRandomAccessReadDevice::executor_type>())
799
+ typename AsyncRandomAccessReadDevice::executor_type>(),
800
+ constraint_t<
801
+ is_completion_condition<CompletionCondition>::value
802
+ > = 0)
760
803
  -> decltype(
761
804
  async_initiate<ReadToken,
762
805
  void (boost::system::error_code, std::size_t)>(
763
806
  declval<detail::initiate_async_read_at_streambuf<
764
807
  AsyncRandomAccessReadDevice>>(),
765
808
  token, offset, &b,
766
- static_cast<CompletionCondition&&>(completion_condition)));
809
+ static_cast<CompletionCondition&&>(completion_condition)))
810
+ {
811
+ return async_initiate<ReadToken,
812
+ void (boost::system::error_code, std::size_t)>(
813
+ detail::initiate_async_read_at_streambuf<AsyncRandomAccessReadDevice>(d),
814
+ token, offset, &b,
815
+ static_cast<CompletionCondition&&>(completion_condition));
816
+ }
767
817
 
768
818
  #endif // !defined(BOOST_ASIO_NO_IOSTREAM)
769
819
  #endif // !defined(BOOST_ASIO_NO_EXTENSIONS)