passenger 6.0.11 → 6.0.12

Sign up to get free protection for your applications and to get access to all the features.
Files changed (280) hide show
  1. checksums.yaml +4 -4
  2. data/CHANGELOG +24 -1
  3. data/CONTRIBUTORS +3 -0
  4. data/src/agent/Core/Config.h +1 -1
  5. data/src/agent/Core/Controller/CheckoutSession.cpp +24 -13
  6. data/src/agent/Core/Controller/Config.h +1 -1
  7. data/src/agent/Core/Controller/InternalUtils.cpp +32 -6
  8. data/src/agent/Core/Controller.h +4 -1
  9. data/src/agent/Watchdog/Config.h +1 -1
  10. data/src/cxx_supportlib/Constants.h +1 -1
  11. data/src/cxx_supportlib/IOTools/IOUtils.cpp +4 -4
  12. data/src/cxx_supportlib/vendor-modified/boost/align/aligned_alloc.hpp +47 -0
  13. data/src/cxx_supportlib/vendor-modified/boost/align/detail/aligned_alloc_posix.hpp +41 -0
  14. data/src/cxx_supportlib/vendor-modified/boost/align/detail/is_alignment.hpp +28 -0
  15. data/src/cxx_supportlib/vendor-modified/boost/asio/associated_allocator.hpp +53 -1
  16. data/src/cxx_supportlib/vendor-modified/boost/asio/associated_cancellation_slot.hpp +179 -0
  17. data/src/cxx_supportlib/vendor-modified/boost/asio/associated_executor.hpp +57 -1
  18. data/src/cxx_supportlib/vendor-modified/boost/asio/associator.hpp +37 -0
  19. data/src/cxx_supportlib/vendor-modified/boost/asio/async_result.hpp +789 -106
  20. data/src/cxx_supportlib/vendor-modified/boost/asio/awaitable.hpp +1 -1
  21. data/src/cxx_supportlib/vendor-modified/boost/asio/basic_datagram_socket.hpp +80 -0
  22. data/src/cxx_supportlib/vendor-modified/boost/asio/basic_deadline_timer.hpp +10 -0
  23. data/src/cxx_supportlib/vendor-modified/boost/asio/basic_raw_socket.hpp +80 -0
  24. data/src/cxx_supportlib/vendor-modified/boost/asio/basic_seq_packet_socket.hpp +30 -0
  25. data/src/cxx_supportlib/vendor-modified/boost/asio/basic_socket.hpp +20 -0
  26. data/src/cxx_supportlib/vendor-modified/boost/asio/basic_socket_acceptor.hpp +90 -0
  27. data/src/cxx_supportlib/vendor-modified/boost/asio/basic_stream_socket.hpp +60 -0
  28. data/src/cxx_supportlib/vendor-modified/boost/asio/basic_waitable_timer.hpp +10 -0
  29. data/src/cxx_supportlib/vendor-modified/boost/asio/bind_cancellation_slot.hpp +723 -0
  30. data/src/cxx_supportlib/vendor-modified/boost/asio/bind_executor.hpp +191 -12
  31. data/src/cxx_supportlib/vendor-modified/boost/asio/cancellation_signal.hpp +361 -0
  32. data/src/cxx_supportlib/vendor-modified/boost/asio/cancellation_state.hpp +237 -0
  33. data/src/cxx_supportlib/vendor-modified/boost/asio/cancellation_type.hpp +176 -0
  34. data/src/cxx_supportlib/vendor-modified/boost/asio/co_spawn.hpp +30 -2
  35. data/src/cxx_supportlib/vendor-modified/boost/asio/connect.hpp +60 -0
  36. data/src/cxx_supportlib/vendor-modified/boost/asio/detail/base_from_cancellation_state.hpp +165 -0
  37. data/src/cxx_supportlib/vendor-modified/boost/asio/detail/bind_handler.hpp +209 -76
  38. data/src/cxx_supportlib/vendor-modified/boost/asio/detail/config.hpp +149 -60
  39. data/src/cxx_supportlib/vendor-modified/boost/asio/detail/deadline_timer_service.hpp +40 -0
  40. data/src/cxx_supportlib/vendor-modified/boost/asio/detail/dev_poll_reactor.hpp +8 -4
  41. data/src/cxx_supportlib/vendor-modified/boost/asio/detail/epoll_reactor.hpp +14 -4
  42. data/src/cxx_supportlib/vendor-modified/boost/asio/detail/functional.hpp +6 -0
  43. data/src/cxx_supportlib/vendor-modified/boost/asio/detail/handler_alloc_helpers.hpp +14 -10
  44. data/src/cxx_supportlib/vendor-modified/boost/asio/detail/handler_type_requirements.hpp +21 -18
  45. data/src/cxx_supportlib/vendor-modified/boost/asio/detail/handler_work.hpp +30 -19
  46. data/src/cxx_supportlib/vendor-modified/boost/asio/detail/impl/dev_poll_reactor.hpp +8 -0
  47. data/src/cxx_supportlib/vendor-modified/boost/asio/detail/impl/dev_poll_reactor.ipp +14 -0
  48. data/src/cxx_supportlib/vendor-modified/boost/asio/detail/impl/epoll_reactor.hpp +20 -0
  49. data/src/cxx_supportlib/vendor-modified/boost/asio/detail/impl/epoll_reactor.ipp +30 -0
  50. data/src/cxx_supportlib/vendor-modified/boost/asio/detail/impl/kqueue_reactor.hpp +20 -0
  51. data/src/cxx_supportlib/vendor-modified/boost/asio/detail/impl/kqueue_reactor.ipp +29 -0
  52. data/src/cxx_supportlib/vendor-modified/boost/asio/detail/impl/select_reactor.hpp +24 -0
  53. data/src/cxx_supportlib/vendor-modified/boost/asio/detail/impl/select_reactor.ipp +19 -0
  54. data/src/cxx_supportlib/vendor-modified/boost/asio/detail/impl/strand_executor_service.hpp +3 -1
  55. data/src/cxx_supportlib/vendor-modified/boost/asio/detail/impl/timer_queue_ptime.ipp +6 -0
  56. data/src/cxx_supportlib/vendor-modified/boost/asio/detail/kqueue_reactor.hpp +15 -5
  57. data/src/cxx_supportlib/vendor-modified/boost/asio/detail/memory.hpp +60 -0
  58. data/src/cxx_supportlib/vendor-modified/boost/asio/detail/pop_options.hpp +8 -0
  59. data/src/cxx_supportlib/vendor-modified/boost/asio/detail/push_options.hpp +27 -0
  60. data/src/cxx_supportlib/vendor-modified/boost/asio/detail/reactive_descriptor_service.hpp +93 -0
  61. data/src/cxx_supportlib/vendor-modified/boost/asio/detail/reactive_socket_service.hpp +77 -0
  62. data/src/cxx_supportlib/vendor-modified/boost/asio/detail/reactive_socket_service_base.hpp +111 -0
  63. data/src/cxx_supportlib/vendor-modified/boost/asio/detail/reactor_op.hpp +4 -0
  64. data/src/cxx_supportlib/vendor-modified/boost/asio/detail/reactor_op_queue.hpp +44 -0
  65. data/src/cxx_supportlib/vendor-modified/boost/asio/detail/recycling_allocator.hpp +2 -1
  66. data/src/cxx_supportlib/vendor-modified/boost/asio/detail/resolve_endpoint_op.hpp +2 -2
  67. data/src/cxx_supportlib/vendor-modified/boost/asio/detail/select_reactor.hpp +14 -4
  68. data/src/cxx_supportlib/vendor-modified/boost/asio/detail/thread_info_base.hpp +90 -24
  69. data/src/cxx_supportlib/vendor-modified/boost/asio/detail/timer_queue.hpp +30 -1
  70. data/src/cxx_supportlib/vendor-modified/boost/asio/detail/timer_queue_ptime.hpp +4 -0
  71. data/src/cxx_supportlib/vendor-modified/boost/asio/detail/wait_op.hpp +5 -1
  72. data/src/cxx_supportlib/vendor-modified/boost/asio/detail/work_dispatcher.hpp +5 -2
  73. data/src/cxx_supportlib/vendor-modified/boost/asio/execution/any_executor.hpp +12 -12
  74. data/src/cxx_supportlib/vendor-modified/boost/asio/execution/bulk_execute.hpp +10 -8
  75. data/src/cxx_supportlib/vendor-modified/boost/asio/execution/connect.hpp +8 -8
  76. data/src/cxx_supportlib/vendor-modified/boost/asio/execution/execute.hpp +7 -7
  77. data/src/cxx_supportlib/vendor-modified/boost/asio/execution/schedule.hpp +7 -7
  78. data/src/cxx_supportlib/vendor-modified/boost/asio/execution/set_done.hpp +7 -7
  79. data/src/cxx_supportlib/vendor-modified/boost/asio/execution/set_error.hpp +7 -7
  80. data/src/cxx_supportlib/vendor-modified/boost/asio/execution/set_value.hpp +13 -13
  81. data/src/cxx_supportlib/vendor-modified/boost/asio/execution/start.hpp +7 -7
  82. data/src/cxx_supportlib/vendor-modified/boost/asio/execution/submit.hpp +8 -8
  83. data/src/cxx_supportlib/vendor-modified/boost/asio/experimental/append.hpp +73 -0
  84. data/src/cxx_supportlib/vendor-modified/boost/asio/experimental/as_tuple.hpp +133 -0
  85. data/src/cxx_supportlib/vendor-modified/boost/asio/experimental/awaitable_operators.hpp +538 -0
  86. data/src/cxx_supportlib/vendor-modified/boost/asio/experimental/cancellation_condition.hpp +157 -0
  87. data/src/cxx_supportlib/vendor-modified/boost/asio/experimental/coro.hpp +1057 -0
  88. data/src/cxx_supportlib/vendor-modified/boost/asio/experimental/deferred.hpp +607 -0
  89. data/src/cxx_supportlib/vendor-modified/boost/asio/experimental/detail/completion_handler_erasure.hpp +160 -0
  90. data/src/cxx_supportlib/vendor-modified/boost/asio/experimental/detail/coro_promise_allocator.hpp +120 -0
  91. data/src/cxx_supportlib/vendor-modified/boost/asio/experimental/detail/coro_traits.hpp +185 -0
  92. data/src/cxx_supportlib/vendor-modified/boost/asio/experimental/detail/partial_promise.hpp +181 -0
  93. data/src/cxx_supportlib/vendor-modified/boost/asio/experimental/impl/append.hpp +219 -0
  94. data/src/cxx_supportlib/vendor-modified/boost/asio/experimental/impl/as_single.hpp +14 -28
  95. data/src/cxx_supportlib/vendor-modified/boost/asio/experimental/impl/as_tuple.hpp +248 -0
  96. data/src/cxx_supportlib/vendor-modified/boost/asio/experimental/impl/deferred.hpp +106 -0
  97. data/src/cxx_supportlib/vendor-modified/boost/asio/experimental/impl/parallel_group.hpp +434 -0
  98. data/src/cxx_supportlib/vendor-modified/boost/asio/experimental/impl/prepend.hpp +219 -0
  99. data/src/cxx_supportlib/vendor-modified/boost/asio/experimental/impl/promise.hpp +100 -0
  100. data/src/cxx_supportlib/vendor-modified/boost/asio/experimental/parallel_group.hpp +217 -0
  101. data/src/cxx_supportlib/vendor-modified/boost/asio/experimental/prepend.hpp +73 -0
  102. data/src/cxx_supportlib/vendor-modified/boost/asio/experimental/promise.hpp +608 -0
  103. data/src/cxx_supportlib/vendor-modified/boost/asio/experimental/use_coro.hpp +284 -0
  104. data/src/cxx_supportlib/vendor-modified/boost/asio/impl/awaitable.hpp +344 -20
  105. data/src/cxx_supportlib/vendor-modified/boost/asio/impl/buffered_read_stream.hpp +23 -54
  106. data/src/cxx_supportlib/vendor-modified/boost/asio/impl/buffered_write_stream.hpp +23 -54
  107. data/src/cxx_supportlib/vendor-modified/boost/asio/impl/co_spawn.hpp +66 -18
  108. data/src/cxx_supportlib/vendor-modified/boost/asio/impl/compose.hpp +55 -5
  109. data/src/cxx_supportlib/vendor-modified/boost/asio/impl/connect.hpp +68 -80
  110. data/src/cxx_supportlib/vendor-modified/boost/asio/impl/defer.hpp +8 -4
  111. data/src/cxx_supportlib/vendor-modified/boost/asio/impl/dispatch.hpp +8 -4
  112. data/src/cxx_supportlib/vendor-modified/boost/asio/impl/handler_alloc_hook.ipp +3 -2
  113. data/src/cxx_supportlib/vendor-modified/boost/asio/impl/post.hpp +8 -4
  114. data/src/cxx_supportlib/vendor-modified/boost/asio/impl/read.hpp +98 -113
  115. data/src/cxx_supportlib/vendor-modified/boost/asio/impl/read_at.hpp +71 -82
  116. data/src/cxx_supportlib/vendor-modified/boost/asio/impl/read_until.hpp +210 -266
  117. data/src/cxx_supportlib/vendor-modified/boost/asio/impl/redirect_error.hpp +248 -30
  118. data/src/cxx_supportlib/vendor-modified/boost/asio/impl/spawn.hpp +11 -21
  119. data/src/cxx_supportlib/vendor-modified/boost/asio/impl/use_awaitable.hpp +15 -3
  120. data/src/cxx_supportlib/vendor-modified/boost/asio/impl/write.hpp +71 -87
  121. data/src/cxx_supportlib/vendor-modified/boost/asio/impl/write_at.hpp +46 -68
  122. data/src/cxx_supportlib/vendor-modified/boost/asio/io_context.hpp +4 -4
  123. data/src/cxx_supportlib/vendor-modified/boost/asio/local/detail/impl/endpoint.ipp +2 -7
  124. data/src/cxx_supportlib/vendor-modified/boost/asio/posix/basic_descriptor.hpp +10 -0
  125. data/src/cxx_supportlib/vendor-modified/boost/asio/posix/basic_stream_descriptor.hpp +23 -3
  126. data/src/cxx_supportlib/vendor-modified/boost/asio/prefer.hpp +21 -21
  127. data/src/cxx_supportlib/vendor-modified/boost/asio/query.hpp +9 -9
  128. data/src/cxx_supportlib/vendor-modified/boost/asio/read.hpp +88 -0
  129. data/src/cxx_supportlib/vendor-modified/boost/asio/read_at.hpp +44 -0
  130. data/src/cxx_supportlib/vendor-modified/boost/asio/read_until.hpp +132 -0
  131. data/src/cxx_supportlib/vendor-modified/boost/asio/require.hpp +21 -21
  132. data/src/cxx_supportlib/vendor-modified/boost/asio/require_concept.hpp +9 -9
  133. data/src/cxx_supportlib/vendor-modified/boost/asio/ssl/detail/buffered_handshake_op.hpp +1 -1
  134. data/src/cxx_supportlib/vendor-modified/boost/asio/ssl/detail/engine.hpp +5 -0
  135. data/src/cxx_supportlib/vendor-modified/boost/asio/ssl/detail/handshake_op.hpp +1 -1
  136. data/src/cxx_supportlib/vendor-modified/boost/asio/ssl/detail/impl/engine.ipp +14 -0
  137. data/src/cxx_supportlib/vendor-modified/boost/asio/ssl/detail/io.hpp +36 -27
  138. data/src/cxx_supportlib/vendor-modified/boost/asio/ssl/detail/read_op.hpp +1 -1
  139. data/src/cxx_supportlib/vendor-modified/boost/asio/ssl/detail/shutdown_op.hpp +2 -2
  140. data/src/cxx_supportlib/vendor-modified/boost/asio/ssl/detail/stream_core.hpp +37 -0
  141. data/src/cxx_supportlib/vendor-modified/boost/asio/ssl/detail/write_op.hpp +1 -1
  142. data/src/cxx_supportlib/vendor-modified/boost/asio/ssl/impl/context.ipp +14 -7
  143. data/src/cxx_supportlib/vendor-modified/boost/asio/ssl/stream.hpp +73 -1
  144. data/src/cxx_supportlib/vendor-modified/boost/asio/system_executor.hpp +4 -4
  145. data/src/cxx_supportlib/vendor-modified/boost/asio/this_coro.hpp +235 -0
  146. data/src/cxx_supportlib/vendor-modified/boost/asio/thread_pool.hpp +4 -4
  147. data/src/cxx_supportlib/vendor-modified/boost/asio/use_awaitable.hpp +7 -10
  148. data/src/cxx_supportlib/vendor-modified/boost/asio/version.hpp +1 -1
  149. data/src/cxx_supportlib/vendor-modified/boost/asio/windows/basic_random_access_handle.hpp +20 -0
  150. data/src/cxx_supportlib/vendor-modified/boost/asio/windows/basic_stream_handle.hpp +20 -0
  151. data/src/cxx_supportlib/vendor-modified/boost/asio/write.hpp +88 -0
  152. data/src/cxx_supportlib/vendor-modified/boost/asio/write_at.hpp +44 -0
  153. data/src/cxx_supportlib/vendor-modified/boost/asio.hpp +6 -0
  154. data/src/cxx_supportlib/vendor-modified/boost/atomic/atomic_ref.hpp +14 -1
  155. data/src/cxx_supportlib/vendor-modified/boost/atomic/detail/config.hpp +17 -13
  156. data/src/cxx_supportlib/vendor-modified/boost/atomic/ipc_atomic_ref.hpp +14 -1
  157. data/src/cxx_supportlib/vendor-modified/boost/config/assert_cxx03.hpp +2 -5
  158. data/src/cxx_supportlib/vendor-modified/boost/config/assert_cxx11.hpp +2 -5
  159. data/src/cxx_supportlib/vendor-modified/boost/config/assert_cxx14.hpp +2 -2
  160. data/src/cxx_supportlib/vendor-modified/boost/config/assert_cxx17.hpp +2 -2
  161. data/src/cxx_supportlib/vendor-modified/boost/config/assert_cxx20.hpp +56 -0
  162. data/src/cxx_supportlib/vendor-modified/boost/config/auto_link.hpp +1 -5
  163. data/src/cxx_supportlib/vendor-modified/boost/config/compiler/common_edg.hpp +31 -11
  164. data/src/cxx_supportlib/vendor-modified/boost/config/detail/cxx_composite.hpp +20 -4
  165. data/src/cxx_supportlib/vendor-modified/boost/config/detail/select_platform_config.hpp +5 -0
  166. data/src/cxx_supportlib/vendor-modified/boost/config/detail/suffix.hpp +81 -0
  167. data/src/cxx_supportlib/vendor-modified/boost/config/platform/bsd.hpp +5 -8
  168. data/src/cxx_supportlib/vendor-modified/boost/config/platform/wasm.hpp +17 -0
  169. data/src/cxx_supportlib/vendor-modified/boost/config/stdlib/dinkumware.hpp +26 -0
  170. data/src/cxx_supportlib/vendor-modified/boost/config/stdlib/libcpp.hpp +49 -0
  171. data/src/cxx_supportlib/vendor-modified/boost/config/stdlib/libstdcpp3.hpp +46 -4
  172. data/src/cxx_supportlib/vendor-modified/boost/container/adaptive_pool.hpp +2 -2
  173. data/src/cxx_supportlib/vendor-modified/boost/container/allocator.hpp +1 -1
  174. data/src/cxx_supportlib/vendor-modified/boost/container/detail/adaptive_node_pool.hpp +2 -2
  175. data/src/cxx_supportlib/vendor-modified/boost/container/detail/node_pool.hpp +2 -2
  176. data/src/cxx_supportlib/vendor-modified/boost/container/detail/std_fwd.hpp +3 -0
  177. data/src/cxx_supportlib/vendor-modified/boost/container/devector.hpp +2 -2
  178. data/src/cxx_supportlib/vendor-modified/boost/container/new_allocator.hpp +1 -1
  179. data/src/cxx_supportlib/vendor-modified/boost/container/node_allocator.hpp +1 -1
  180. data/src/cxx_supportlib/vendor-modified/boost/container/pmr/polymorphic_allocator.hpp +6 -6
  181. data/src/cxx_supportlib/vendor-modified/boost/container/static_vector.hpp +4 -4
  182. data/src/cxx_supportlib/vendor-modified/boost/container/throw_exception.hpp +45 -38
  183. data/src/cxx_supportlib/vendor-modified/boost/container/vector.hpp +24 -0
  184. data/src/cxx_supportlib/vendor-modified/boost/core/ignore_unused.hpp +32 -2
  185. data/src/cxx_supportlib/vendor-modified/boost/core/uncaught_exceptions.hpp +7 -7
  186. data/src/cxx_supportlib/vendor-modified/boost/date_time/compiler_config.hpp +0 -24
  187. data/src/cxx_supportlib/vendor-modified/boost/date_time/posix_time/time_parsers.hpp +4 -0
  188. data/src/cxx_supportlib/vendor-modified/boost/intrusive/any_hook.hpp +4 -4
  189. data/src/cxx_supportlib/vendor-modified/boost/intrusive/avl_set.hpp +83 -83
  190. data/src/cxx_supportlib/vendor-modified/boost/intrusive/avltree.hpp +43 -43
  191. data/src/cxx_supportlib/vendor-modified/boost/intrusive/avltree_algorithms.hpp +31 -31
  192. data/src/cxx_supportlib/vendor-modified/boost/intrusive/bs_set.hpp +85 -85
  193. data/src/cxx_supportlib/vendor-modified/boost/intrusive/bstree.hpp +68 -68
  194. data/src/cxx_supportlib/vendor-modified/boost/intrusive/bstree_algorithms.hpp +72 -62
  195. data/src/cxx_supportlib/vendor-modified/boost/intrusive/circular_list_algorithms.hpp +19 -20
  196. data/src/cxx_supportlib/vendor-modified/boost/intrusive/circular_slist_algorithms.hpp +19 -19
  197. data/src/cxx_supportlib/vendor-modified/boost/intrusive/derivation_value_traits.hpp +4 -4
  198. data/src/cxx_supportlib/vendor-modified/boost/intrusive/detail/any_node_and_algorithms.hpp +2 -2
  199. data/src/cxx_supportlib/vendor-modified/boost/intrusive/detail/bstree_algorithms_base.hpp +3 -3
  200. data/src/cxx_supportlib/vendor-modified/boost/intrusive/detail/common_slist_algorithms.hpp +5 -5
  201. data/src/cxx_supportlib/vendor-modified/boost/intrusive/detail/config_begin.hpp +1 -0
  202. data/src/cxx_supportlib/vendor-modified/boost/intrusive/detail/generic_hook.hpp +8 -8
  203. data/src/cxx_supportlib/vendor-modified/boost/intrusive/detail/hash_combine.hpp +2 -4
  204. data/src/cxx_supportlib/vendor-modified/boost/intrusive/detail/hashtable_node.hpp +1 -1
  205. data/src/cxx_supportlib/vendor-modified/boost/intrusive/detail/math.hpp +2 -50
  206. data/src/cxx_supportlib/vendor-modified/boost/intrusive/detail/node_cloner_disposer.hpp +1 -1
  207. data/src/cxx_supportlib/vendor-modified/boost/intrusive/hashtable.hpp +71 -70
  208. data/src/cxx_supportlib/vendor-modified/boost/intrusive/linear_slist_algorithms.hpp +15 -14
  209. data/src/cxx_supportlib/vendor-modified/boost/intrusive/list.hpp +84 -82
  210. data/src/cxx_supportlib/vendor-modified/boost/intrusive/list_hook.hpp +10 -10
  211. data/src/cxx_supportlib/vendor-modified/boost/intrusive/member_value_traits.hpp +4 -4
  212. data/src/cxx_supportlib/vendor-modified/boost/intrusive/parent_from_member.hpp +2 -2
  213. data/src/cxx_supportlib/vendor-modified/boost/intrusive/pointer_plus_bits.hpp +4 -4
  214. data/src/cxx_supportlib/vendor-modified/boost/intrusive/pointer_traits.hpp +18 -18
  215. data/src/cxx_supportlib/vendor-modified/boost/intrusive/rbtree.hpp +43 -43
  216. data/src/cxx_supportlib/vendor-modified/boost/intrusive/rbtree_algorithms.hpp +26 -26
  217. data/src/cxx_supportlib/vendor-modified/boost/intrusive/set.hpp +85 -85
  218. data/src/cxx_supportlib/vendor-modified/boost/intrusive/set_hook.hpp +12 -12
  219. data/src/cxx_supportlib/vendor-modified/boost/intrusive/sg_set.hpp +93 -93
  220. data/src/cxx_supportlib/vendor-modified/boost/intrusive/sgtree.hpp +51 -51
  221. data/src/cxx_supportlib/vendor-modified/boost/intrusive/sgtree_algorithms.hpp +24 -24
  222. data/src/cxx_supportlib/vendor-modified/boost/intrusive/slist.hpp +104 -104
  223. data/src/cxx_supportlib/vendor-modified/boost/intrusive/slist_hook.hpp +8 -6
  224. data/src/cxx_supportlib/vendor-modified/boost/intrusive/splay_set.hpp +91 -91
  225. data/src/cxx_supportlib/vendor-modified/boost/intrusive/splaytree.hpp +46 -46
  226. data/src/cxx_supportlib/vendor-modified/boost/intrusive/splaytree_algorithms.hpp +31 -31
  227. data/src/cxx_supportlib/vendor-modified/boost/intrusive/treap.hpp +51 -51
  228. data/src/cxx_supportlib/vendor-modified/boost/intrusive/treap_algorithms.hpp +18 -18
  229. data/src/cxx_supportlib/vendor-modified/boost/intrusive/treap_set.hpp +97 -97
  230. data/src/cxx_supportlib/vendor-modified/boost/intrusive/trivial_value_traits.hpp +6 -4
  231. data/src/cxx_supportlib/vendor-modified/boost/intrusive/unordered_set.hpp +63 -63
  232. data/src/cxx_supportlib/vendor-modified/boost/intrusive/unordered_set_hook.hpp +15 -15
  233. data/src/cxx_supportlib/vendor-modified/boost/lexical_cast/detail/converter_numeric.hpp +4 -1
  234. data/src/cxx_supportlib/vendor-modified/boost/move/detail/config_begin.hpp +1 -0
  235. data/src/cxx_supportlib/vendor-modified/boost/move/detail/iterator_traits.hpp +1 -0
  236. data/src/cxx_supportlib/vendor-modified/boost/move/detail/nsec_clock.hpp +1 -1
  237. data/src/cxx_supportlib/vendor-modified/boost/operators.hpp +2 -0
  238. data/src/cxx_supportlib/vendor-modified/boost/regex/concepts.hpp +1 -1
  239. data/src/cxx_supportlib/vendor-modified/boost/regex/v4/basic_regex_parser.hpp +3 -0
  240. data/src/cxx_supportlib/vendor-modified/boost/regex/v4/unicode_iterator.hpp +112 -31
  241. data/src/cxx_supportlib/vendor-modified/boost/regex/v5/basic_regex_parser.hpp +3 -0
  242. data/src/cxx_supportlib/vendor-modified/boost/regex/v5/mem_block_cache.hpp +4 -8
  243. data/src/cxx_supportlib/vendor-modified/boost/regex/v5/unicode_iterator.hpp +0 -2
  244. data/src/cxx_supportlib/vendor-modified/boost/regex/v5/w32_regex_traits.hpp +6 -2
  245. data/src/cxx_supportlib/vendor-modified/boost/smart_ptr/detail/shared_count.hpp +1 -1
  246. data/src/cxx_supportlib/vendor-modified/boost/smart_ptr/detail/sp_counted_impl.hpp +22 -2
  247. data/src/cxx_supportlib/vendor-modified/boost/smart_ptr/shared_ptr.hpp +59 -1
  248. data/src/cxx_supportlib/vendor-modified/boost/system/detail/config.hpp +9 -11
  249. data/src/cxx_supportlib/vendor-modified/boost/system/detail/error_category.hpp +27 -21
  250. data/src/cxx_supportlib/vendor-modified/boost/system/detail/error_category_impl.hpp +34 -3
  251. data/src/cxx_supportlib/vendor-modified/boost/system/detail/error_code.hpp +378 -36
  252. data/src/cxx_supportlib/vendor-modified/boost/system/detail/error_condition.hpp +97 -21
  253. data/src/cxx_supportlib/vendor-modified/boost/system/detail/interop_category.hpp +107 -0
  254. data/src/cxx_supportlib/vendor-modified/boost/system/detail/is_same.hpp +33 -0
  255. data/src/cxx_supportlib/vendor-modified/boost/system/detail/snprintf.hpp +70 -0
  256. data/src/cxx_supportlib/vendor-modified/boost/system/detail/{to_std_category.hpp → std_category.hpp} +5 -55
  257. data/src/cxx_supportlib/vendor-modified/boost/system/detail/system_category_impl.hpp +2 -12
  258. data/src/cxx_supportlib/vendor-modified/boost/system/error_code.hpp +0 -33
  259. data/src/cxx_supportlib/vendor-modified/boost/utility/detail/result_of_variadic.hpp +190 -0
  260. data/src/cxx_supportlib/vendor-modified/boost/utility/result_of.hpp +20 -9
  261. data/src/cxx_supportlib/vendor-modified/boost/utility/string_view.hpp +3 -1
  262. data/src/cxx_supportlib/vendor-modified/boost/version.hpp +2 -2
  263. data/src/nginx_module/ConfigGeneral/AutoGeneratedDefinitions.c +8 -0
  264. data/src/nginx_module/ConfigGeneral/AutoGeneratedManifestDefaultsInitialization.c +6 -0
  265. data/src/nginx_module/ConfigGeneral/AutoGeneratedSetterFuncs.c +12 -0
  266. data/src/nginx_module/LocationConfig/AutoGeneratedCreateFunction.c +5 -0
  267. data/src/nginx_module/LocationConfig/AutoGeneratedHeaderSerialization.c +21 -0
  268. data/src/nginx_module/LocationConfig/AutoGeneratedManifestGeneration.c +13 -0
  269. data/src/nginx_module/LocationConfig/AutoGeneratedMergeFunction.c +3 -0
  270. data/src/nginx_module/LocationConfig/AutoGeneratedStruct.h +4 -0
  271. data/src/ruby_supportlib/phusion_passenger/admin_tools/instance_registry.rb +3 -2
  272. data/src/ruby_supportlib/phusion_passenger/loader_shared_helpers.rb +8 -1
  273. data/src/ruby_supportlib/phusion_passenger/nginx/config_options.rb +6 -0
  274. data/src/ruby_supportlib/phusion_passenger/packaging.rb +1 -0
  275. data/src/ruby_supportlib/phusion_passenger/platform_info/openssl.rb +1 -1
  276. data/src/ruby_supportlib/phusion_passenger/platform_info/operating_system.rb +8 -0
  277. data/src/ruby_supportlib/phusion_passenger/request_handler.rb +4 -1
  278. data/src/ruby_supportlib/phusion_passenger.rb +1 -1
  279. metadata +39 -4
  280. data/src/cxx_supportlib/vendor-modified/boost/system/detail/is_generic_value.hpp +0 -125
@@ -16,7 +16,11 @@
16
16
  #endif // defined(_MSC_VER) && (_MSC_VER >= 1200)
17
17
 
18
18
  #include <boost/asio/detail/config.hpp>
19
+ #include <cstddef>
20
+ #include <cstdlib>
19
21
  #include <memory>
22
+ #include <new>
23
+ #include <boost/asio/detail/throw_exception.hpp>
20
24
 
21
25
  #if !defined(BOOST_ASIO_HAS_STD_SHARED_PTR)
22
26
  # include <boost/make_shared.hpp>
@@ -28,6 +32,14 @@
28
32
  # include <boost/utility/addressof.hpp>
29
33
  #endif // !defined(BOOST_ASIO_HAS_STD_ADDRESSOF)
30
34
 
35
+ #if !defined(BOOST_ASIO_HAS_STD_ALIGNED_ALLOC) \
36
+ && defined(BOOST_ASIO_HAS_BOOST_ALIGN) \
37
+ && defined(BOOST_ASIO_HAS_ALIGNOF)
38
+ # include <boost/align/aligned_alloc.hpp>
39
+ #endif // !defined(BOOST_ASIO_HAS_STD_ALIGNED_ALLOC)
40
+ // && defined(BOOST_ASIO_HAS_BOOST_ALIGN)
41
+ // && defined(BOOST_ASIO_HAS_ALIGNOF)
42
+
31
43
  namespace boost {
32
44
  namespace asio {
33
45
  namespace detail {
@@ -69,6 +81,54 @@ struct allocator_arg_t {};
69
81
  /**/
70
82
  #endif // defined(BOOST_ASIO_HAS_CXX11_ALLOCATORS)
71
83
 
84
+ inline void* aligned_new(std::size_t align, std::size_t size)
85
+ {
86
+ #if defined(BOOST_ASIO_HAS_STD_ALIGNED_ALLOC) && defined(BOOST_ASIO_HAS_ALIGNOF)
87
+ size = (size % align == 0) ? size : size + (align - size % align);
88
+ void* ptr = std::aligned_alloc(align, size);
89
+ if (!ptr)
90
+ {
91
+ std::bad_alloc ex;
92
+ boost::asio::detail::throw_exception(ex);
93
+ }
94
+ return ptr;
95
+ #elif defined(BOOST_ASIO_HAS_BOOST_ALIGN) && defined(BOOST_ASIO_HAS_ALIGNOF)
96
+ size = (size % align == 0) ? size : size + (align - size % align);
97
+ void* ptr = boost::alignment::aligned_alloc(align, size);
98
+ if (!ptr)
99
+ {
100
+ std::bad_alloc ex;
101
+ boost::asio::detail::throw_exception(ex);
102
+ }
103
+ return ptr;
104
+ #elif defined(BOOST_ASIO_MSVC) && defined(BOOST_ASIO_HAS_ALIGNOF)
105
+ size = (size % align == 0) ? size : size + (align - size % align);
106
+ void* ptr = _aligned_malloc(size, align);
107
+ if (!ptr)
108
+ {
109
+ std::bad_alloc ex;
110
+ boost::asio::detail::throw_exception(ex);
111
+ }
112
+ return ptr;
113
+ #else // defined(BOOST_ASIO_MSVC) && defined(BOOST_ASIO_HAS_ALIGNOF)
114
+ (void)align;
115
+ return ::operator new(size);
116
+ #endif // defined(BOOST_ASIO_MSVC) && defined(BOOST_ASIO_HAS_ALIGNOF)
117
+ }
118
+
119
+ inline void aligned_delete(void* ptr)
120
+ {
121
+ #if defined(BOOST_ASIO_HAS_STD_ALIGNED_ALLOC) && defined(BOOST_ASIO_HAS_ALIGNOF)
122
+ std::free(ptr);
123
+ #elif defined(BOOST_ASIO_HAS_BOOST_ALIGN) && defined(BOOST_ASIO_HAS_ALIGNOF)
124
+ boost::alignment::aligned_free(ptr);
125
+ #elif defined(BOOST_ASIO_MSVC) && defined(BOOST_ASIO_HAS_ALIGNOF)
126
+ _aligned_free(ptr);
127
+ #else // defined(BOOST_ASIO_MSVC) && defined(BOOST_ASIO_HAS_ALIGNOF)
128
+ ::operator delete(ptr);
129
+ #endif // defined(BOOST_ASIO_MSVC) && defined(BOOST_ASIO_HAS_ALIGNOF)
130
+ }
131
+
72
132
  } // namespace asio
73
133
  } // namespace boost
74
134
 
@@ -51,6 +51,10 @@
51
51
 
52
52
  # pragma GCC diagnostic pop
53
53
 
54
+ # pragma pop_macro ("emit")
55
+ # pragma pop_macro ("signal")
56
+ # pragma pop_macro ("slot")
57
+
54
58
  #elif defined(__GNUC__)
55
59
 
56
60
  // GNU C++
@@ -77,6 +81,10 @@
77
81
 
78
82
  # pragma GCC diagnostic pop
79
83
 
84
+ # pragma pop_macro ("emit")
85
+ # pragma pop_macro ("signal")
86
+ # pragma pop_macro ("slot")
87
+
80
88
  #elif defined(__KCC)
81
89
 
82
90
  // Kai C++
@@ -57,6 +57,15 @@
57
57
  # pragma GCC diagnostic ignored "-Wzero-as-null-pointer-constant"
58
58
  # endif // (__clang_major__ >= 6)
59
59
 
60
+ # pragma push_macro ("emit")
61
+ # undef emit
62
+
63
+ # pragma push_macro ("signal")
64
+ # undef signal
65
+
66
+ # pragma push_macro ("slot")
67
+ # undef slot
68
+
60
69
  #elif defined(__GNUC__)
61
70
 
62
71
  // GNU C++
@@ -92,6 +101,15 @@
92
101
  # pragma GCC diagnostic ignored "-Wimplicit-fallthrough"
93
102
  # endif // (__GNUC__ >= 7)
94
103
 
104
+ # pragma push_macro ("emit")
105
+ # undef emit
106
+
107
+ # pragma push_macro ("signal")
108
+ # undef signal
109
+
110
+ # pragma push_macro ("slot")
111
+ # undef slot
112
+
95
113
  #elif defined(__KCC)
96
114
 
97
115
  // Kai C++
@@ -188,4 +206,13 @@
188
206
  # endif
189
207
  # endif
190
208
 
209
+ # pragma push_macro ("emit")
210
+ # undef emit
211
+
212
+ # pragma push_macro ("signal")
213
+ # undef signal
214
+
215
+ # pragma push_macro ("slot")
216
+ # undef slot
217
+
191
218
  #endif
@@ -21,7 +21,9 @@
21
21
  && !defined(BOOST_ASIO_WINDOWS_RUNTIME) \
22
22
  && !defined(__CYGWIN__)
23
23
 
24
+ #include <boost/asio/associated_cancellation_slot.hpp>
24
25
  #include <boost/asio/buffer.hpp>
26
+ #include <boost/asio/cancellation_type.hpp>
25
27
  #include <boost/asio/execution_context.hpp>
26
28
  #include <boost/asio/detail/bind_handler.hpp>
27
29
  #include <boost/asio/detail/buffer_sequence_adapter.hpp>
@@ -198,6 +200,9 @@ public:
198
200
  bool is_continuation =
199
201
  boost_asio_handler_cont_helpers::is_continuation(handler);
200
202
 
203
+ typename associated_cancellation_slot<Handler>::type slot
204
+ = boost::asio::get_associated_cancellation_slot(handler);
205
+
201
206
  // Allocate and construct an operation to wrap the handler.
202
207
  typedef reactive_wait_op<Handler, IoExecutor> op;
203
208
  typename op::ptr p = { boost::asio::detail::addressof(handler),
@@ -226,6 +231,14 @@ public:
226
231
  return;
227
232
  }
228
233
 
234
+ // Optionally register for per-operation cancellation.
235
+ if (slot.is_connected())
236
+ {
237
+ p.p->cancellation_key_ =
238
+ &slot.template emplace<reactor_op_cancellation>(
239
+ &reactor_, &impl.reactor_data_, impl.descriptor_, op_type);
240
+ }
241
+
229
242
  start_op(impl, op_type, p.p, is_continuation, false, false);
230
243
  p.v = p.p = 0;
231
244
  }
@@ -273,12 +286,24 @@ public:
273
286
  bool is_continuation =
274
287
  boost_asio_handler_cont_helpers::is_continuation(handler);
275
288
 
289
+ typename associated_cancellation_slot<Handler>::type slot
290
+ = boost::asio::get_associated_cancellation_slot(handler);
291
+
276
292
  // Allocate and construct an operation to wrap the handler.
277
293
  typedef descriptor_write_op<ConstBufferSequence, Handler, IoExecutor> op;
278
294
  typename op::ptr p = { boost::asio::detail::addressof(handler),
279
295
  op::ptr::allocate(handler), 0 };
280
296
  p.p = new (p.v) op(success_ec_, impl.descriptor_, buffers, handler, io_ex);
281
297
 
298
+ // Optionally register for per-operation cancellation.
299
+ if (slot.is_connected())
300
+ {
301
+ p.p->cancellation_key_ =
302
+ &slot.template emplace<reactor_op_cancellation>(
303
+ &reactor_, &impl.reactor_data_,
304
+ impl.descriptor_, reactor::write_op);
305
+ }
306
+
282
307
  BOOST_ASIO_HANDLER_CREATION((reactor_.context(), *p.p, "descriptor",
283
308
  &impl, impl.descriptor_, "async_write_some"));
284
309
 
@@ -296,12 +321,24 @@ public:
296
321
  bool is_continuation =
297
322
  boost_asio_handler_cont_helpers::is_continuation(handler);
298
323
 
324
+ typename associated_cancellation_slot<Handler>::type slot
325
+ = boost::asio::get_associated_cancellation_slot(handler);
326
+
299
327
  // Allocate and construct an operation to wrap the handler.
300
328
  typedef reactive_null_buffers_op<Handler, IoExecutor> op;
301
329
  typename op::ptr p = { boost::asio::detail::addressof(handler),
302
330
  op::ptr::allocate(handler), 0 };
303
331
  p.p = new (p.v) op(success_ec_, handler, io_ex);
304
332
 
333
+ // Optionally register for per-operation cancellation.
334
+ if (slot.is_connected())
335
+ {
336
+ p.p->cancellation_key_ =
337
+ &slot.template emplace<reactor_op_cancellation>(
338
+ &reactor_, &impl.reactor_data_,
339
+ impl.descriptor_, reactor::write_op);
340
+ }
341
+
305
342
  BOOST_ASIO_HANDLER_CREATION((reactor_.context(), *p.p, "descriptor",
306
343
  &impl, impl.descriptor_, "async_write_some(null_buffers)"));
307
344
 
@@ -353,12 +390,24 @@ public:
353
390
  bool is_continuation =
354
391
  boost_asio_handler_cont_helpers::is_continuation(handler);
355
392
 
393
+ typename associated_cancellation_slot<Handler>::type slot
394
+ = boost::asio::get_associated_cancellation_slot(handler);
395
+
356
396
  // Allocate and construct an operation to wrap the handler.
357
397
  typedef descriptor_read_op<MutableBufferSequence, Handler, IoExecutor> op;
358
398
  typename op::ptr p = { boost::asio::detail::addressof(handler),
359
399
  op::ptr::allocate(handler), 0 };
360
400
  p.p = new (p.v) op(success_ec_, impl.descriptor_, buffers, handler, io_ex);
361
401
 
402
+ // Optionally register for per-operation cancellation.
403
+ if (slot.is_connected())
404
+ {
405
+ p.p->cancellation_key_ =
406
+ &slot.template emplace<reactor_op_cancellation>(
407
+ &reactor_, &impl.reactor_data_,
408
+ impl.descriptor_, reactor::read_op);
409
+ }
410
+
362
411
  BOOST_ASIO_HANDLER_CREATION((reactor_.context(), *p.p, "descriptor",
363
412
  &impl, impl.descriptor_, "async_read_some"));
364
413
 
@@ -376,12 +425,24 @@ public:
376
425
  bool is_continuation =
377
426
  boost_asio_handler_cont_helpers::is_continuation(handler);
378
427
 
428
+ typename associated_cancellation_slot<Handler>::type slot
429
+ = boost::asio::get_associated_cancellation_slot(handler);
430
+
379
431
  // Allocate and construct an operation to wrap the handler.
380
432
  typedef reactive_null_buffers_op<Handler, IoExecutor> op;
381
433
  typename op::ptr p = { boost::asio::detail::addressof(handler),
382
434
  op::ptr::allocate(handler), 0 };
383
435
  p.p = new (p.v) op(success_ec_, handler, io_ex);
384
436
 
437
+ // Optionally register for per-operation cancellation.
438
+ if (slot.is_connected())
439
+ {
440
+ p.p->cancellation_key_ =
441
+ &slot.template emplace<reactor_op_cancellation>(
442
+ &reactor_, &impl.reactor_data_,
443
+ impl.descriptor_, reactor::read_op);
444
+ }
445
+
385
446
  BOOST_ASIO_HANDLER_CREATION((reactor_.context(), *p.p, "descriptor",
386
447
  &impl, impl.descriptor_, "async_read_some(null_buffers)"));
387
448
 
@@ -394,6 +455,38 @@ private:
394
455
  BOOST_ASIO_DECL void start_op(implementation_type& impl, int op_type,
395
456
  reactor_op* op, bool is_continuation, bool is_non_blocking, bool noop);
396
457
 
458
+ // Helper class used to implement per-operation cancellation
459
+ class reactor_op_cancellation
460
+ {
461
+ public:
462
+ reactor_op_cancellation(reactor* r,
463
+ reactor::per_descriptor_data* p, int d, int o)
464
+ : reactor_(r),
465
+ reactor_data_(p),
466
+ descriptor_(d),
467
+ op_type_(o)
468
+ {
469
+ }
470
+
471
+ void operator()(cancellation_type_t type)
472
+ {
473
+ if (!!(type &
474
+ (cancellation_type::terminal
475
+ | cancellation_type::partial
476
+ | cancellation_type::total)))
477
+ {
478
+ reactor_->cancel_ops_by_key(descriptor_,
479
+ *reactor_data_, op_type_, this);
480
+ }
481
+ }
482
+
483
+ private:
484
+ reactor* reactor_;
485
+ reactor::per_descriptor_data* reactor_data_;
486
+ int descriptor_;
487
+ int op_type_;
488
+ };
489
+
397
490
  // The selector that performs event demultiplexing for the service.
398
491
  reactor& reactor_;
399
492
 
@@ -261,6 +261,9 @@ public:
261
261
  bool is_continuation =
262
262
  boost_asio_handler_cont_helpers::is_continuation(handler);
263
263
 
264
+ typename associated_cancellation_slot<Handler>::type slot
265
+ = boost::asio::get_associated_cancellation_slot(handler);
266
+
264
267
  // Allocate and construct an operation to wrap the handler.
265
268
  typedef reactive_socket_sendto_op<ConstBufferSequence,
266
269
  endpoint_type, Handler, IoExecutor> op;
@@ -269,6 +272,14 @@ public:
269
272
  p.p = new (p.v) op(success_ec_, impl.socket_,
270
273
  buffers, destination, flags, handler, io_ex);
271
274
 
275
+ // Optionally register for per-operation cancellation.
276
+ if (slot.is_connected())
277
+ {
278
+ p.p->cancellation_key_ =
279
+ &slot.template emplace<reactor_op_cancellation>(
280
+ &reactor_, &impl.reactor_data_, impl.socket_, reactor::write_op);
281
+ }
282
+
272
283
  BOOST_ASIO_HANDLER_CREATION((reactor_.context(), *p.p, "socket",
273
284
  &impl, impl.socket_, "async_send_to"));
274
285
 
@@ -285,12 +296,23 @@ public:
285
296
  bool is_continuation =
286
297
  boost_asio_handler_cont_helpers::is_continuation(handler);
287
298
 
299
+ typename associated_cancellation_slot<Handler>::type slot
300
+ = boost::asio::get_associated_cancellation_slot(handler);
301
+
288
302
  // Allocate and construct an operation to wrap the handler.
289
303
  typedef reactive_null_buffers_op<Handler, IoExecutor> op;
290
304
  typename op::ptr p = { boost::asio::detail::addressof(handler),
291
305
  op::ptr::allocate(handler), 0 };
292
306
  p.p = new (p.v) op(success_ec_, handler, io_ex);
293
307
 
308
+ // Optionally register for per-operation cancellation.
309
+ if (slot.is_connected())
310
+ {
311
+ p.p->cancellation_key_ =
312
+ &slot.template emplace<reactor_op_cancellation>(
313
+ &reactor_, &impl.reactor_data_, impl.socket_, reactor::write_op);
314
+ }
315
+
294
316
  BOOST_ASIO_HANDLER_CREATION((reactor_.context(), *p.p, "socket",
295
317
  &impl, impl.socket_, "async_send_to(null_buffers)"));
296
318
 
@@ -359,6 +381,9 @@ public:
359
381
  bool is_continuation =
360
382
  boost_asio_handler_cont_helpers::is_continuation(handler);
361
383
 
384
+ typename associated_cancellation_slot<Handler>::type slot
385
+ = boost::asio::get_associated_cancellation_slot(handler);
386
+
362
387
  // Allocate and construct an operation to wrap the handler.
363
388
  typedef reactive_socket_recvfrom_op<MutableBufferSequence,
364
389
  endpoint_type, Handler, IoExecutor> op;
@@ -368,6 +393,14 @@ public:
368
393
  p.p = new (p.v) op(success_ec_, impl.socket_, protocol,
369
394
  buffers, sender_endpoint, flags, handler, io_ex);
370
395
 
396
+ // Optionally register for per-operation cancellation.
397
+ if (slot.is_connected())
398
+ {
399
+ p.p->cancellation_key_ =
400
+ &slot.template emplace<reactor_op_cancellation>(
401
+ &reactor_, &impl.reactor_data_, impl.socket_, reactor::read_op);
402
+ }
403
+
371
404
  BOOST_ASIO_HANDLER_CREATION((reactor_.context(), *p.p, "socket",
372
405
  &impl, impl.socket_, "async_receive_from"));
373
406
 
@@ -387,12 +420,23 @@ public:
387
420
  bool is_continuation =
388
421
  boost_asio_handler_cont_helpers::is_continuation(handler);
389
422
 
423
+ typename associated_cancellation_slot<Handler>::type slot
424
+ = boost::asio::get_associated_cancellation_slot(handler);
425
+
390
426
  // Allocate and construct an operation to wrap the handler.
391
427
  typedef reactive_null_buffers_op<Handler, IoExecutor> op;
392
428
  typename op::ptr p = { boost::asio::detail::addressof(handler),
393
429
  op::ptr::allocate(handler), 0 };
394
430
  p.p = new (p.v) op(success_ec_, handler, io_ex);
395
431
 
432
+ // Optionally register for per-operation cancellation.
433
+ if (slot.is_connected())
434
+ {
435
+ p.p->cancellation_key_ =
436
+ &slot.template emplace<reactor_op_cancellation>(
437
+ &reactor_, &impl.reactor_data_, impl.socket_, reactor::read_op);
438
+ }
439
+
396
440
  BOOST_ASIO_HANDLER_CREATION((reactor_.context(), *p.p, "socket",
397
441
  &impl, impl.socket_, "async_receive_from(null_buffers)"));
398
442
 
@@ -445,6 +489,9 @@ public:
445
489
  bool is_continuation =
446
490
  boost_asio_handler_cont_helpers::is_continuation(handler);
447
491
 
492
+ typename associated_cancellation_slot<Handler>::type slot
493
+ = boost::asio::get_associated_cancellation_slot(handler);
494
+
448
495
  // Allocate and construct an operation to wrap the handler.
449
496
  typedef reactive_socket_accept_op<Socket, Protocol, Handler, IoExecutor> op;
450
497
  typename op::ptr p = { boost::asio::detail::addressof(handler),
@@ -452,6 +499,14 @@ public:
452
499
  p.p = new (p.v) op(success_ec_, impl.socket_, impl.state_,
453
500
  peer, impl.protocol_, peer_endpoint, handler, io_ex);
454
501
 
502
+ // Optionally register for per-operation cancellation.
503
+ if (slot.is_connected() && !peer.is_open())
504
+ {
505
+ p.p->cancellation_key_ =
506
+ &slot.template emplace<reactor_op_cancellation>(
507
+ &reactor_, &impl.reactor_data_, impl.socket_, reactor::read_op);
508
+ }
509
+
455
510
  BOOST_ASIO_HANDLER_CREATION((reactor_.context(), *p.p, "socket",
456
511
  &impl, impl.socket_, "async_accept"));
457
512
 
@@ -470,6 +525,9 @@ public:
470
525
  bool is_continuation =
471
526
  boost_asio_handler_cont_helpers::is_continuation(handler);
472
527
 
528
+ typename associated_cancellation_slot<Handler>::type slot
529
+ = boost::asio::get_associated_cancellation_slot(handler);
530
+
473
531
  // Allocate and construct an operation to wrap the handler.
474
532
  typedef reactive_socket_move_accept_op<Protocol,
475
533
  PeerIoExecutor, Handler, IoExecutor> op;
@@ -478,6 +536,14 @@ public:
478
536
  p.p = new (p.v) op(success_ec_, peer_io_ex, impl.socket_,
479
537
  impl.state_, impl.protocol_, peer_endpoint, handler, io_ex);
480
538
 
539
+ // Optionally register for per-operation cancellation.
540
+ if (slot.is_connected())
541
+ {
542
+ p.p->cancellation_key_ =
543
+ &slot.template emplace<reactor_op_cancellation>(
544
+ &reactor_, &impl.reactor_data_, impl.socket_, reactor::read_op);
545
+ }
546
+
481
547
  BOOST_ASIO_HANDLER_CREATION((reactor_.context(), *p.p, "socket",
482
548
  &impl, impl.socket_, "async_accept"));
483
549
 
@@ -504,12 +570,23 @@ public:
504
570
  bool is_continuation =
505
571
  boost_asio_handler_cont_helpers::is_continuation(handler);
506
572
 
573
+ typename associated_cancellation_slot<Handler>::type slot
574
+ = boost::asio::get_associated_cancellation_slot(handler);
575
+
507
576
  // Allocate and construct an operation to wrap the handler.
508
577
  typedef reactive_socket_connect_op<Handler, IoExecutor> op;
509
578
  typename op::ptr p = { boost::asio::detail::addressof(handler),
510
579
  op::ptr::allocate(handler), 0 };
511
580
  p.p = new (p.v) op(success_ec_, impl.socket_, handler, io_ex);
512
581
 
582
+ // Optionally register for per-operation cancellation.
583
+ if (slot.is_connected())
584
+ {
585
+ p.p->cancellation_key_ =
586
+ &slot.template emplace<reactor_op_cancellation>(
587
+ &reactor_, &impl.reactor_data_, impl.socket_, reactor::connect_op);
588
+ }
589
+
513
590
  BOOST_ASIO_HANDLER_CREATION((reactor_.context(), *p.p, "socket",
514
591
  &impl, impl.socket_, "async_connect"));
515
592