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 write(SyncWriteStream& s, const ConstBufferSequence& buffers,
185
185
  CompletionCondition completion_condition,
186
186
  constraint_t<
187
187
  is_const_buffer_sequence<ConstBufferSequence>::value
188
+ > = 0,
189
+ constraint_t<
190
+ is_completion_condition<CompletionCondition>::value
188
191
  > = 0);
189
192
 
190
193
  /// Write a certain amount of data to a stream before returning.
@@ -232,6 +235,9 @@ std::size_t write(SyncWriteStream& s, const ConstBufferSequence& buffers,
232
235
  CompletionCondition completion_condition, boost::system::error_code& ec,
233
236
  constraint_t<
234
237
  is_const_buffer_sequence<ConstBufferSequence>::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)
@@ -357,6 +363,9 @@ std::size_t write(SyncWriteStream& s,
357
363
  > = 0,
358
364
  constraint_t<
359
365
  !is_dynamic_buffer_v2<decay_t<DynamicBuffer_v1>>::value
366
+ > = 0,
367
+ constraint_t<
368
+ is_completion_condition<CompletionCondition>::value
360
369
  > = 0);
361
370
 
362
371
  /// Write a certain amount of data to a stream before returning.
@@ -406,6 +415,9 @@ std::size_t write(SyncWriteStream& s,
406
415
  > = 0,
407
416
  constraint_t<
408
417
  !is_dynamic_buffer_v2<decay_t<DynamicBuffer_v1>>::value
418
+ > = 0,
419
+ constraint_t<
420
+ is_completion_condition<CompletionCondition>::value
409
421
  > = 0);
410
422
 
411
423
  #if !defined(BOOST_ASIO_NO_EXTENSIONS)
@@ -508,7 +520,10 @@ std::size_t write(SyncWriteStream& s, basic_streambuf<Allocator>& b,
508
520
  template <typename SyncWriteStream, typename Allocator,
509
521
  typename CompletionCondition>
510
522
  std::size_t write(SyncWriteStream& s, basic_streambuf<Allocator>& b,
511
- CompletionCondition completion_condition);
523
+ CompletionCondition completion_condition,
524
+ constraint_t<
525
+ is_completion_condition<CompletionCondition>::value
526
+ > = 0);
512
527
 
513
528
  /// Write a certain amount of data to a stream before returning.
514
529
  /**
@@ -549,7 +564,10 @@ std::size_t write(SyncWriteStream& s, basic_streambuf<Allocator>& b,
549
564
  template <typename SyncWriteStream, typename Allocator,
550
565
  typename CompletionCondition>
551
566
  std::size_t write(SyncWriteStream& s, basic_streambuf<Allocator>& b,
552
- CompletionCondition completion_condition, boost::system::error_code& ec);
567
+ CompletionCondition completion_condition, boost::system::error_code& ec,
568
+ constraint_t<
569
+ is_completion_condition<CompletionCondition>::value
570
+ > = 0);
553
571
 
554
572
  #endif // !defined(BOOST_ASIO_NO_IOSTREAM)
555
573
  #endif // !defined(BOOST_ASIO_NO_EXTENSIONS)
@@ -664,6 +682,9 @@ std::size_t write(SyncWriteStream& s, DynamicBuffer_v2 buffers,
664
682
  CompletionCondition completion_condition,
665
683
  constraint_t<
666
684
  is_dynamic_buffer_v2<DynamicBuffer_v2>::value
685
+ > = 0,
686
+ constraint_t<
687
+ is_completion_condition<CompletionCondition>::value
667
688
  > = 0);
668
689
 
669
690
  /// Write a certain amount of data to a stream before returning.
@@ -709,6 +730,9 @@ std::size_t write(SyncWriteStream& s, DynamicBuffer_v2 buffers,
709
730
  CompletionCondition completion_condition, boost::system::error_code& ec,
710
731
  constraint_t<
711
732
  is_dynamic_buffer_v2<DynamicBuffer_v2>::value
733
+ > = 0,
734
+ constraint_t<
735
+ is_completion_condition<CompletionCondition>::value
712
736
  > = 0);
713
737
 
714
738
  /*@}*/
@@ -763,7 +787,7 @@ std::size_t write(SyncWriteStream& 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
@@ -792,17 +816,26 @@ template <typename AsyncWriteStream, typename ConstBufferSequence,
792
816
  BOOST_ASIO_COMPLETION_TOKEN_FOR(void (boost::system::error_code,
793
817
  std::size_t)) WriteToken
794
818
  = default_completion_token_t<typename AsyncWriteStream::executor_type>>
795
- auto async_write(AsyncWriteStream& s, const ConstBufferSequence& buffers,
819
+ inline auto async_write(AsyncWriteStream& s, const ConstBufferSequence& buffers,
796
820
  WriteToken&& token
797
821
  = default_completion_token_t<typename AsyncWriteStream::executor_type>(),
798
822
  constraint_t<
799
823
  is_const_buffer_sequence<ConstBufferSequence>::value
824
+ > = 0,
825
+ constraint_t<
826
+ !is_completion_condition<decay_t<WriteToken>>::value
800
827
  > = 0)
801
828
  -> decltype(
802
829
  async_initiate<WriteToken,
803
830
  void (boost::system::error_code, std::size_t)>(
804
831
  declval<detail::initiate_async_write<AsyncWriteStream>>(),
805
- token, buffers, transfer_all()));
832
+ token, buffers, transfer_all()))
833
+ {
834
+ return async_initiate<WriteToken,
835
+ void (boost::system::error_code, std::size_t)>(
836
+ detail::initiate_async_write<AsyncWriteStream>(s),
837
+ token, buffers, transfer_all());
838
+ }
806
839
 
807
840
  /// Start an asynchronous operation to write a certain amount of data to a
808
841
  /// stream.
@@ -861,7 +894,7 @@ auto async_write(AsyncWriteStream& s, const ConstBufferSequence& buffers,
861
894
  * Regardless of whether the asynchronous operation completes immediately or
862
895
  * not, the completion handler will not be invoked from within this function.
863
896
  * On immediate completion, invocation of the handler will be performed in a
864
- * manner equivalent to using boost::asio::post().
897
+ * manner equivalent to using boost::asio::async_immediate().
865
898
  *
866
899
  * @par Completion Signature
867
900
  * @code void(boost::system::error_code, std::size_t) @endcode
@@ -890,19 +923,31 @@ auto async_write(AsyncWriteStream& s, const ConstBufferSequence& buffers,
890
923
  template <typename AsyncWriteStream,
891
924
  typename ConstBufferSequence, typename CompletionCondition,
892
925
  BOOST_ASIO_COMPLETION_TOKEN_FOR(void (boost::system::error_code,
893
- std::size_t)) WriteToken>
894
- auto async_write(AsyncWriteStream& s, const ConstBufferSequence& buffers,
926
+ std::size_t)) WriteToken
927
+ = default_completion_token_t<typename AsyncWriteStream::executor_type>>
928
+ inline auto async_write(AsyncWriteStream& s, const ConstBufferSequence& buffers,
895
929
  CompletionCondition completion_condition,
896
- WriteToken&& token,
930
+ WriteToken&& token
931
+ = default_completion_token_t<typename AsyncWriteStream::executor_type>(),
897
932
  constraint_t<
898
933
  is_const_buffer_sequence<ConstBufferSequence>::value
934
+ > = 0,
935
+ constraint_t<
936
+ is_completion_condition<CompletionCondition>::value
899
937
  > = 0)
900
938
  -> decltype(
901
939
  async_initiate<WriteToken,
902
940
  void (boost::system::error_code, std::size_t)>(
903
941
  declval<detail::initiate_async_write<AsyncWriteStream>>(),
904
942
  token, buffers,
905
- static_cast<CompletionCondition&&>(completion_condition)));
943
+ static_cast<CompletionCondition&&>(completion_condition)))
944
+ {
945
+ return async_initiate<WriteToken,
946
+ void (boost::system::error_code, std::size_t)>(
947
+ detail::initiate_async_write<AsyncWriteStream>(s),
948
+ token, buffers,
949
+ static_cast<CompletionCondition&&>(completion_condition));
950
+ }
906
951
 
907
952
  #if !defined(BOOST_ASIO_NO_DYNAMIC_BUFFER_V1)
908
953
 
@@ -949,7 +994,7 @@ auto async_write(AsyncWriteStream& s, const ConstBufferSequence& buffers,
949
994
  * Regardless of whether the asynchronous operation completes immediately or
950
995
  * not, the completion handler will not be invoked from within this function.
951
996
  * On immediate completion, invocation of the handler will be performed in a
952
- * manner equivalent to using boost::asio::post().
997
+ * manner equivalent to using boost::asio::async_immediate().
953
998
  *
954
999
  * @par Completion Signature
955
1000
  * @code void(boost::system::error_code, std::size_t) @endcode
@@ -969,7 +1014,7 @@ template <typename AsyncWriteStream, typename DynamicBuffer_v1,
969
1014
  BOOST_ASIO_COMPLETION_TOKEN_FOR(void (boost::system::error_code,
970
1015
  std::size_t)) WriteToken
971
1016
  = default_completion_token_t<typename AsyncWriteStream::executor_type>>
972
- auto async_write(AsyncWriteStream& s, DynamicBuffer_v1&& buffers,
1017
+ inline auto async_write(AsyncWriteStream& s, DynamicBuffer_v1&& buffers,
973
1018
  WriteToken&& token
974
1019
  = default_completion_token_t<typename AsyncWriteStream::executor_type>(),
975
1020
  constraint_t<
@@ -977,13 +1022,23 @@ auto async_write(AsyncWriteStream& s, DynamicBuffer_v1&& buffers,
977
1022
  > = 0,
978
1023
  constraint_t<
979
1024
  !is_dynamic_buffer_v2<decay_t<DynamicBuffer_v1>>::value
1025
+ > = 0,
1026
+ constraint_t<
1027
+ !is_completion_condition<decay_t<WriteToken>>::value
980
1028
  > = 0)
981
1029
  -> decltype(
982
1030
  async_initiate<WriteToken,
983
1031
  void (boost::system::error_code, std::size_t)>(
984
1032
  declval<detail::initiate_async_write_dynbuf_v1<AsyncWriteStream>>(),
985
1033
  token, static_cast<DynamicBuffer_v1&&>(buffers),
986
- transfer_all()));
1034
+ transfer_all()))
1035
+ {
1036
+ return async_initiate<WriteToken,
1037
+ void (boost::system::error_code, std::size_t)>(
1038
+ detail::initiate_async_write_dynbuf_v1<AsyncWriteStream>(s),
1039
+ token, static_cast<DynamicBuffer_v1&&>(buffers),
1040
+ transfer_all());
1041
+ }
987
1042
 
988
1043
  /// Start an asynchronous operation to write a certain amount of data to a
989
1044
  /// stream.
@@ -1042,7 +1097,7 @@ auto async_write(AsyncWriteStream& s, DynamicBuffer_v1&& buffers,
1042
1097
  * Regardless of whether the asynchronous operation completes immediately or
1043
1098
  * not, the completion handler will not be invoked from within this function.
1044
1099
  * On immediate completion, invocation of the handler will be performed in a
1045
- * manner equivalent to using boost::asio::post().
1100
+ * manner equivalent to using boost::asio::async_immediate().
1046
1101
  *
1047
1102
  * @par Completion Signature
1048
1103
  * @code void(boost::system::error_code, std::size_t) @endcode
@@ -1061,21 +1116,34 @@ auto async_write(AsyncWriteStream& s, DynamicBuffer_v1&& buffers,
1061
1116
  template <typename AsyncWriteStream,
1062
1117
  typename DynamicBuffer_v1, typename CompletionCondition,
1063
1118
  BOOST_ASIO_COMPLETION_TOKEN_FOR(void (boost::system::error_code,
1064
- std::size_t)) WriteToken>
1065
- auto async_write(AsyncWriteStream& s, DynamicBuffer_v1&& buffers,
1066
- CompletionCondition completion_condition, WriteToken&& token,
1119
+ std::size_t)) WriteToken
1120
+ = default_completion_token_t<typename AsyncWriteStream::executor_type>>
1121
+ inline auto async_write(AsyncWriteStream& s, DynamicBuffer_v1&& buffers,
1122
+ CompletionCondition completion_condition,
1123
+ WriteToken&& token
1124
+ = default_completion_token_t<typename AsyncWriteStream::executor_type>(),
1067
1125
  constraint_t<
1068
1126
  is_dynamic_buffer_v1<decay_t<DynamicBuffer_v1>>::value
1069
1127
  > = 0,
1070
1128
  constraint_t<
1071
1129
  !is_dynamic_buffer_v2<decay_t<DynamicBuffer_v1>>::value
1130
+ > = 0,
1131
+ constraint_t<
1132
+ is_completion_condition<CompletionCondition>::value
1072
1133
  > = 0)
1073
1134
  -> decltype(
1074
1135
  async_initiate<WriteToken,
1075
1136
  void (boost::system::error_code, std::size_t)>(
1076
1137
  declval<detail::initiate_async_write_dynbuf_v1<AsyncWriteStream>>(),
1077
1138
  token, static_cast<DynamicBuffer_v1&&>(buffers),
1078
- static_cast<CompletionCondition&&>(completion_condition)));
1139
+ static_cast<CompletionCondition&&>(completion_condition)))
1140
+ {
1141
+ return async_initiate<WriteToken,
1142
+ void (boost::system::error_code, std::size_t)>(
1143
+ detail::initiate_async_write_dynbuf_v1<AsyncWriteStream>(s),
1144
+ token, static_cast<DynamicBuffer_v1&&>(buffers),
1145
+ static_cast<CompletionCondition&&>(completion_condition));
1146
+ }
1079
1147
 
1080
1148
  #if !defined(BOOST_ASIO_NO_EXTENSIONS)
1081
1149
  #if !defined(BOOST_ASIO_NO_IOSTREAM)
@@ -1121,7 +1189,7 @@ auto async_write(AsyncWriteStream& s, DynamicBuffer_v1&& buffers,
1121
1189
  * Regardless of whether the asynchronous operation completes immediately or
1122
1190
  * not, the completion handler will not be invoked from within this function.
1123
1191
  * On immediate completion, invocation of the handler will be performed in a
1124
- * manner equivalent to using boost::asio::post().
1192
+ * manner equivalent to using boost::asio::async_immediate().
1125
1193
  *
1126
1194
  * @par Completion Signature
1127
1195
  * @code void(boost::system::error_code, std::size_t) @endcode
@@ -1141,14 +1209,23 @@ template <typename AsyncWriteStream, typename Allocator,
1141
1209
  BOOST_ASIO_COMPLETION_TOKEN_FOR(void (boost::system::error_code,
1142
1210
  std::size_t)) WriteToken
1143
1211
  = default_completion_token_t<typename AsyncWriteStream::executor_type>>
1144
- auto async_write(AsyncWriteStream& s, basic_streambuf<Allocator>& b,
1212
+ inline auto async_write(AsyncWriteStream& s, basic_streambuf<Allocator>& b,
1145
1213
  WriteToken&& token
1146
- = default_completion_token_t<typename AsyncWriteStream::executor_type>())
1214
+ = default_completion_token_t<typename AsyncWriteStream::executor_type>(),
1215
+ constraint_t<
1216
+ !is_completion_condition<decay_t<WriteToken>>::value
1217
+ > = 0)
1147
1218
  -> decltype(
1148
1219
  async_initiate<WriteToken,
1149
1220
  void (boost::system::error_code, std::size_t)>(
1150
1221
  declval<detail::initiate_async_write_dynbuf_v1<AsyncWriteStream>>(),
1151
- token, basic_streambuf_ref<Allocator>(b), transfer_all()));
1222
+ token, basic_streambuf_ref<Allocator>(b), transfer_all()))
1223
+ {
1224
+ return async_initiate<WriteToken,
1225
+ void (boost::system::error_code, std::size_t)>(
1226
+ detail::initiate_async_write_dynbuf_v1<AsyncWriteStream>(s),
1227
+ token, basic_streambuf_ref<Allocator>(b), transfer_all());
1228
+ }
1152
1229
 
1153
1230
  /// Start an asynchronous operation to write a certain amount of data to a
1154
1231
  /// stream.
@@ -1205,7 +1282,7 @@ auto async_write(AsyncWriteStream& s, basic_streambuf<Allocator>& b,
1205
1282
  * Regardless of whether the asynchronous operation completes immediately or
1206
1283
  * not, the completion handler will not be invoked from within this function.
1207
1284
  * On immediate completion, invocation of the handler will be performed in a
1208
- * manner equivalent to using boost::asio::post().
1285
+ * manner equivalent to using boost::asio::async_immediate().
1209
1286
  *
1210
1287
  * @par Completion Signature
1211
1288
  * @code void(boost::system::error_code, std::size_t) @endcode
@@ -1224,15 +1301,28 @@ auto async_write(AsyncWriteStream& s, basic_streambuf<Allocator>& b,
1224
1301
  template <typename AsyncWriteStream,
1225
1302
  typename Allocator, typename CompletionCondition,
1226
1303
  BOOST_ASIO_COMPLETION_TOKEN_FOR(void (boost::system::error_code,
1227
- std::size_t)) WriteToken>
1228
- auto async_write(AsyncWriteStream& s, basic_streambuf<Allocator>& b,
1229
- CompletionCondition completion_condition, WriteToken&& token)
1304
+ std::size_t)) WriteToken
1305
+ = default_completion_token_t<typename AsyncWriteStream::executor_type>>
1306
+ inline auto async_write(AsyncWriteStream& s, basic_streambuf<Allocator>& b,
1307
+ CompletionCondition completion_condition,
1308
+ WriteToken&& token
1309
+ = default_completion_token_t<typename AsyncWriteStream::executor_type>(),
1310
+ constraint_t<
1311
+ is_completion_condition<CompletionCondition>::value
1312
+ > = 0)
1230
1313
  -> decltype(
1231
1314
  async_initiate<WriteToken,
1232
1315
  void (boost::system::error_code, std::size_t)>(
1233
1316
  declval<detail::initiate_async_write_dynbuf_v1<AsyncWriteStream>>(),
1234
1317
  token, basic_streambuf_ref<Allocator>(b),
1235
- static_cast<CompletionCondition&&>(completion_condition)));
1318
+ static_cast<CompletionCondition&&>(completion_condition)))
1319
+ {
1320
+ return async_initiate<WriteToken,
1321
+ void (boost::system::error_code, std::size_t)>(
1322
+ detail::initiate_async_write_dynbuf_v1<AsyncWriteStream>(s),
1323
+ token, basic_streambuf_ref<Allocator>(b),
1324
+ static_cast<CompletionCondition&&>(completion_condition));
1325
+ }
1236
1326
 
1237
1327
  #endif // !defined(BOOST_ASIO_NO_IOSTREAM)
1238
1328
  #endif // !defined(BOOST_ASIO_NO_EXTENSIONS)
@@ -1281,7 +1371,7 @@ auto async_write(AsyncWriteStream& s, basic_streambuf<Allocator>& b,
1281
1371
  * Regardless of whether the asynchronous operation completes immediately or
1282
1372
  * not, the completion handler will not be invoked from within this function.
1283
1373
  * On immediate completion, invocation of the handler will be performed in a
1284
- * manner equivalent to using boost::asio::post().
1374
+ * manner equivalent to using boost::asio::async_immediate().
1285
1375
  *
1286
1376
  * @par Completion Signature
1287
1377
  * @code void(boost::system::error_code, std::size_t) @endcode
@@ -1301,18 +1391,28 @@ template <typename AsyncWriteStream, typename DynamicBuffer_v2,
1301
1391
  BOOST_ASIO_COMPLETION_TOKEN_FOR(void (boost::system::error_code,
1302
1392
  std::size_t)) WriteToken
1303
1393
  = default_completion_token_t<typename AsyncWriteStream::executor_type>>
1304
- auto async_write(AsyncWriteStream& s, DynamicBuffer_v2 buffers,
1394
+ inline auto async_write(AsyncWriteStream& s, DynamicBuffer_v2 buffers,
1305
1395
  WriteToken&& token
1306
1396
  = default_completion_token_t<typename AsyncWriteStream::executor_type>(),
1307
1397
  constraint_t<
1308
1398
  is_dynamic_buffer_v2<DynamicBuffer_v2>::value
1399
+ > = 0,
1400
+ constraint_t<
1401
+ !is_completion_condition<decay_t<WriteToken>>::value
1309
1402
  > = 0)
1310
1403
  -> decltype(
1311
1404
  async_initiate<WriteToken,
1312
1405
  void (boost::system::error_code, std::size_t)>(
1313
1406
  declval<detail::initiate_async_write_dynbuf_v2<AsyncWriteStream>>(),
1314
1407
  token, static_cast<DynamicBuffer_v2&&>(buffers),
1315
- transfer_all()));
1408
+ transfer_all()))
1409
+ {
1410
+ return async_initiate<WriteToken,
1411
+ void (boost::system::error_code, std::size_t)>(
1412
+ detail::initiate_async_write_dynbuf_v2<AsyncWriteStream>(s),
1413
+ token, static_cast<DynamicBuffer_v2&&>(buffers),
1414
+ transfer_all());
1415
+ }
1316
1416
 
1317
1417
  /// Start an asynchronous operation to write a certain amount of data to a
1318
1418
  /// stream.
@@ -1371,7 +1471,7 @@ auto async_write(AsyncWriteStream& s, DynamicBuffer_v2 buffers,
1371
1471
  * Regardless of whether the asynchronous operation completes immediately or
1372
1472
  * not, the completion handler will not be invoked from within this function.
1373
1473
  * On immediate completion, invocation of the handler will be performed in a
1374
- * manner equivalent to using boost::asio::post().
1474
+ * manner equivalent to using boost::asio::async_immediate().
1375
1475
  *
1376
1476
  * @par Completion Signature
1377
1477
  * @code void(boost::system::error_code, std::size_t) @endcode
@@ -1390,19 +1490,31 @@ auto async_write(AsyncWriteStream& s, DynamicBuffer_v2 buffers,
1390
1490
  template <typename AsyncWriteStream,
1391
1491
  typename DynamicBuffer_v2, typename CompletionCondition,
1392
1492
  BOOST_ASIO_COMPLETION_TOKEN_FOR(void (boost::system::error_code,
1393
- std::size_t)) WriteToken>
1394
- auto async_write(AsyncWriteStream& s, DynamicBuffer_v2 buffers,
1493
+ std::size_t)) WriteToken
1494
+ = default_completion_token_t<typename AsyncWriteStream::executor_type>>
1495
+ inline auto async_write(AsyncWriteStream& s, DynamicBuffer_v2 buffers,
1395
1496
  CompletionCondition completion_condition,
1396
- WriteToken&& token,
1497
+ WriteToken&& token
1498
+ = default_completion_token_t<typename AsyncWriteStream::executor_type>(),
1397
1499
  constraint_t<
1398
1500
  is_dynamic_buffer_v2<DynamicBuffer_v2>::value
1501
+ > = 0,
1502
+ constraint_t<
1503
+ is_completion_condition<CompletionCondition>::value
1399
1504
  > = 0)
1400
1505
  -> decltype(
1401
1506
  async_initiate<WriteToken,
1402
1507
  void (boost::system::error_code, std::size_t)>(
1403
1508
  declval<detail::initiate_async_write_dynbuf_v2<AsyncWriteStream>>(),
1404
1509
  token, static_cast<DynamicBuffer_v2&&>(buffers),
1405
- static_cast<CompletionCondition&&>(completion_condition)));
1510
+ static_cast<CompletionCondition&&>(completion_condition)))
1511
+ {
1512
+ return async_initiate<WriteToken,
1513
+ void (boost::system::error_code, std::size_t)>(
1514
+ detail::initiate_async_write_dynbuf_v2<AsyncWriteStream>(s),
1515
+ token, static_cast<DynamicBuffer_v2&&>(buffers),
1516
+ static_cast<CompletionCondition&&>(completion_condition));
1517
+ }
1406
1518
 
1407
1519
  /*@}*/
1408
1520
 
@@ -188,7 +188,10 @@ template <typename SyncRandomAccessWriteDevice, typename ConstBufferSequence,
188
188
  typename CompletionCondition>
189
189
  std::size_t write_at(SyncRandomAccessWriteDevice& d,
190
190
  uint64_t offset, const ConstBufferSequence& buffers,
191
- CompletionCondition completion_condition);
191
+ CompletionCondition completion_condition,
192
+ constraint_t<
193
+ is_completion_condition<CompletionCondition>::value
194
+ > = 0);
192
195
 
193
196
  /// Write a certain amount of data at a specified offset before returning.
194
197
  /**
@@ -236,7 +239,10 @@ template <typename SyncRandomAccessWriteDevice, typename ConstBufferSequence,
236
239
  typename CompletionCondition>
237
240
  std::size_t write_at(SyncRandomAccessWriteDevice& d,
238
241
  uint64_t offset, const ConstBufferSequence& buffers,
239
- CompletionCondition completion_condition, boost::system::error_code& ec);
242
+ CompletionCondition completion_condition, boost::system::error_code& ec,
243
+ constraint_t<
244
+ is_completion_condition<CompletionCondition>::value
245
+ > = 0);
240
246
 
241
247
  #if !defined(BOOST_ASIO_NO_EXTENSIONS)
242
248
  #if !defined(BOOST_ASIO_NO_IOSTREAM)
@@ -349,7 +355,10 @@ std::size_t write_at(SyncRandomAccessWriteDevice& d,
349
355
  template <typename SyncRandomAccessWriteDevice, typename Allocator,
350
356
  typename CompletionCondition>
351
357
  std::size_t write_at(SyncRandomAccessWriteDevice& d, uint64_t offset,
352
- basic_streambuf<Allocator>& b, CompletionCondition completion_condition);
358
+ basic_streambuf<Allocator>& b, CompletionCondition completion_condition,
359
+ constraint_t<
360
+ is_completion_condition<CompletionCondition>::value
361
+ > = 0);
353
362
 
354
363
  /// Write a certain amount of data at a specified offset before returning.
355
364
  /**
@@ -392,9 +401,12 @@ std::size_t write_at(SyncRandomAccessWriteDevice& d, uint64_t offset,
392
401
  */
393
402
  template <typename SyncRandomAccessWriteDevice, typename Allocator,
394
403
  typename CompletionCondition>
395
- std::size_t write_at(SyncRandomAccessWriteDevice& d, uint64_t offset,
396
- basic_streambuf<Allocator>& b, CompletionCondition completion_condition,
397
- boost::system::error_code& ec);
404
+ std::size_t write_at(SyncRandomAccessWriteDevice& d,
405
+ uint64_t offset, basic_streambuf<Allocator>& b,
406
+ CompletionCondition completion_condition, boost::system::error_code& ec,
407
+ constraint_t<
408
+ is_completion_condition<CompletionCondition>::value
409
+ > = 0);
398
410
 
399
411
  #endif // !defined(BOOST_ASIO_NO_IOSTREAM)
400
412
  #endif // !defined(BOOST_ASIO_NO_EXTENSIONS)
@@ -457,7 +469,7 @@ std::size_t write_at(SyncRandomAccessWriteDevice& d, uint64_t offset,
457
469
  * Regardless of whether the asynchronous operation completes immediately or
458
470
  * not, the completion handler will not be invoked from within this function.
459
471
  * On immediate completion, invocation of the handler will be performed in a
460
- * manner equivalent to using boost::asio::post().
472
+ * manner equivalent to using boost::asio::async_immediate().
461
473
  *
462
474
  * @par Completion Signature
463
475
  * @code void(boost::system::error_code, std::size_t) @endcode
@@ -486,16 +498,25 @@ template <typename AsyncRandomAccessWriteDevice, typename ConstBufferSequence,
486
498
  BOOST_ASIO_COMPLETION_TOKEN_FOR(void (boost::system::error_code,
487
499
  std::size_t)) WriteToken = default_completion_token_t<
488
500
  typename AsyncRandomAccessWriteDevice::executor_type>>
489
- auto async_write_at(AsyncRandomAccessWriteDevice& d,
501
+ inline auto async_write_at(AsyncRandomAccessWriteDevice& d,
490
502
  uint64_t offset, const ConstBufferSequence& buffers,
491
503
  WriteToken&& token = default_completion_token_t<
492
- typename AsyncRandomAccessWriteDevice::executor_type>())
504
+ typename AsyncRandomAccessWriteDevice::executor_type>(),
505
+ constraint_t<
506
+ !is_completion_condition<WriteToken>::value
507
+ > = 0)
493
508
  -> decltype(
494
509
  async_initiate<WriteToken,
495
510
  void (boost::system::error_code, std::size_t)>(
496
511
  declval<detail::initiate_async_write_at<
497
512
  AsyncRandomAccessWriteDevice>>(),
498
- token, offset, buffers, transfer_all()));
513
+ token, offset, buffers, transfer_all()))
514
+ {
515
+ return async_initiate<WriteToken,
516
+ void (boost::system::error_code, std::size_t)>(
517
+ detail::initiate_async_write_at<AsyncRandomAccessWriteDevice>(d),
518
+ token, offset, buffers, transfer_all());
519
+ }
499
520
 
500
521
  /// Start an asynchronous operation to write a certain amount of data at the
501
522
  /// specified offset.
@@ -559,7 +580,7 @@ auto async_write_at(AsyncRandomAccessWriteDevice& d,
559
580
  * Regardless of whether the asynchronous operation completes immediately or
560
581
  * not, the completion handler will not be invoked from within this function.
561
582
  * On immediate completion, invocation of the handler will be performed in a
562
- * manner equivalent to using boost::asio::post().
583
+ * manner equivalent to using boost::asio::async_immediate().
563
584
  *
564
585
  * @par Completion Signature
565
586
  * @code void(boost::system::error_code, std::size_t) @endcode
@@ -590,18 +611,28 @@ template <typename AsyncRandomAccessWriteDevice,
590
611
  BOOST_ASIO_COMPLETION_TOKEN_FOR(void (boost::system::error_code,
591
612
  std::size_t)) WriteToken = default_completion_token_t<
592
613
  typename AsyncRandomAccessWriteDevice::executor_type>>
593
- auto async_write_at(AsyncRandomAccessWriteDevice& d,
614
+ inline auto async_write_at(AsyncRandomAccessWriteDevice& d,
594
615
  uint64_t offset, const ConstBufferSequence& buffers,
595
616
  CompletionCondition completion_condition,
596
617
  WriteToken&& token = default_completion_token_t<
597
- typename AsyncRandomAccessWriteDevice::executor_type>())
618
+ typename AsyncRandomAccessWriteDevice::executor_type>(),
619
+ constraint_t<
620
+ is_completion_condition<CompletionCondition>::value
621
+ > = 0)
598
622
  -> decltype(
599
623
  async_initiate<WriteToken,
600
624
  void (boost::system::error_code, std::size_t)>(
601
625
  declval<detail::initiate_async_write_at<
602
626
  AsyncRandomAccessWriteDevice>>(),
603
627
  token, offset, buffers,
604
- static_cast<CompletionCondition&&>(completion_condition)));
628
+ static_cast<CompletionCondition&&>(completion_condition)))
629
+ {
630
+ return async_initiate<WriteToken,
631
+ void (boost::system::error_code, std::size_t)>(
632
+ detail::initiate_async_write_at<AsyncRandomAccessWriteDevice>(d),
633
+ token, offset, buffers,
634
+ static_cast<CompletionCondition&&>(completion_condition));
635
+ }
605
636
 
606
637
  #if !defined(BOOST_ASIO_NO_EXTENSIONS)
607
638
  #if !defined(BOOST_ASIO_NO_IOSTREAM)
@@ -652,7 +683,7 @@ auto async_write_at(AsyncRandomAccessWriteDevice& d,
652
683
  * Regardless of whether the asynchronous operation completes immediately or
653
684
  * not, the completion handler will not be invoked from within this function.
654
685
  * On immediate completion, invocation of the handler will be performed in a
655
- * manner equivalent to using boost::asio::post().
686
+ * manner equivalent to using boost::asio::async_immediate().
656
687
  *
657
688
  * @par Completion Signature
658
689
  * @code void(boost::system::error_code, std::size_t) @endcode
@@ -672,16 +703,26 @@ template <typename AsyncRandomAccessWriteDevice, typename Allocator,
672
703
  BOOST_ASIO_COMPLETION_TOKEN_FOR(void (boost::system::error_code,
673
704
  std::size_t)) WriteToken = default_completion_token_t<
674
705
  typename AsyncRandomAccessWriteDevice::executor_type>>
675
- auto async_write_at(AsyncRandomAccessWriteDevice& d,
706
+ inline auto async_write_at(AsyncRandomAccessWriteDevice& d,
676
707
  uint64_t offset, basic_streambuf<Allocator>& b,
677
708
  WriteToken&& token = default_completion_token_t<
678
- typename AsyncRandomAccessWriteDevice::executor_type>())
709
+ typename AsyncRandomAccessWriteDevice::executor_type>(),
710
+ constraint_t<
711
+ !is_completion_condition<WriteToken>::value
712
+ > = 0)
679
713
  -> decltype(
680
714
  async_initiate<WriteToken,
681
715
  void (boost::system::error_code, std::size_t)>(
682
716
  declval<detail::initiate_async_write_at_streambuf<
683
717
  AsyncRandomAccessWriteDevice>>(),
684
- token, offset, &b, transfer_all()));
718
+ token, offset, &b, transfer_all()))
719
+ {
720
+ return async_initiate<WriteToken,
721
+ void (boost::system::error_code, std::size_t)>(
722
+ detail::initiate_async_write_at_streambuf<
723
+ AsyncRandomAccessWriteDevice>(d),
724
+ token, offset, &b, transfer_all());
725
+ }
685
726
 
686
727
  /// Start an asynchronous operation to write a certain amount of data at the
687
728
  /// specified offset.
@@ -743,7 +784,7 @@ auto async_write_at(AsyncRandomAccessWriteDevice& d,
743
784
  * Regardless of whether the asynchronous operation completes immediately or
744
785
  * not, the completion handler will not be invoked from within this function.
745
786
  * On immediate completion, invocation of the handler will be performed in a
746
- * manner equivalent to using boost::asio::post().
787
+ * manner equivalent to using boost::asio::async_immediate().
747
788
  *
748
789
  * @par Completion Signature
749
790
  * @code void(boost::system::error_code, std::size_t) @endcode
@@ -764,17 +805,28 @@ template <typename AsyncRandomAccessWriteDevice,
764
805
  BOOST_ASIO_COMPLETION_TOKEN_FOR(void (boost::system::error_code,
765
806
  std::size_t)) WriteToken = default_completion_token_t<
766
807
  typename AsyncRandomAccessWriteDevice::executor_type>>
767
- auto async_write_at(AsyncRandomAccessWriteDevice& d, uint64_t offset,
808
+ inline auto async_write_at(AsyncRandomAccessWriteDevice& d, uint64_t offset,
768
809
  basic_streambuf<Allocator>& b, CompletionCondition completion_condition,
769
810
  WriteToken&& token = default_completion_token_t<
770
- typename AsyncRandomAccessWriteDevice::executor_type>())
811
+ typename AsyncRandomAccessWriteDevice::executor_type>(),
812
+ constraint_t<
813
+ is_completion_condition<CompletionCondition>::value
814
+ > = 0)
771
815
  -> decltype(
772
816
  async_initiate<WriteToken,
773
817
  void (boost::system::error_code, std::size_t)>(
774
818
  declval<detail::initiate_async_write_at_streambuf<
775
819
  AsyncRandomAccessWriteDevice>>(),
776
820
  token, offset, &b,
777
- static_cast<CompletionCondition&&>(completion_condition)));
821
+ static_cast<CompletionCondition&&>(completion_condition)))
822
+ {
823
+ return async_initiate<WriteToken,
824
+ void (boost::system::error_code, std::size_t)>(
825
+ detail::initiate_async_write_at_streambuf<
826
+ AsyncRandomAccessWriteDevice>(d),
827
+ token, offset, &b,
828
+ static_cast<CompletionCondition&&>(completion_condition));
829
+ }
778
830
 
779
831
  #endif // !defined(BOOST_ASIO_NO_IOSTREAM)
780
832
  #endif // !defined(BOOST_ASIO_NO_EXTENSIONS)
@@ -61,12 +61,16 @@
61
61
  #include <boost/asio/buffered_write_stream_fwd.hpp>
62
62
  #include <boost/asio/buffered_write_stream.hpp>
63
63
  #include <boost/asio/buffers_iterator.hpp>
64
+ #include <boost/asio/cancel_after.hpp>
65
+ #include <boost/asio/cancel_at.hpp>
64
66
  #include <boost/asio/cancellation_signal.hpp>
65
67
  #include <boost/asio/cancellation_state.hpp>
66
68
  #include <boost/asio/cancellation_type.hpp>
69
+ #include <boost/asio/co_composed.hpp>
67
70
  #include <boost/asio/co_spawn.hpp>
68
71
  #include <boost/asio/completion_condition.hpp>
69
72
  #include <boost/asio/compose.hpp>
73
+ #include <boost/asio/composed.hpp>
70
74
  #include <boost/asio/connect.hpp>
71
75
  #include <boost/asio/connect_pipe.hpp>
72
76
  #include <boost/asio/consign.hpp>
@@ -74,6 +78,7 @@
74
78
  #include <boost/asio/deadline_timer.hpp>
75
79
  #include <boost/asio/defer.hpp>
76
80
  #include <boost/asio/deferred.hpp>
81
+ #include <boost/asio/default_completion_token.hpp>
77
82
  #include <boost/asio/detached.hpp>
78
83
  #include <boost/asio/dispatch.hpp>
79
84
  #include <boost/asio/error.hpp>
@@ -101,6 +106,7 @@
101
106
  #include <boost/asio/generic/stream_protocol.hpp>
102
107
  #include <boost/asio/handler_continuation_hook.hpp>
103
108
  #include <boost/asio/high_resolution_timer.hpp>
109
+ #include <boost/asio/immediate.hpp>
104
110
  #include <boost/asio/io_context.hpp>
105
111
  #include <boost/asio/io_context_strand.hpp>
106
112
  #include <boost/asio/io_service.hpp>
@@ -174,9 +174,12 @@ template<class E, class T> std::basic_ostream<E, T> & operator<<( std::basic_ost
174
174
 
175
175
  # define BOOST_CURRENT_LOCATION ::boost::source_location(__builtin_FILE(), __builtin_LINE(), __builtin_FUNCTION(), __builtin_COLUMN())
176
176
 
177
- #elif defined(BOOST_GCC) && BOOST_GCC >= 70000
177
+ #elif defined(BOOST_GCC) && BOOST_GCC >= 80000
178
178
 
179
179
  // The built-ins are available in 4.8+, but are not constant expressions until 7
180
+ // In addition, reproducible builds require -ffile-prefix-map, which is GCC 8
181
+ // https://github.com/boostorg/assert/issues/38
182
+
180
183
  # define BOOST_CURRENT_LOCATION ::boost::source_location(__builtin_FILE(), __builtin_LINE(), __builtin_FUNCTION())
181
184
 
182
185
  #elif defined(BOOST_GCC) && BOOST_GCC >= 50000