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
@@ -0,0 +1,303 @@
1
+ //
2
+ // cancel_after.hpp
3
+ // ~~~~~~~~~~~~~~~~
4
+ //
5
+ // Copyright (c) 2003-2024 Christopher M. Kohlhoff (chris at kohlhoff dot com)
6
+ //
7
+ // Distributed under the Boost Software License, Version 1.0. (See accompanying
8
+ // file LICENSE_1_0.txt or copy at http://www.boost.org/LICENSE_1_0.txt)
9
+ //
10
+
11
+ #ifndef BOOST_ASIO_CANCEL_AFTER_HPP
12
+ #define BOOST_ASIO_CANCEL_AFTER_HPP
13
+
14
+ #if defined(_MSC_VER) && (_MSC_VER >= 1200)
15
+ # pragma once
16
+ #endif // defined(_MSC_VER) && (_MSC_VER >= 1200)
17
+
18
+ #include <boost/asio/detail/config.hpp>
19
+ #include <boost/asio/basic_waitable_timer.hpp>
20
+ #include <boost/asio/cancellation_type.hpp>
21
+ #include <boost/asio/detail/chrono.hpp>
22
+ #include <boost/asio/detail/type_traits.hpp>
23
+ #include <boost/asio/wait_traits.hpp>
24
+
25
+ #include <boost/asio/detail/push_options.hpp>
26
+
27
+ namespace boost {
28
+ namespace asio {
29
+
30
+ /// A @ref completion_token adapter that cancels an operation after a timeout.
31
+ /**
32
+ * The cancel_after_t class is used to indicate that an asynchronous operation
33
+ * should be cancelled if not complete before the specified duration has
34
+ * elapsed.
35
+ */
36
+ template <typename CompletionToken, typename Clock,
37
+ typename WaitTraits = boost::asio::wait_traits<Clock>>
38
+ class cancel_after_t
39
+ {
40
+ public:
41
+ /// Constructor.
42
+ template <typename T>
43
+ cancel_after_t(T&& completion_token, const typename Clock::duration& timeout,
44
+ cancellation_type_t cancel_type = cancellation_type::terminal)
45
+ : token_(static_cast<T&&>(completion_token)),
46
+ timeout_(timeout),
47
+ cancel_type_(cancel_type)
48
+ {
49
+ }
50
+
51
+ //private:
52
+ CompletionToken token_;
53
+ typename Clock::duration timeout_;
54
+ cancellation_type_t cancel_type_;
55
+ };
56
+
57
+ /// A @ref completion_token adapter that cancels an operation after a timeout.
58
+ /**
59
+ * The cancel_after_timer class is used to indicate that an asynchronous
60
+ * operation should be cancelled if not complete before the specified duration
61
+ * has elapsed.
62
+ */
63
+ template <typename CompletionToken, typename Clock,
64
+ typename WaitTraits = boost::asio::wait_traits<Clock>,
65
+ typename Executor = any_io_executor>
66
+ class cancel_after_timer
67
+ {
68
+ public:
69
+ /// Constructor.
70
+ template <typename T>
71
+ cancel_after_timer(T&& completion_token,
72
+ basic_waitable_timer<Clock, WaitTraits, Executor>& timer,
73
+ const typename Clock::duration& timeout,
74
+ cancellation_type_t cancel_type = cancellation_type::terminal)
75
+ : token_(static_cast<T&&>(completion_token)),
76
+ timer_(timer),
77
+ timeout_(timeout),
78
+ cancel_type_(cancel_type)
79
+ {
80
+ }
81
+
82
+ //private:
83
+ CompletionToken token_;
84
+ basic_waitable_timer<Clock, WaitTraits, Executor>& timer_;
85
+ typename Clock::duration timeout_;
86
+ cancellation_type_t cancel_type_;
87
+ };
88
+
89
+ /// A function object type that adapts a @ref completion_token to cancel an
90
+ /// operation after a timeout.
91
+ /**
92
+ * May also be used directly as a completion token, in which case it adapts the
93
+ * asynchronous operation's default completion token (or boost::asio::deferred
94
+ * if no default is available).
95
+ */
96
+ template <typename Clock, typename WaitTraits = boost::asio::wait_traits<Clock>>
97
+ class partial_cancel_after
98
+ {
99
+ public:
100
+ /// Constructor that specifies the timeout duration and cancellation type.
101
+ explicit partial_cancel_after(const typename Clock::duration& timeout,
102
+ cancellation_type_t cancel_type = cancellation_type::terminal)
103
+ : timeout_(timeout),
104
+ cancel_type_(cancel_type)
105
+ {
106
+ }
107
+
108
+ /// Adapt a @ref completion_token to specify that the completion handler
109
+ /// arguments should be combined into a single tuple argument.
110
+ template <typename CompletionToken>
111
+ BOOST_ASIO_NODISCARD inline
112
+ cancel_after_t<decay_t<CompletionToken>, Clock, WaitTraits>
113
+ operator()(CompletionToken&& completion_token) const
114
+ {
115
+ return cancel_after_t<decay_t<CompletionToken>, Clock, WaitTraits>(
116
+ static_cast<CompletionToken&&>(completion_token),
117
+ timeout_, cancel_type_);
118
+ }
119
+
120
+ //private:
121
+ typename Clock::duration timeout_;
122
+ cancellation_type_t cancel_type_;
123
+ };
124
+
125
+ /// A function object type that adapts a @ref completion_token to cancel an
126
+ /// operation after a timeout.
127
+ /**
128
+ * May also be used directly as a completion token, in which case it adapts the
129
+ * asynchronous operation's default completion token (or boost::asio::deferred
130
+ * if no default is available).
131
+ */
132
+ template <typename Clock, typename WaitTraits = boost::asio::wait_traits<Clock>,
133
+ typename Executor = any_io_executor>
134
+ class partial_cancel_after_timer
135
+ {
136
+ public:
137
+ /// Constructor that specifies the timeout duration and cancellation type.
138
+ explicit partial_cancel_after_timer(
139
+ basic_waitable_timer<Clock, WaitTraits, Executor>& timer,
140
+ const typename Clock::duration& timeout,
141
+ cancellation_type_t cancel_type = cancellation_type::terminal)
142
+ : timer_(timer),
143
+ timeout_(timeout),
144
+ cancel_type_(cancel_type)
145
+ {
146
+ }
147
+
148
+ /// Adapt a @ref completion_token to specify that the completion handler
149
+ /// arguments should be combined into a single tuple argument.
150
+ template <typename CompletionToken>
151
+ BOOST_ASIO_NODISCARD inline
152
+ cancel_after_timer<decay_t<CompletionToken>, Clock, WaitTraits, Executor>
153
+ operator()(CompletionToken&& completion_token) const
154
+ {
155
+ return cancel_after_timer<decay_t<CompletionToken>,
156
+ Clock, WaitTraits, Executor>(
157
+ static_cast<CompletionToken&&>(completion_token),
158
+ timeout_, cancel_type_);
159
+ }
160
+
161
+ //private:
162
+ basic_waitable_timer<Clock, WaitTraits, Executor>& timer_;
163
+ typename Clock::duration timeout_;
164
+ cancellation_type_t cancel_type_;
165
+ };
166
+
167
+ /// Create a partial completion token adapter that cancels an operation if not
168
+ /// complete before the specified relative timeout has elapsed.
169
+ /**
170
+ * @par Thread Safety
171
+ * When an asynchronous operation is used with cancel_after, a timer async_wait
172
+ * operation is performed in parallel to the main operation. If this parallel
173
+ * async_wait completes first, a cancellation request is emitted to cancel the
174
+ * main operation. Consequently, the application must ensure that the
175
+ * asynchronous operation is performed within an implicit or explicit strand.
176
+ */
177
+ template <typename Rep, typename Period>
178
+ BOOST_ASIO_NODISCARD inline partial_cancel_after<chrono::steady_clock>
179
+ cancel_after(const chrono::duration<Rep, Period>& timeout,
180
+ cancellation_type_t cancel_type = cancellation_type::terminal)
181
+ {
182
+ return partial_cancel_after<chrono::steady_clock>(timeout, cancel_type);
183
+ }
184
+
185
+ /// Create a partial completion token adapter that cancels an operation if not
186
+ /// complete before the specified relative timeout has elapsed.
187
+ /**
188
+ * @par Thread Safety
189
+ * When an asynchronous operation is used with cancel_after, a timer async_wait
190
+ * operation is performed in parallel to the main operation. If this parallel
191
+ * async_wait completes first, a cancellation request is emitted to cancel the
192
+ * main operation. Consequently, the application must ensure that the
193
+ * asynchronous operation is performed within an implicit or explicit strand.
194
+ */
195
+ template <typename Clock, typename WaitTraits,
196
+ typename Executor, typename Rep, typename Period>
197
+ BOOST_ASIO_NODISCARD inline
198
+ partial_cancel_after_timer<Clock, WaitTraits, Executor>
199
+ cancel_after(basic_waitable_timer<Clock, WaitTraits, Executor>& timer,
200
+ const chrono::duration<Rep, Period>& timeout,
201
+ cancellation_type_t cancel_type = cancellation_type::terminal)
202
+ {
203
+ return partial_cancel_after_timer<Clock, WaitTraits, Executor>(
204
+ timer, timeout, cancel_type);
205
+ }
206
+
207
+ /// Adapt a @ref completion_token to cancel an operation if not complete before
208
+ /// the specified relative timeout has elapsed.
209
+ /**
210
+ * @par Thread Safety
211
+ * When an asynchronous operation is used with cancel_after, a timer async_wait
212
+ * operation is performed in parallel to the main operation. If this parallel
213
+ * async_wait completes first, a cancellation request is emitted to cancel the
214
+ * main operation. Consequently, the application must ensure that the
215
+ * asynchronous operation is performed within an implicit or explicit strand.
216
+ */
217
+ template <typename Rep, typename Period, typename CompletionToken>
218
+ BOOST_ASIO_NODISCARD inline
219
+ cancel_after_t<decay_t<CompletionToken>, chrono::steady_clock>
220
+ cancel_after(const chrono::duration<Rep, Period>& timeout,
221
+ CompletionToken&& completion_token)
222
+ {
223
+ return cancel_after_t<decay_t<CompletionToken>, chrono::steady_clock>(
224
+ static_cast<CompletionToken&&>(completion_token),
225
+ timeout, cancellation_type::terminal);
226
+ }
227
+
228
+ /// Adapt a @ref completion_token to cancel an operation if not complete before
229
+ /// the specified relative timeout has elapsed.
230
+ /**
231
+ * @par Thread Safety
232
+ * When an asynchronous operation is used with cancel_after, a timer async_wait
233
+ * operation is performed in parallel to the main operation. If this parallel
234
+ * async_wait completes first, a cancellation request is emitted to cancel the
235
+ * main operation. Consequently, the application must ensure that the
236
+ * asynchronous operation is performed within an implicit or explicit strand.
237
+ */
238
+ template <typename Rep, typename Period, typename CompletionToken>
239
+ BOOST_ASIO_NODISCARD inline
240
+ cancel_after_t<decay_t<CompletionToken>, chrono::steady_clock>
241
+ cancel_after(const chrono::duration<Rep, Period>& timeout,
242
+ cancellation_type_t cancel_type, CompletionToken&& completion_token)
243
+ {
244
+ return cancel_after_t<decay_t<CompletionToken>, chrono::steady_clock>(
245
+ static_cast<CompletionToken&&>(completion_token), timeout, cancel_type);
246
+ }
247
+
248
+ /// Adapt a @ref completion_token to cancel an operation if not complete before
249
+ /// the specified relative timeout has elapsed.
250
+ /**
251
+ * @par Thread Safety
252
+ * When an asynchronous operation is used with cancel_after, a timer async_wait
253
+ * operation is performed in parallel to the main operation. If this parallel
254
+ * async_wait completes first, a cancellation request is emitted to cancel the
255
+ * main operation. Consequently, the application must ensure that the
256
+ * asynchronous operation is performed within an implicit or explicit strand.
257
+ */
258
+ template <typename Clock, typename WaitTraits, typename Executor,
259
+ typename Rep, typename Period, typename CompletionToken>
260
+ BOOST_ASIO_NODISCARD inline
261
+ cancel_after_timer<decay_t<CompletionToken>, Clock, WaitTraits, Executor>
262
+ cancel_after(basic_waitable_timer<Clock, WaitTraits, Executor>& timer,
263
+ const chrono::duration<Rep, Period>& timeout,
264
+ CompletionToken&& completion_token)
265
+ {
266
+ return cancel_after_timer<decay_t<CompletionToken>,
267
+ Clock, WaitTraits, Executor>(
268
+ static_cast<CompletionToken&&>(completion_token),
269
+ timer, timeout, cancellation_type::terminal);
270
+ }
271
+
272
+ /// Adapt a @ref completion_token to cancel an operation if not complete before
273
+ /// the specified relative timeout has elapsed.
274
+ /**
275
+ * @par Thread Safety
276
+ * When an asynchronous operation is used with cancel_after, a timer async_wait
277
+ * operation is performed in parallel to the main operation. If this parallel
278
+ * async_wait completes first, a cancellation request is emitted to cancel the
279
+ * main operation. Consequently, the application must ensure that the
280
+ * asynchronous operation is performed within an implicit or explicit strand.
281
+ */
282
+ template <typename Clock, typename WaitTraits, typename Executor,
283
+ typename Rep, typename Period, typename CompletionToken>
284
+ BOOST_ASIO_NODISCARD inline
285
+ cancel_after_timer<decay_t<CompletionToken>, chrono::steady_clock>
286
+ cancel_after(basic_waitable_timer<Clock, WaitTraits, Executor>& timer,
287
+ const chrono::duration<Rep, Period>& timeout,
288
+ cancellation_type_t cancel_type, CompletionToken&& completion_token)
289
+ {
290
+ return cancel_after_timer<decay_t<CompletionToken>,
291
+ Clock, WaitTraits, Executor>(
292
+ static_cast<CompletionToken&&>(completion_token),
293
+ timer, timeout, cancel_type);
294
+ }
295
+
296
+ } // namespace asio
297
+ } // namespace boost
298
+
299
+ #include <boost/asio/detail/pop_options.hpp>
300
+
301
+ #include <boost/asio/impl/cancel_after.hpp>
302
+
303
+ #endif // BOOST_ASIO_CANCEL_AFTER_HPP
@@ -0,0 +1,296 @@
1
+ //
2
+ // cancel_at.hpp
3
+ // ~~~~~~~~~~~~~
4
+ //
5
+ // Copyright (c) 2003-2024 Christopher M. Kohlhoff (chris at kohlhoff dot com)
6
+ //
7
+ // Distributed under the Boost Software License, Version 1.0. (See accompanying
8
+ // file LICENSE_1_0.txt or copy at http://www.boost.org/LICENSE_1_0.txt)
9
+ //
10
+
11
+ #ifndef BOOST_ASIO_CANCEL_AT_HPP
12
+ #define BOOST_ASIO_CANCEL_AT_HPP
13
+
14
+ #if defined(_MSC_VER) && (_MSC_VER >= 1200)
15
+ # pragma once
16
+ #endif // defined(_MSC_VER) && (_MSC_VER >= 1200)
17
+
18
+ #include <boost/asio/detail/config.hpp>
19
+ #include <boost/asio/basic_waitable_timer.hpp>
20
+ #include <boost/asio/cancellation_type.hpp>
21
+ #include <boost/asio/detail/chrono.hpp>
22
+ #include <boost/asio/detail/type_traits.hpp>
23
+ #include <boost/asio/wait_traits.hpp>
24
+
25
+ #include <boost/asio/detail/push_options.hpp>
26
+
27
+ namespace boost {
28
+ namespace asio {
29
+
30
+ /// A @ref completion_token adapter that cancels an operation at a given time.
31
+ /**
32
+ * The cancel_at_t class is used to indicate that an asynchronous operation
33
+ * should be cancelled if not complete at the specified absolute time.
34
+ */
35
+ template <typename CompletionToken, typename Clock,
36
+ typename WaitTraits = boost::asio::wait_traits<Clock>>
37
+ class cancel_at_t
38
+ {
39
+ public:
40
+ /// Constructor.
41
+ template <typename T>
42
+ cancel_at_t(T&& completion_token, const typename Clock::time_point& expiry,
43
+ cancellation_type_t cancel_type = cancellation_type::terminal)
44
+ : token_(static_cast<T&&>(completion_token)),
45
+ expiry_(expiry),
46
+ cancel_type_(cancel_type)
47
+ {
48
+ }
49
+
50
+ //private:
51
+ CompletionToken token_;
52
+ typename Clock::time_point expiry_;
53
+ cancellation_type_t cancel_type_;
54
+ };
55
+
56
+ /// A @ref completion_token adapter that cancels an operation at a given time.
57
+ /**
58
+ * The cancel_at_timer class is used to indicate that an asynchronous operation
59
+ * should be cancelled if not complete at the specified absolute time.
60
+ */
61
+ template <typename CompletionToken, typename Clock,
62
+ typename WaitTraits = boost::asio::wait_traits<Clock>,
63
+ typename Executor = any_io_executor>
64
+ class cancel_at_timer
65
+ {
66
+ public:
67
+ /// Constructor.
68
+ template <typename T>
69
+ cancel_at_timer(T&& completion_token,
70
+ basic_waitable_timer<Clock, WaitTraits, Executor>& timer,
71
+ const typename Clock::time_point& expiry,
72
+ cancellation_type_t cancel_type = cancellation_type::terminal)
73
+ : token_(static_cast<T&&>(completion_token)),
74
+ timer_(timer),
75
+ expiry_(expiry),
76
+ cancel_type_(cancel_type)
77
+ {
78
+ }
79
+
80
+ //private:
81
+ CompletionToken token_;
82
+ basic_waitable_timer<Clock, WaitTraits, Executor>& timer_;
83
+ typename Clock::time_point expiry_;
84
+ cancellation_type_t cancel_type_;
85
+ };
86
+
87
+ /// A function object type that adapts a @ref completion_token to cancel an
88
+ /// operation at a given time.
89
+ /**
90
+ * May also be used directly as a completion token, in which case it adapts the
91
+ * asynchronous operation's default completion token (or boost::asio::deferred
92
+ * if no default is available).
93
+ */
94
+ template <typename Clock, typename WaitTraits = boost::asio::wait_traits<Clock>>
95
+ class partial_cancel_at
96
+ {
97
+ public:
98
+ /// Constructor that specifies the expiry and cancellation type.
99
+ explicit partial_cancel_at(const typename Clock::time_point& expiry,
100
+ cancellation_type_t cancel_type = cancellation_type::terminal)
101
+ : expiry_(expiry),
102
+ cancel_type_(cancel_type)
103
+ {
104
+ }
105
+
106
+ /// Adapt a @ref completion_token to specify that the completion handler
107
+ /// arguments should be combined into a single tuple argument.
108
+ template <typename CompletionToken>
109
+ BOOST_ASIO_NODISCARD inline
110
+ constexpr cancel_at_t<decay_t<CompletionToken>, Clock, WaitTraits>
111
+ operator()(CompletionToken&& completion_token) const
112
+ {
113
+ return cancel_at_t<decay_t<CompletionToken>, Clock, WaitTraits>(
114
+ static_cast<CompletionToken&&>(completion_token),
115
+ expiry_, cancel_type_);
116
+ }
117
+
118
+ //private:
119
+ typename Clock::time_point expiry_;
120
+ cancellation_type_t cancel_type_;
121
+ };
122
+
123
+ /// A function object type that adapts a @ref completion_token to cancel an
124
+ /// operation at a given time.
125
+ /**
126
+ * May also be used directly as a completion token, in which case it adapts the
127
+ * asynchronous operation's default completion token (or boost::asio::deferred
128
+ * if no default is available).
129
+ */
130
+ template <typename Clock, typename WaitTraits = boost::asio::wait_traits<Clock>,
131
+ typename Executor = any_io_executor>
132
+ class partial_cancel_at_timer
133
+ {
134
+ public:
135
+ /// Constructor that specifies the expiry and cancellation type.
136
+ explicit partial_cancel_at_timer(
137
+ basic_waitable_timer<Clock, WaitTraits, Executor>& timer,
138
+ const typename Clock::time_point& expiry,
139
+ cancellation_type_t cancel_type = cancellation_type::terminal)
140
+ : timer_(timer),
141
+ expiry_(expiry),
142
+ cancel_type_(cancel_type)
143
+ {
144
+ }
145
+
146
+ /// Adapt a @ref completion_token to specify that the completion handler
147
+ /// arguments should be combined into a single tuple argument.
148
+ template <typename CompletionToken>
149
+ BOOST_ASIO_NODISCARD inline
150
+ cancel_at_timer<decay_t<CompletionToken>, Clock, WaitTraits, Executor>
151
+ operator()(CompletionToken&& completion_token) const
152
+ {
153
+ return cancel_at_timer<decay_t<CompletionToken>,
154
+ Clock, WaitTraits, Executor>(
155
+ static_cast<CompletionToken&&>(completion_token),
156
+ timer_, expiry_, cancel_type_);
157
+ }
158
+
159
+ //private:
160
+ basic_waitable_timer<Clock, WaitTraits, Executor>& timer_;
161
+ typename Clock::time_point expiry_;
162
+ cancellation_type_t cancel_type_;
163
+ };
164
+
165
+ /// Create a partial completion token adapter that cancels an operation if not
166
+ /// complete by the specified absolute time.
167
+ /**
168
+ * @par Thread Safety
169
+ * When an asynchronous operation is used with cancel_at, a timer async_wait
170
+ * operation is performed in parallel to the main operation. If this parallel
171
+ * async_wait completes first, a cancellation request is emitted to cancel the
172
+ * main operation. Consequently, the application must ensure that the
173
+ * asynchronous operation is performed within an implicit or explicit strand.
174
+ */
175
+ template <typename Clock, typename Duration>
176
+ BOOST_ASIO_NODISCARD inline partial_cancel_at<Clock>
177
+ cancel_at(const chrono::time_point<Clock, Duration>& expiry,
178
+ cancellation_type_t cancel_type = cancellation_type::terminal)
179
+ {
180
+ return partial_cancel_at<Clock>(expiry, cancel_type);
181
+ }
182
+
183
+ /// Create a partial completion token adapter that cancels an operation if not
184
+ /// complete by the specified absolute time.
185
+ /**
186
+ * @par Thread Safety
187
+ * When an asynchronous operation is used with cancel_at, a timer async_wait
188
+ * operation is performed in parallel to the main operation. If this parallel
189
+ * async_wait completes first, a cancellation request is emitted to cancel the
190
+ * main operation. Consequently, the application must ensure that the
191
+ * asynchronous operation is performed within an implicit or explicit strand.
192
+ */
193
+ template <typename Clock, typename WaitTraits,
194
+ typename Executor, typename Duration>
195
+ BOOST_ASIO_NODISCARD inline partial_cancel_at_timer<Clock, WaitTraits, Executor>
196
+ cancel_at(basic_waitable_timer<Clock, WaitTraits, Executor>& timer,
197
+ const chrono::time_point<Clock, Duration>& expiry,
198
+ cancellation_type_t cancel_type = cancellation_type::terminal)
199
+ {
200
+ return partial_cancel_at_timer<Clock, WaitTraits, Executor>(
201
+ timer, expiry, cancel_type);
202
+ }
203
+
204
+ /// Adapt a @ref completion_token to cancel an operation if not complete by the
205
+ /// specified absolute time.
206
+ /**
207
+ * @par Thread Safety
208
+ * When an asynchronous operation is used with cancel_at, a timer async_wait
209
+ * operation is performed in parallel to the main operation. If this parallel
210
+ * async_wait completes first, a cancellation request is emitted to cancel the
211
+ * main operation. Consequently, the application must ensure that the
212
+ * asynchronous operation is performed within an implicit or explicit strand.
213
+ */
214
+ template <typename CompletionToken, typename Clock, typename Duration>
215
+ BOOST_ASIO_NODISCARD inline cancel_at_t<decay_t<CompletionToken>, Clock>
216
+ cancel_at(const chrono::time_point<Clock, Duration>& expiry,
217
+ CompletionToken&& completion_token)
218
+ {
219
+ return cancel_at_t<decay_t<CompletionToken>, Clock>(
220
+ static_cast<CompletionToken&&>(completion_token),
221
+ expiry, cancellation_type::terminal);
222
+ }
223
+
224
+ /// Adapt a @ref completion_token to cancel an operation if not complete by the
225
+ /// specified absolute time.
226
+ /**
227
+ * @par Thread Safety
228
+ * When an asynchronous operation is used with cancel_at, a timer async_wait
229
+ * operation is performed in parallel to the main operation. If this parallel
230
+ * async_wait completes first, a cancellation request is emitted to cancel the
231
+ * main operation. Consequently, the application must ensure that the
232
+ * asynchronous operation is performed within an implicit or explicit strand.
233
+ */
234
+ template <typename CompletionToken, typename Clock, typename Duration>
235
+ BOOST_ASIO_NODISCARD inline cancel_at_t<decay_t<CompletionToken>, Clock>
236
+ cancel_at(const chrono::time_point<Clock, Duration>& expiry,
237
+ cancellation_type_t cancel_type, CompletionToken&& completion_token)
238
+ {
239
+ return cancel_at_t<decay_t<CompletionToken>, Clock>(
240
+ static_cast<CompletionToken&&>(completion_token), expiry, cancel_type);
241
+ }
242
+
243
+ /// Adapt a @ref completion_token to cancel an operation if not complete by the
244
+ /// specified absolute time.
245
+ /**
246
+ * @par Thread Safety
247
+ * When an asynchronous operation is used with cancel_at, a timer async_wait
248
+ * operation is performed in parallel to the main operation. If this parallel
249
+ * async_wait completes first, a cancellation request is emitted to cancel the
250
+ * main operation. Consequently, the application must ensure that the
251
+ * asynchronous operation is performed within an implicit or explicit strand.
252
+ */
253
+ template <typename CompletionToken, typename Clock,
254
+ typename WaitTraits, typename Executor, typename Duration>
255
+ BOOST_ASIO_NODISCARD inline
256
+ cancel_at_timer<decay_t<CompletionToken>, Clock, WaitTraits, Executor>
257
+ cancel_at(basic_waitable_timer<Clock, WaitTraits, Executor>& timer,
258
+ const chrono::time_point<Clock, Duration>& expiry,
259
+ CompletionToken&& completion_token)
260
+ {
261
+ return cancel_at_timer<decay_t<CompletionToken>, Clock, WaitTraits, Executor>(
262
+ static_cast<CompletionToken&&>(completion_token),
263
+ timer, expiry, cancellation_type::terminal);
264
+ }
265
+
266
+ /// Adapt a @ref completion_token to cancel an operation if not complete by the
267
+ /// specified absolute time.
268
+ /**
269
+ * @par Thread Safety
270
+ * When an asynchronous operation is used with cancel_at, a timer async_wait
271
+ * operation is performed in parallel to the main operation. If this parallel
272
+ * async_wait completes first, a cancellation request is emitted to cancel the
273
+ * main operation. Consequently, the application must ensure that the
274
+ * asynchronous operation is performed within an implicit or explicit strand.
275
+ */
276
+ template <typename CompletionToken, typename Clock,
277
+ typename WaitTraits, typename Executor, typename Duration>
278
+ BOOST_ASIO_NODISCARD inline
279
+ cancel_at_timer<decay_t<CompletionToken>, Clock, WaitTraits, Executor>
280
+ cancel_at(basic_waitable_timer<Clock, WaitTraits, Executor>& timer,
281
+ const chrono::time_point<Clock, Duration>& expiry,
282
+ cancellation_type_t cancel_type, CompletionToken&& completion_token)
283
+ {
284
+ return cancel_at_timer<decay_t<CompletionToken>, Clock, WaitTraits, Executor>(
285
+ static_cast<CompletionToken&&>(completion_token),
286
+ timer, expiry, cancel_type);
287
+ }
288
+
289
+ } // namespace asio
290
+ } // namespace boost
291
+
292
+ #include <boost/asio/detail/pop_options.hpp>
293
+
294
+ #include <boost/asio/impl/cancel_at.hpp>
295
+
296
+ #endif // BOOST_ASIO_CANCEL_AT_HPP