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
@@ -35,15 +35,6 @@ namespace asio {
35
35
 
36
36
  namespace detail
37
37
  {
38
- struct default_connect_condition
39
- {
40
- template <typename Endpoint>
41
- bool operator()(const boost::system::error_code&, const Endpoint&)
42
- {
43
- return true;
44
- }
45
- };
46
-
47
38
  template <typename Protocol, typename Iterator>
48
39
  inline typename Protocol::endpoint deref_connect_result(
49
40
  Iterator iter, boost::system::error_code& ec)
@@ -51,38 +42,15 @@ namespace detail
51
42
  return ec ? typename Protocol::endpoint() : *iter;
52
43
  }
53
44
 
54
- template <typename T, typename Iterator>
55
- struct legacy_connect_condition_helper : T
56
- {
57
- typedef char (*fallback_func_type)(...);
58
- operator fallback_func_type() const;
59
- };
60
-
61
- template <typename R, typename Arg1, typename Arg2, typename Iterator>
62
- struct legacy_connect_condition_helper<R (*)(Arg1, Arg2), Iterator>
63
- {
64
- R operator()(Arg1, Arg2) const;
65
- char operator()(...) const;
66
- };
67
-
68
- template <typename T, typename Iterator>
69
- struct is_legacy_connect_condition
70
- {
71
- static char asio_connect_condition_check(char);
72
- static char (&asio_connect_condition_check(Iterator))[2];
73
-
74
- static const bool value =
75
- sizeof(asio_connect_condition_check(
76
- (declval<legacy_connect_condition_helper<T, Iterator>>())(
77
- declval<const boost::system::error_code>(),
78
- declval<const Iterator>()))) != 1;
79
- };
80
-
81
45
  template <typename ConnectCondition, typename Iterator>
82
46
  inline Iterator call_connect_condition(ConnectCondition& connect_condition,
83
47
  const boost::system::error_code& ec, Iterator next, Iterator end,
84
- enable_if_t<is_legacy_connect_condition<
85
- ConnectCondition, Iterator>::value>* = 0)
48
+ constraint_t<
49
+ is_same<
50
+ result_of_t<ConnectCondition(boost::system::error_code, Iterator)>,
51
+ Iterator
52
+ >::value
53
+ > = 0)
86
54
  {
87
55
  if (next != end)
88
56
  return connect_condition(ec, next);
@@ -92,20 +60,27 @@ namespace detail
92
60
  template <typename ConnectCondition, typename Iterator>
93
61
  inline Iterator call_connect_condition(ConnectCondition& connect_condition,
94
62
  const boost::system::error_code& ec, Iterator next, Iterator end,
95
- enable_if_t<!is_legacy_connect_condition<
96
- ConnectCondition, Iterator>::value>* = 0)
63
+ constraint_t<
64
+ is_same<
65
+ result_of_t<ConnectCondition(boost::system::error_code,
66
+ decltype(*declval<Iterator>()))>,
67
+ bool
68
+ >::value
69
+ > = 0)
97
70
  {
98
71
  for (;next != end; ++next)
99
72
  if (connect_condition(ec, *next))
100
73
  return next;
101
74
  return end;
102
75
  }
103
- }
76
+ } // namespace detail
104
77
 
105
78
  template <typename Protocol, typename Executor, typename EndpointSequence>
106
79
  typename Protocol::endpoint connect(basic_socket<Protocol, Executor>& s,
107
80
  const EndpointSequence& endpoints,
108
- constraint_t<is_endpoint_sequence<EndpointSequence>::value>)
81
+ constraint_t<
82
+ is_endpoint_sequence<EndpointSequence>::value
83
+ >)
109
84
  {
110
85
  boost::system::error_code ec;
111
86
  typename Protocol::endpoint result = connect(s, endpoints, ec);
@@ -116,7 +91,9 @@ typename Protocol::endpoint connect(basic_socket<Protocol, Executor>& s,
116
91
  template <typename Protocol, typename Executor, typename EndpointSequence>
117
92
  typename Protocol::endpoint connect(basic_socket<Protocol, Executor>& s,
118
93
  const EndpointSequence& endpoints, boost::system::error_code& ec,
119
- constraint_t<is_endpoint_sequence<EndpointSequence>::value>)
94
+ constraint_t<
95
+ is_endpoint_sequence<EndpointSequence>::value
96
+ >)
120
97
  {
121
98
  return detail::deref_connect_result<Protocol>(
122
99
  connect(s, endpoints.begin(), endpoints.end(),
@@ -126,7 +103,9 @@ typename Protocol::endpoint connect(basic_socket<Protocol, Executor>& s,
126
103
  #if !defined(BOOST_ASIO_NO_DEPRECATED)
127
104
  template <typename Protocol, typename Executor, typename Iterator>
128
105
  Iterator connect(basic_socket<Protocol, Executor>& s, Iterator begin,
129
- constraint_t<!is_endpoint_sequence<Iterator>::value>)
106
+ constraint_t<
107
+ !is_endpoint_sequence<Iterator>::value
108
+ >)
130
109
  {
131
110
  boost::system::error_code ec;
132
111
  Iterator result = connect(s, begin, ec);
@@ -137,7 +116,9 @@ Iterator connect(basic_socket<Protocol, Executor>& s, Iterator begin,
137
116
  template <typename Protocol, typename Executor, typename Iterator>
138
117
  inline Iterator connect(basic_socket<Protocol, Executor>& s,
139
118
  Iterator begin, boost::system::error_code& ec,
140
- constraint_t<!is_endpoint_sequence<Iterator>::value>)
119
+ constraint_t<
120
+ !is_endpoint_sequence<Iterator>::value
121
+ >)
141
122
  {
142
123
  return connect(s, begin, Iterator(), detail::default_connect_condition(), ec);
143
124
  }
@@ -164,7 +145,13 @@ template <typename Protocol, typename Executor,
164
145
  typename EndpointSequence, typename ConnectCondition>
165
146
  typename Protocol::endpoint connect(basic_socket<Protocol, Executor>& s,
166
147
  const EndpointSequence& endpoints, ConnectCondition connect_condition,
167
- constraint_t<is_endpoint_sequence<EndpointSequence>::value>)
148
+ constraint_t<
149
+ is_endpoint_sequence<EndpointSequence>::value
150
+ >,
151
+ constraint_t<
152
+ is_connect_condition<ConnectCondition,
153
+ decltype(declval<const EndpointSequence&>().begin())>::value
154
+ >)
168
155
  {
169
156
  boost::system::error_code ec;
170
157
  typename Protocol::endpoint result = connect(
@@ -178,7 +165,13 @@ template <typename Protocol, typename Executor,
178
165
  typename Protocol::endpoint connect(basic_socket<Protocol, Executor>& s,
179
166
  const EndpointSequence& endpoints, ConnectCondition connect_condition,
180
167
  boost::system::error_code& ec,
181
- constraint_t<is_endpoint_sequence<EndpointSequence>::value>)
168
+ constraint_t<
169
+ is_endpoint_sequence<EndpointSequence>::value
170
+ >,
171
+ constraint_t<
172
+ is_connect_condition<ConnectCondition,
173
+ decltype(declval<const EndpointSequence&>().begin())>::value
174
+ >)
182
175
  {
183
176
  return detail::deref_connect_result<Protocol>(
184
177
  connect(s, endpoints.begin(), endpoints.end(),
@@ -190,7 +183,12 @@ template <typename Protocol, typename Executor,
190
183
  typename Iterator, typename ConnectCondition>
191
184
  Iterator connect(basic_socket<Protocol, Executor>& s,
192
185
  Iterator begin, ConnectCondition connect_condition,
193
- constraint_t<!is_endpoint_sequence<Iterator>::value>)
186
+ constraint_t<
187
+ !is_endpoint_sequence<Iterator>::value
188
+ >,
189
+ constraint_t<
190
+ is_connect_condition<ConnectCondition, Iterator>::value
191
+ >)
194
192
  {
195
193
  boost::system::error_code ec;
196
194
  Iterator result = connect(s, begin, connect_condition, ec);
@@ -203,7 +201,12 @@ template <typename Protocol, typename Executor,
203
201
  inline Iterator connect(basic_socket<Protocol, Executor>& s,
204
202
  Iterator begin, ConnectCondition connect_condition,
205
203
  boost::system::error_code& ec,
206
- constraint_t<!is_endpoint_sequence<Iterator>::value>)
204
+ constraint_t<
205
+ !is_endpoint_sequence<Iterator>::value
206
+ >,
207
+ constraint_t<
208
+ is_connect_condition<ConnectCondition, Iterator>::value
209
+ >)
207
210
  {
208
211
  return connect(s, begin, Iterator(), connect_condition, ec);
209
212
  }
@@ -212,7 +215,10 @@ inline Iterator connect(basic_socket<Protocol, Executor>& s,
212
215
  template <typename Protocol, typename Executor,
213
216
  typename Iterator, typename ConnectCondition>
214
217
  Iterator connect(basic_socket<Protocol, Executor>& s, Iterator begin,
215
- Iterator end, ConnectCondition connect_condition)
218
+ Iterator end, ConnectCondition connect_condition,
219
+ constraint_t<
220
+ is_connect_condition<ConnectCondition, Iterator>::value
221
+ >)
216
222
  {
217
223
  boost::system::error_code ec;
218
224
  Iterator result = connect(s, begin, end, connect_condition, ec);
@@ -224,7 +230,10 @@ template <typename Protocol, typename Executor,
224
230
  typename Iterator, typename ConnectCondition>
225
231
  Iterator connect(basic_socket<Protocol, Executor>& s, Iterator begin,
226
232
  Iterator end, ConnectCondition connect_condition,
227
- boost::system::error_code& ec)
233
+ boost::system::error_code& ec,
234
+ constraint_t<
235
+ is_connect_condition<ConnectCondition, Iterator>::value
236
+ >)
228
237
  {
229
238
  ec = boost::system::error_code();
230
239
 
@@ -688,121 +697,6 @@ struct associator<Associator,
688
697
 
689
698
  #endif // !defined(GENERATING_DOCUMENTATION)
690
699
 
691
- template <typename Protocol, typename Executor, typename EndpointSequence,
692
- BOOST_ASIO_COMPLETION_TOKEN_FOR(void (boost::system::error_code,
693
- typename Protocol::endpoint)) RangeConnectToken>
694
- inline auto async_connect(basic_socket<Protocol, Executor>& s,
695
- const EndpointSequence& endpoints, RangeConnectToken&& token,
696
- constraint_t<is_endpoint_sequence<EndpointSequence>::value>)
697
- -> decltype(
698
- async_initiate<RangeConnectToken,
699
- void (boost::system::error_code, typename Protocol::endpoint)>(
700
- declval<detail::initiate_async_range_connect<Protocol, Executor>>(),
701
- token, endpoints, declval<detail::default_connect_condition>()))
702
- {
703
- return async_initiate<RangeConnectToken,
704
- void (boost::system::error_code, typename Protocol::endpoint)>(
705
- detail::initiate_async_range_connect<Protocol, Executor>(s),
706
- token, endpoints, detail::default_connect_condition());
707
- }
708
-
709
- #if !defined(BOOST_ASIO_NO_DEPRECATED)
710
- template <typename Protocol, typename Executor, typename Iterator,
711
- BOOST_ASIO_COMPLETION_TOKEN_FOR(void (boost::system::error_code,
712
- Iterator)) IteratorConnectToken>
713
- inline auto async_connect(basic_socket<Protocol, Executor>& s,
714
- Iterator begin, IteratorConnectToken&& token,
715
- constraint_t<!is_endpoint_sequence<Iterator>::value>)
716
- -> decltype(
717
- async_initiate<IteratorConnectToken,
718
- void (boost::system::error_code, Iterator)>(
719
- declval<detail::initiate_async_iterator_connect<Protocol, Executor>>(),
720
- token, begin, Iterator(), declval<detail::default_connect_condition>()))
721
- {
722
- return async_initiate<IteratorConnectToken,
723
- void (boost::system::error_code, Iterator)>(
724
- detail::initiate_async_iterator_connect<Protocol, Executor>(s),
725
- token, begin, Iterator(), detail::default_connect_condition());
726
- }
727
- #endif // !defined(BOOST_ASIO_NO_DEPRECATED)
728
-
729
- template <typename Protocol, typename Executor, typename Iterator,
730
- BOOST_ASIO_COMPLETION_TOKEN_FOR(void (boost::system::error_code,
731
- Iterator)) IteratorConnectToken>
732
- inline auto async_connect(basic_socket<Protocol, Executor>& s,
733
- Iterator begin, Iterator end, IteratorConnectToken&& token)
734
- -> decltype(
735
- async_initiate<IteratorConnectToken,
736
- void (boost::system::error_code, Iterator)>(
737
- declval<detail::initiate_async_iterator_connect<Protocol, Executor>>(),
738
- token, begin, end, declval<detail::default_connect_condition>()))
739
- {
740
- return async_initiate<IteratorConnectToken,
741
- void (boost::system::error_code, Iterator)>(
742
- detail::initiate_async_iterator_connect<Protocol, Executor>(s),
743
- token, begin, end, detail::default_connect_condition());
744
- }
745
-
746
- template <typename Protocol, typename Executor,
747
- typename EndpointSequence, typename ConnectCondition,
748
- BOOST_ASIO_COMPLETION_TOKEN_FOR(void (boost::system::error_code,
749
- typename Protocol::endpoint)) RangeConnectToken>
750
- inline auto async_connect(basic_socket<Protocol, Executor>& s,
751
- const EndpointSequence& endpoints, ConnectCondition connect_condition,
752
- RangeConnectToken&& token,
753
- constraint_t<is_endpoint_sequence<EndpointSequence>::value>)
754
- -> decltype(
755
- async_initiate<RangeConnectToken,
756
- void (boost::system::error_code, typename Protocol::endpoint)>(
757
- declval<detail::initiate_async_range_connect<Protocol, Executor>>(),
758
- token, endpoints, connect_condition))
759
- {
760
- return async_initiate<RangeConnectToken,
761
- void (boost::system::error_code, typename Protocol::endpoint)>(
762
- detail::initiate_async_range_connect<Protocol, Executor>(s),
763
- token, endpoints, connect_condition);
764
- }
765
-
766
- #if !defined(BOOST_ASIO_NO_DEPRECATED)
767
- template <typename Protocol, typename Executor,
768
- typename Iterator, typename ConnectCondition,
769
- BOOST_ASIO_COMPLETION_TOKEN_FOR(void (boost::system::error_code,
770
- Iterator)) IteratorConnectToken>
771
- inline auto async_connect(basic_socket<Protocol, Executor>& s, Iterator begin,
772
- ConnectCondition connect_condition, IteratorConnectToken&& token,
773
- constraint_t<!is_endpoint_sequence<Iterator>::value>)
774
- -> decltype(
775
- async_initiate<IteratorConnectToken,
776
- void (boost::system::error_code, Iterator)>(
777
- declval<detail::initiate_async_iterator_connect<Protocol, Executor>>(),
778
- token, begin, Iterator(), connect_condition))
779
- {
780
- return async_initiate<IteratorConnectToken,
781
- void (boost::system::error_code, Iterator)>(
782
- detail::initiate_async_iterator_connect<Protocol, Executor>(s),
783
- token, begin, Iterator(), connect_condition);
784
- }
785
- #endif // !defined(BOOST_ASIO_NO_DEPRECATED)
786
-
787
- template <typename Protocol, typename Executor,
788
- typename Iterator, typename ConnectCondition,
789
- BOOST_ASIO_COMPLETION_TOKEN_FOR(void (boost::system::error_code,
790
- Iterator)) IteratorConnectToken>
791
- inline auto async_connect(basic_socket<Protocol, Executor>& s,
792
- Iterator begin, Iterator end, ConnectCondition connect_condition,
793
- IteratorConnectToken&& token)
794
- -> decltype(
795
- async_initiate<IteratorConnectToken,
796
- void (boost::system::error_code, Iterator)>(
797
- declval<detail::initiate_async_iterator_connect<Protocol, Executor>>(),
798
- token, begin, end, connect_condition))
799
- {
800
- return async_initiate<IteratorConnectToken,
801
- void (boost::system::error_code, Iterator)>(
802
- detail::initiate_async_iterator_connect<Protocol, Executor>(s),
803
- token, begin, end, connect_condition);
804
- }
805
-
806
700
  } // namespace asio
807
701
  } // namespace boost
808
702
 
@@ -19,6 +19,7 @@
19
19
  #include <boost/asio/associator.hpp>
20
20
  #include <boost/asio/async_result.hpp>
21
21
  #include <boost/asio/detail/handler_cont_helpers.hpp>
22
+ #include <boost/asio/detail/initiation_base.hpp>
22
23
  #include <boost/asio/detail/type_traits.hpp>
23
24
  #include <boost/asio/detail/utility.hpp>
24
25
 
@@ -70,25 +71,31 @@ struct async_result<consign_t<CompletionToken, Values...>, Signatures...>
70
71
  : async_result<CompletionToken, Signatures...>
71
72
  {
72
73
  template <typename Initiation>
73
- struct init_wrapper
74
+ struct init_wrapper : detail::initiation_base<Initiation>
74
75
  {
75
- init_wrapper(Initiation init)
76
- : initiation_(static_cast<Initiation&&>(init))
76
+ using detail::initiation_base<Initiation>::initiation_base;
77
+
78
+ template <typename Handler, typename... Args>
79
+ void operator()(Handler&& handler,
80
+ std::tuple<Values...> values, Args&&... args) &&
77
81
  {
82
+ static_cast<Initiation&&>(*this)(
83
+ detail::consign_handler<decay_t<Handler>, Values...>(
84
+ static_cast<Handler&&>(handler),
85
+ static_cast<std::tuple<Values...>&&>(values)),
86
+ static_cast<Args&&>(args)...);
78
87
  }
79
88
 
80
89
  template <typename Handler, typename... Args>
81
90
  void operator()(Handler&& handler,
82
- std::tuple<Values...> values, Args&&... args)
91
+ std::tuple<Values...> values, Args&&... args) const &
83
92
  {
84
- static_cast<Initiation&&>(initiation_)(
93
+ static_cast<const Initiation&>(*this)(
85
94
  detail::consign_handler<decay_t<Handler>, Values...>(
86
95
  static_cast<Handler&&>(handler),
87
96
  static_cast<std::tuple<Values...>&&>(values)),
88
97
  static_cast<Args&&>(args)...);
89
98
  }
90
-
91
- Initiation initiation_;
92
99
  };
93
100
 
94
101
  template <typename Initiation, typename RawCompletionToken, typename... Args>
@@ -44,8 +44,8 @@ namespace detail {
44
44
 
45
45
  #if !defined(GENERATING_DOCUMENTATION)
46
46
 
47
- template <typename Signature>
48
- struct async_result<detached_t, Signature>
47
+ template <typename... Signatures>
48
+ struct async_result<detached_t, Signatures...>
49
49
  {
50
50
  typedef boost::asio::detail::detached_handler completion_handler_type;
51
51
 
@@ -19,6 +19,7 @@
19
19
  #include <boost/asio/associator.hpp>
20
20
  #include <boost/asio/async_result.hpp>
21
21
  #include <boost/asio/detail/handler_cont_helpers.hpp>
22
+ #include <boost/asio/detail/initiation_base.hpp>
22
23
  #include <boost/asio/detail/type_traits.hpp>
23
24
  #include <boost/asio/detail/utility.hpp>
24
25
 
@@ -95,25 +96,31 @@ struct async_result<
95
96
  Signature, Values...>::type signature;
96
97
 
97
98
  template <typename Initiation>
98
- struct init_wrapper
99
+ struct init_wrapper : detail::initiation_base<Initiation>
99
100
  {
100
- init_wrapper(Initiation init)
101
- : initiation_(static_cast<Initiation&&>(init))
101
+ using detail::initiation_base<Initiation>::initiation_base;
102
+
103
+ template <typename Handler, typename... Args>
104
+ void operator()(Handler&& handler,
105
+ std::tuple<Values...> values, Args&&... args) &&
102
106
  {
107
+ static_cast<Initiation&&>(*this)(
108
+ detail::prepend_handler<decay_t<Handler>, Values...>(
109
+ static_cast<Handler&&>(handler),
110
+ static_cast<std::tuple<Values...>&&>(values)),
111
+ static_cast<Args&&>(args)...);
103
112
  }
104
113
 
105
114
  template <typename Handler, typename... Args>
106
115
  void operator()(Handler&& handler,
107
- std::tuple<Values...> values, Args&&... args)
116
+ std::tuple<Values...> values, Args&&... args) const &
108
117
  {
109
- static_cast<Initiation&&>(initiation_)(
118
+ static_cast<const Initiation&>(*this)(
110
119
  detail::prepend_handler<decay_t<Handler>, Values...>(
111
120
  static_cast<Handler&&>(handler),
112
121
  static_cast<std::tuple<Values...>&&>(values)),
113
122
  static_cast<Args&&>(args)...);
114
123
  }
115
-
116
- Initiation initiation_;
117
124
  };
118
125
 
119
126
  template <typename Initiation, typename RawCompletionToken, typename... Args>