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
@@ -83,7 +83,7 @@
83
83
  #define PASSENGER_API_VERSION_MAJOR 0
84
84
  #define PASSENGER_API_VERSION_MINOR 3
85
85
  #define PASSENGER_DEFAULT_USER "nobody"
86
- #define PASSENGER_VERSION "6.0.23"
86
+ #define PASSENGER_VERSION "6.0.24"
87
87
  #define POOL_HELPER_THREAD_STACK_SIZE 262144
88
88
  #define PROCESS_SHUTDOWN_TIMEOUT 60
89
89
  #define PROCESS_SHUTDOWN_TIMEOUT_DISPLAY "1 minute"
@@ -27,7 +27,6 @@
27
27
  #define _PASSENGER_DATA_STRUCTURES_STRING_MAP_H_
28
28
 
29
29
  #include <string>
30
- #include <map>
31
30
  #include <utility>
32
31
 
33
32
  #include <StaticString.h>
@@ -27,7 +27,7 @@
27
27
  #include <sys/param.h>
28
28
  #include <stdlib.h>
29
29
  #include <unistd.h>
30
- #include <limits.h>
30
+ #include <limits.h> // IWYU pragma: keep; for PATH_MAX
31
31
  #include <libgen.h>
32
32
 
33
33
  #ifdef __has_include
@@ -28,10 +28,8 @@
28
28
 
29
29
  #include <ev++.h>
30
30
  #include <vector>
31
- #include <list>
32
31
  #include <memory>
33
32
  #include <boost/thread.hpp>
34
- #include <boost/scoped_ptr.hpp>
35
33
  #include <boost/shared_ptr.hpp>
36
34
  #include <boost/function.hpp>
37
35
  #include <boost/bind/bind.hpp>
@@ -82,7 +80,7 @@ private:
82
80
  }
83
81
 
84
82
  static void timeoutHandler(int revents, void *arg) {
85
- boost::scoped_ptr<Callback> callback((Callback *) arg);
83
+ std::unique_ptr<Callback> callback((Callback *) arg);
86
84
  (*callback)();
87
85
  }
88
86
 
@@ -61,13 +61,13 @@ struct RefGuard {
61
61
  file(_file),
62
62
  line(_line)
63
63
  {
64
- if (_hooks != NULL && _hooks->impl != NULL) {
64
+ if (_hooks != nullptr && _hooks->impl != nullptr) {
65
65
  _hooks->impl->hook_ref(_hooks, _source, _file, _line);
66
66
  }
67
67
  }
68
68
 
69
69
  ~RefGuard() {
70
- if (hooks != NULL && hooks->impl != NULL) {
70
+ if (hooks != nullptr && hooks->impl != nullptr) {
71
71
  hooks->impl->hook_unref(hooks, source, file, line);
72
72
  }
73
73
  }
@@ -29,7 +29,6 @@
29
29
  #include <boost/cstdint.hpp>
30
30
  #include <oxt/backtrace.hpp>
31
31
  #include <cstddef>
32
- #include <cassert>
33
32
  #include <cstring>
34
33
  #include <MemoryKit/mbuf.h>
35
34
  #include <ServerKit/llhttp.h>
@@ -32,7 +32,6 @@
32
32
  #include <oxt/macros.hpp>
33
33
  #include <algorithm>
34
34
  #include <cstdio>
35
- #include <cmath>
36
35
  #include <cassert>
37
36
  #include <pthread.h>
38
37
  #include <LoggingKit/LoggingKit.h>
@@ -401,8 +400,9 @@ private:
401
400
  if (!req->bodyChannel.acceptingInput()) {
402
401
  if (req->bodyChannel.mayAcceptInputLater()) {
403
402
  client->input.stop();
404
- req->bodyChannel.consumedCallback =
405
- onRequestBodyChannelConsumed;
403
+ req->bodyChannel.consumedCallback = [](Channel *channel, unsigned int size) {
404
+ onRequestBodyChannelConsumed(channel, size);
405
+ };
406
406
  return Channel::Result(0, false);
407
407
  } else {
408
408
  return Channel::Result(0, true);
@@ -437,8 +437,9 @@ private:
437
437
  return Channel::Result(remaining, false);
438
438
  } else if (req->bodyChannel.mayAcceptInputLater()) {
439
439
  client->input.stop();
440
- req->bodyChannel.consumedCallback =
441
- onRequestBodyChannelConsumed;
440
+ req->bodyChannel.consumedCallback = [](Channel *channel, unsigned int size) {
441
+ onRequestBodyChannelConsumed(channel, size);
442
+ };
442
443
  return Channel::Result(remaining, false);
443
444
  } else {
444
445
  return Channel::Result(remaining, true);
@@ -468,8 +469,9 @@ private:
468
469
  if (!req->bodyChannel.acceptingInput()) {
469
470
  if (req->bodyChannel.mayAcceptInputLater()) {
470
471
  client->input.stop();
471
- req->bodyChannel.consumedCallback =
472
- onRequestBodyChannelConsumed;
472
+ req->bodyChannel.consumedCallback = [](Channel *channel, unsigned int size) {
473
+ onRequestBodyChannelConsumed(channel, size);
474
+ };
473
475
  return Channel::Result(0, false);
474
476
  } else {
475
477
  return Channel::Result(0, true);
@@ -510,7 +512,9 @@ private:
510
512
  req->bodyChannel.feed(MemoryKit::mbuf());
511
513
  } else if (req->bodyChannel.mayAcceptInputLater()) {
512
514
  client->input.stop();
513
- req->bodyChannel.consumedCallback = onRequestBodyChannelConsumed;
515
+ req->bodyChannel.consumedCallback = [](Channel *channel, unsigned int size) {
516
+ onRequestBodyChannelConsumed(channel, size);
517
+ };
514
518
  }
515
519
  }
516
520
  }
@@ -607,8 +611,9 @@ private:
607
611
  } else if (req->bodyChannel.mayAcceptInputLater()) {
608
612
  SKC_TRACE(client, 3, "BodyChannel currently busy; will feed "
609
613
  "error to bodyChannel later");
610
- req->bodyChannel.consumedCallback =
611
- onRequestBodyChannelConsumed_onBodyError;
614
+ req->bodyChannel.consumedCallback = [](Channel *channel, unsigned int size) {
615
+ onRequestBodyChannelConsumed_onBodyError(channel, size);
616
+ };
612
617
  req->bodyError = errcode;
613
618
  return Channel::Result(-1, false);
614
619
  } else {
@@ -38,12 +38,6 @@
38
38
  #include <new>
39
39
  #include <ev++.h>
40
40
 
41
- // for std::swap()
42
- #if __cplusplus >= 201103L
43
- #include <utility>
44
- #else
45
- #include <algorithm>
46
- #endif
47
41
  #include <sys/socket.h>
48
42
  #include <sys/un.h>
49
43
  #include <netinet/in.h>
@@ -189,6 +189,8 @@ limitedStrerror(int e, const char *defaultResult = "Unknown error") {
189
189
  return "Operation not permitted";
190
190
  case ETXTBSY:
191
191
  return "Text file busy";
192
+ case ESRCH:
193
+ return "Process does not exist";
192
194
  default:
193
195
  return defaultResult;
194
196
  }
@@ -26,9 +26,6 @@
26
26
  #ifndef _PASSENGER_SPEED_METER_H_
27
27
  #define _PASSENGER_SPEED_METER_H_
28
28
 
29
- #include <cstdio>
30
- #include <cstdlib>
31
- #include <cassert>
32
29
  #include <limits>
33
30
  #include <SystemTools/SystemTime.h>
34
31
 
@@ -26,6 +26,7 @@
26
26
  #include <boost/thread/mutex.hpp>
27
27
  #include <boost/shared_ptr.hpp>
28
28
  #include <boost/make_shared.hpp>
29
+ #include <pthread.h>
29
30
  #include "tracable_exception.hpp"
30
31
  #include "backtrace.hpp"
31
32
  #include "initialize.hpp"
@@ -394,9 +395,19 @@ thread::make_thread_name(const string &given_name) {
394
395
  }
395
396
  }
396
397
 
398
+ static void
399
+ set_native_thread_name(const string &name) {
400
+ #if defined(__linux__)
401
+ pthread_setname_np(pthread_self(), name.c_str());
402
+ #elif defined(__APPLE__) || defined(__FreeBSD__)
403
+ pthread_setname_np(name.c_str());
404
+ #endif
405
+ }
406
+
397
407
  void
398
408
  thread::thread_main(const boost::function<void ()> func, thread_local_context_ptr ctx) {
399
409
  set_thread_local_context(ctx);
410
+ set_native_thread_name(ctx->thread_name);
400
411
 
401
412
  if (OXT_LIKELY(global_context != NULL)) {
402
413
  boost::lock_guard<boost::mutex> l(global_context->thread_registration_mutex);
@@ -65,9 +65,16 @@ oxt::setup_syscall_interruption_support() {
65
65
  do {
66
66
  ret = sigaction(INTERRUPTION_SIGNAL, &action, NULL);
67
67
  } while (ret == -1 && errno == EINTR);
68
- do {
69
- ret = siginterrupt(INTERRUPTION_SIGNAL, 1);
70
- } while (ret == -1 && errno == EINTR);
68
+ #if !defined(__linux__)
69
+ // On Linux, siginterrupt() is deprecated. System call interruption works
70
+ // by merely calling sigaction() with sa_flags without SA_RESTART.
71
+ // Unfortunately, this does not seem to be the case on other operationg systems.
72
+ // For example, on macOS, we need to call *both* sigaction() without SA_RESTART,
73
+ // *and* siginterrupt().
74
+ do {
75
+ ret = siginterrupt(INTERRUPTION_SIGNAL, 1);
76
+ } while (ret == -1 && errno == EINTR);
77
+ #endif
71
78
  }
72
79
 
73
80
  void
@@ -35,7 +35,7 @@
35
35
  #include <string>
36
36
  #include <list>
37
37
  #include <unistd.h>
38
- #include <limits.h> // for PTHREAD_STACK_MIN
38
+ #include <limits.h> // IWYU pragma: keep; for PTHREAD_STACK_MIN
39
39
 
40
40
  namespace oxt {
41
41
 
@@ -107,16 +107,42 @@ public:
107
107
  CompletionToken token_;
108
108
  };
109
109
 
110
- /// Adapt a @ref completion_token to specify that the completion handler
111
- /// arguments should be combined into a single tuple argument.
112
- template <typename CompletionToken>
113
- BOOST_ASIO_NODISCARD inline
114
- constexpr as_tuple_t<decay_t<CompletionToken>>
115
- as_tuple(CompletionToken&& completion_token)
110
+ /// A function object type that adapts a @ref completion_token to specify that
111
+ /// the completion handler arguments should be combined into a single tuple
112
+ /// argument.
113
+ /**
114
+ * May also be used directly as a completion token, in which case it adapts the
115
+ * asynchronous operation's default completion token (or boost::asio::deferred
116
+ * if no default is available).
117
+ */
118
+ struct partial_as_tuple
116
119
  {
117
- return as_tuple_t<decay_t<CompletionToken>>(
118
- static_cast<CompletionToken&&>(completion_token));
119
- }
120
+ /// Default constructor.
121
+ constexpr partial_as_tuple()
122
+ {
123
+ }
124
+
125
+ /// Adapt a @ref completion_token to specify that the completion handler
126
+ /// arguments should be combined into a single tuple argument.
127
+ template <typename CompletionToken>
128
+ BOOST_ASIO_NODISCARD inline
129
+ constexpr as_tuple_t<decay_t<CompletionToken>>
130
+ operator()(CompletionToken&& completion_token) const
131
+ {
132
+ return as_tuple_t<decay_t<CompletionToken>>(
133
+ static_cast<CompletionToken&&>(completion_token));
134
+ }
135
+ };
136
+
137
+ /// A function object that adapts a @ref completion_token to specify that the
138
+ /// completion handler arguments should be combined into a single tuple
139
+ /// argument.
140
+ /**
141
+ * May also be used directly as a completion token, in which case it adapts the
142
+ * asynchronous operation's default completion token (or boost::asio::deferred
143
+ * if no default is available).
144
+ */
145
+ BOOST_ASIO_INLINE_VARIABLE constexpr partial_as_tuple as_tuple;
120
146
 
121
147
  } // namespace asio
122
148
  } // namespace boost
@@ -50,9 +50,10 @@ struct has_immediate_executor_type<T,
50
50
  template <typename E, typename = void, typename = void>
51
51
  struct default_immediate_executor
52
52
  {
53
- typedef require_result_t<E, execution::blocking_t::never_t> type;
53
+ typedef decay_t<require_result_t<E, execution::blocking_t::never_t>> type;
54
54
 
55
- static type get(const E& e) noexcept
55
+ static auto get(const E& e) noexcept
56
+ -> decltype(boost::asio::require(e, execution::blocking.never))
56
57
  {
57
58
  return boost::asio::require(e, execution::blocking.never);
58
59
  }
@@ -24,7 +24,7 @@ namespace asio {
24
24
 
25
25
  /// Used to generically specialise associators for a type.
26
26
  template <template <typename, typename> class Associator,
27
- typename T, typename DefaultCandidate>
27
+ typename T, typename DefaultCandidate, typename _ = void>
28
28
  struct associator
29
29
  {
30
30
  };
@@ -22,9 +22,6 @@
22
22
 
23
23
  namespace boost {
24
24
  namespace asio {
25
-
26
- #if defined(BOOST_ASIO_HAS_CONCEPTS)
27
-
28
25
  namespace detail {
29
26
 
30
27
  template <typename T>
@@ -71,6 +68,12 @@ struct are_completion_signatures : false_type
71
68
  {
72
69
  };
73
70
 
71
+ template <>
72
+ struct are_completion_signatures<>
73
+ : true_type
74
+ {
75
+ };
76
+
74
77
  template <typename T0>
75
78
  struct are_completion_signatures<T0>
76
79
  : is_completion_signature<T0>
@@ -85,6 +88,12 @@ struct are_completion_signatures<T0, TN...>
85
88
  {
86
89
  };
87
90
 
91
+ } // namespace detail
92
+
93
+ #if defined(BOOST_ASIO_HAS_CONCEPTS)
94
+
95
+ namespace detail {
96
+
88
97
  template <typename T, typename... Args>
89
98
  BOOST_ASIO_CONCEPT callable_with = requires(T&& t, Args&&... args)
90
99
  {
@@ -607,14 +616,36 @@ template <typename CompletionToken,
607
616
  typename Initiation, typename... Args>
608
617
  inline auto async_initiate(Initiation&& initiation,
609
618
  type_identity_t<CompletionToken>& token, Args&&... args)
610
- -> constraint_t<
611
- detail::async_result_has_initiate_memfn<
612
- CompletionToken, Signatures...>::value,
613
- decltype(
614
- async_result<decay_t<CompletionToken>, Signatures...>::initiate(
615
- static_cast<Initiation&&>(initiation),
616
- static_cast<CompletionToken&&>(token),
617
- static_cast<Args&&>(args)...))>
619
+ -> decltype(enable_if_t<
620
+ enable_if_t<
621
+ detail::are_completion_signatures<Signatures...>::value,
622
+ detail::async_result_has_initiate_memfn<
623
+ CompletionToken, Signatures...>>::value,
624
+ async_result<decay_t<CompletionToken>, Signatures...>>::initiate(
625
+ static_cast<Initiation&&>(initiation),
626
+ static_cast<CompletionToken&&>(token),
627
+ static_cast<Args&&>(args)...))
628
+ {
629
+ return async_result<decay_t<CompletionToken>, Signatures...>::initiate(
630
+ static_cast<Initiation&&>(initiation),
631
+ static_cast<CompletionToken&&>(token),
632
+ static_cast<Args&&>(args)...);
633
+ }
634
+
635
+ template <
636
+ BOOST_ASIO_COMPLETION_SIGNATURE... Signatures,
637
+ typename CompletionToken, typename Initiation, typename... Args>
638
+ inline auto async_initiate(Initiation&& initiation,
639
+ CompletionToken&& token, Args&&... args)
640
+ -> decltype(enable_if_t<
641
+ enable_if_t<
642
+ detail::are_completion_signatures<Signatures...>::value,
643
+ detail::async_result_has_initiate_memfn<
644
+ CompletionToken, Signatures...>>::value,
645
+ async_result<decay_t<CompletionToken>, Signatures...>>::initiate(
646
+ static_cast<Initiation&&>(initiation),
647
+ static_cast<CompletionToken&&>(token),
648
+ static_cast<Args&&>(args)...))
618
649
  {
619
650
  return async_result<decay_t<CompletionToken>, Signatures...>::initiate(
620
651
  static_cast<Initiation&&>(initiation),
@@ -625,10 +656,13 @@ inline auto async_initiate(Initiation&& initiation,
625
656
  template <typename CompletionToken,
626
657
  BOOST_ASIO_COMPLETION_SIGNATURE... Signatures,
627
658
  typename Initiation, typename... Args>
628
- inline constraint_t<
629
- !detail::async_result_has_initiate_memfn<
630
- CompletionToken, Signatures...>::value,
631
- typename async_result<decay_t<CompletionToken>, Signatures...>::return_type>
659
+ inline typename enable_if_t<
660
+ !enable_if_t<
661
+ detail::are_completion_signatures<Signatures...>::value,
662
+ detail::async_result_has_initiate_memfn<
663
+ CompletionToken, Signatures...>>::value,
664
+ async_result<decay_t<CompletionToken>, Signatures...>
665
+ >::return_type
632
666
  async_initiate(Initiation&& initiation,
633
667
  type_identity_t<CompletionToken>& token, Args&&... args)
634
668
  {
@@ -644,6 +678,29 @@ async_initiate(Initiation&& initiation,
644
678
  return completion.result.get();
645
679
  }
646
680
 
681
+ template <BOOST_ASIO_COMPLETION_SIGNATURE... Signatures,
682
+ typename CompletionToken, typename Initiation, typename... Args>
683
+ inline typename enable_if_t<
684
+ !enable_if_t<
685
+ detail::are_completion_signatures<Signatures...>::value,
686
+ detail::async_result_has_initiate_memfn<
687
+ CompletionToken, Signatures...>>::value,
688
+ async_result<decay_t<CompletionToken>, Signatures...>
689
+ >::return_type
690
+ async_initiate(Initiation&& initiation, CompletionToken&& token, Args&&... args)
691
+ {
692
+ async_completion<CompletionToken, Signatures...> completion(token);
693
+
694
+ static_cast<Initiation&&>(initiation)(
695
+ static_cast<
696
+ typename async_result<decay_t<CompletionToken>,
697
+ Signatures...>::completion_handler_type&&>(
698
+ completion.completion_handler),
699
+ static_cast<Args&&>(args)...);
700
+
701
+ return completion.result.get();
702
+ }
703
+
647
704
  #endif // defined(GENERATING_DOCUMENTATION)
648
705
 
649
706
  #if defined(BOOST_ASIO_HAS_CONCEPTS)
@@ -883,62 +940,11 @@ template <typename T, typename... Args>
883
940
  using completion_signature_of_t =
884
941
  typename completion_signature_of<T, Args...>::type;
885
942
 
886
- namespace detail {
887
-
888
- template <typename T, typename = void>
889
- struct default_completion_token_impl
890
- {
891
- typedef void type;
892
- };
893
-
894
- template <typename T>
895
- struct default_completion_token_impl<T,
896
- void_t<typename T::default_completion_token_type>
897
- >
898
- {
899
- typedef typename T::default_completion_token_type type;
900
- };
901
-
902
- } // namespace detail
903
-
904
- #if defined(GENERATING_DOCUMENTATION)
905
-
906
- /// Traits type used to determine the default completion token type associated
907
- /// with a type (such as an executor).
908
- /**
909
- * A program may specialise this traits type if the @c T template parameter in
910
- * the specialisation is a user-defined type.
911
- *
912
- * Specialisations of this trait may provide a nested typedef @c type, which is
913
- * a default-constructible completion token type.
914
- */
915
- template <typename T>
916
- struct default_completion_token
917
- {
918
- /// If @c T has a nested type @c default_completion_token_type,
919
- /// <tt>T::default_completion_token_type</tt>. Otherwise the typedef @c type
920
- /// is not defined.
921
- typedef see_below type;
922
- };
923
- #else
924
- template <typename T>
925
- struct default_completion_token
926
- : detail::default_completion_token_impl<T>
927
- {
928
- };
929
- #endif
930
-
931
- template <typename T>
932
- using default_completion_token_t = typename default_completion_token<T>::type;
933
-
934
- #define BOOST_ASIO_DEFAULT_COMPLETION_TOKEN_TYPE(e) \
935
- = typename ::boost::asio::default_completion_token<e>::type
936
- #define BOOST_ASIO_DEFAULT_COMPLETION_TOKEN(e) \
937
- = typename ::boost::asio::default_completion_token<e>::type()
938
-
939
943
  } // namespace asio
940
944
  } // namespace boost
941
945
 
942
946
  #include <boost/asio/detail/pop_options.hpp>
943
947
 
948
+ #include <boost/asio/default_completion_token.hpp>
949
+
944
950
  #endif // BOOST_ASIO_ASYNC_RESULT_HPP
@@ -448,7 +448,7 @@ public:
448
448
  * Regardless of whether the asynchronous operation completes immediately or
449
449
  * not, the completion handler will not be invoked from within this function.
450
450
  * On immediate completion, invocation of the handler will be performed in a
451
- * manner equivalent to using boost::asio::post().
451
+ * manner equivalent to using boost::asio::async_immediate().
452
452
  *
453
453
  * @par Completion Signature
454
454
  * @code void(boost::system::error_code, std::size_t) @endcode
@@ -518,7 +518,7 @@ public:
518
518
  * Regardless of whether the asynchronous operation completes immediately or
519
519
  * not, the completion handler will not be invoked from within this function.
520
520
  * On immediate completion, invocation of the handler will be performed in a
521
- * manner equivalent to using boost::asio::post().
521
+ * manner equivalent to using boost::asio::async_immediate().
522
522
  *
523
523
  * @par Completion Signature
524
524
  * @code void(boost::system::error_code, std::size_t) @endcode
@@ -667,7 +667,7 @@ public:
667
667
  * Regardless of whether the asynchronous operation completes immediately or
668
668
  * not, the completion handler will not be invoked from within this function.
669
669
  * On immediate completion, invocation of the handler will be performed in a
670
- * manner equivalent to using boost::asio::post().
670
+ * manner equivalent to using boost::asio::async_immediate().
671
671
  *
672
672
  * @par Completion Signature
673
673
  * @code void(boost::system::error_code, std::size_t) @endcode
@@ -740,7 +740,7 @@ public:
740
740
  * Regardless of whether the asynchronous operation completes immediately or
741
741
  * not, the completion handler will not be invoked from within this function.
742
742
  * On immediate completion, invocation of the handler will be performed in a
743
- * manner equivalent to using boost::asio::post().
743
+ * manner equivalent to using boost::asio::async_immediate().
744
744
  *
745
745
  * @par Completion Signature
746
746
  * @code void(boost::system::error_code, std::size_t) @endcode
@@ -885,7 +885,7 @@ public:
885
885
  * Regardless of whether the asynchronous operation completes immediately or
886
886
  * not, the completion handler will not be invoked from within this function.
887
887
  * On immediate completion, invocation of the handler will be performed in a
888
- * manner equivalent to using boost::asio::post().
888
+ * manner equivalent to using boost::asio::async_immediate().
889
889
  *
890
890
  * @par Completion Signature
891
891
  * @code void(boost::system::error_code, std::size_t) @endcode
@@ -956,7 +956,7 @@ public:
956
956
  * Regardless of whether the asynchronous operation completes immediately or
957
957
  * not, the completion handler will not be invoked from within this function.
958
958
  * On immediate completion, invocation of the handler will be performed in a
959
- * manner equivalent to using boost::asio::post().
959
+ * manner equivalent to using boost::asio::async_immediate().
960
960
  *
961
961
  * @par Completion Signature
962
962
  * @code void(boost::system::error_code, std::size_t) @endcode
@@ -1027,7 +1027,7 @@ public:
1027
1027
  boost::asio::detail::throw_error(ec, "receive_from");
1028
1028
  return s;
1029
1029
  }
1030
-
1030
+
1031
1031
  /// Receive a datagram with the endpoint of the sender.
1032
1032
  /**
1033
1033
  * This function is used to receive a datagram. The function call will block
@@ -1054,7 +1054,7 @@ public:
1054
1054
  boost::asio::detail::throw_error(ec, "receive_from");
1055
1055
  return s;
1056
1056
  }
1057
-
1057
+
1058
1058
  /// Receive a datagram with the endpoint of the sender.
1059
1059
  /**
1060
1060
  * This function is used to receive a datagram. The function call will block
@@ -1108,7 +1108,7 @@ public:
1108
1108
  * Regardless of whether the asynchronous operation completes immediately or
1109
1109
  * not, the completion handler will not be invoked from within this function.
1110
1110
  * On immediate completion, invocation of the handler will be performed in a
1111
- * manner equivalent to using boost::asio::post().
1111
+ * manner equivalent to using boost::asio::async_immediate().
1112
1112
  *
1113
1113
  * @par Completion Signature
1114
1114
  * @code void(boost::system::error_code, std::size_t) @endcode
@@ -1180,7 +1180,7 @@ public:
1180
1180
  * Regardless of whether the asynchronous operation completes immediately or
1181
1181
  * not, the completion handler will not be invoked from within this function.
1182
1182
  * On immediate completion, invocation of the handler will be performed in a
1183
- * manner equivalent to using boost::asio::post().
1183
+ * manner equivalent to using boost::asio::async_immediate().
1184
1184
  *
1185
1185
  * @par Completion Signature
1186
1186
  * @code void(boost::system::error_code, std::size_t) @endcode
@@ -1220,7 +1220,7 @@ private:
1220
1220
  const basic_datagram_socket&) = delete;
1221
1221
 
1222
1222
  class initiate_async_send
1223
- {
1223
+ {
1224
1224
  public:
1225
1225
  typedef Executor executor_type;
1226
1226
 
@@ -64,7 +64,7 @@ namespace asio {
64
64
  * timer.wait();
65
65
  * @endcode
66
66
  *
67
- * @par
67
+ * @par
68
68
  * Performing an asynchronous wait:
69
69
  * @code
70
70
  * void handler(const boost::system::error_code& error)
@@ -631,7 +631,7 @@ public:
631
631
  * Regardless of whether the asynchronous operation completes immediately or
632
632
  * not, the completion handler will not be invoked from within this function.
633
633
  * On immediate completion, invocation of the handler will be performed in a
634
- * manner equivalent to using boost::asio::post().
634
+ * manner equivalent to using boost::asio::async_immediate().
635
635
  *
636
636
  * @par Completion Signature
637
637
  * @code void(boost::system::error_code) @endcode
@@ -428,7 +428,7 @@ public:
428
428
  * Regardless of whether the asynchronous operation completes immediately or
429
429
  * not, the completion handler will not be invoked from within this function.
430
430
  * On immediate completion, invocation of the handler will be performed in a
431
- * manner equivalent to using boost::asio::post().
431
+ * manner equivalent to using boost::asio::async_immediate().
432
432
  *
433
433
  * @par Completion Signature
434
434
  * @code void(boost::system::error_code, std::size_t) @endcode
@@ -563,7 +563,7 @@ public:
563
563
  * Regardless of whether the asynchronous operation completes immediately or
564
564
  * not, the completion handler will not be invoked from within this function.
565
565
  * On immediate completion, invocation of the handler will be performed in a
566
- * manner equivalent to using boost::asio::post().
566
+ * manner equivalent to using boost::asio::async_immediate().
567
567
  *
568
568
  * @par Completion Signature
569
569
  * @code void(boost::system::error_code, std::size_t) @endcode