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
@@ -19,10 +19,10 @@
19
19
  #include <string>
20
20
  #include <vector>
21
21
  #include <utility>
22
- #include <boost/asio/associated_allocator.hpp>
23
- #include <boost/asio/associated_executor.hpp>
22
+ #include <boost/asio/associator.hpp>
24
23
  #include <boost/asio/buffer.hpp>
25
24
  #include <boost/asio/buffers_iterator.hpp>
25
+ #include <boost/asio/detail/base_from_cancellation_state.hpp>
26
26
  #include <boost/asio/detail/bind_handler.hpp>
27
27
  #include <boost/asio/detail/handler_alloc_helpers.hpp>
28
28
  #include <boost/asio/detail/handler_cont_helpers.hpp>
@@ -806,13 +806,16 @@ namespace detail
806
806
  template <typename AsyncReadStream,
807
807
  typename DynamicBuffer_v1, typename ReadHandler>
808
808
  class read_until_delim_op_v1
809
+ : public base_from_cancellation_state<ReadHandler>
809
810
  {
810
811
  public:
811
812
  template <typename BufferSequence>
812
813
  read_until_delim_op_v1(AsyncReadStream& stream,
813
814
  BOOST_ASIO_MOVE_ARG(BufferSequence) buffers,
814
815
  char delim, ReadHandler& handler)
815
- : stream_(stream),
816
+ : base_from_cancellation_state<ReadHandler>(
817
+ handler, enable_partial_cancellation()),
818
+ stream_(stream),
816
819
  buffers_(BOOST_ASIO_MOVE_CAST(BufferSequence)(buffers)),
817
820
  delim_(delim),
818
821
  start_(0),
@@ -823,7 +826,8 @@ namespace detail
823
826
 
824
827
  #if defined(BOOST_ASIO_HAS_MOVE)
825
828
  read_until_delim_op_v1(const read_until_delim_op_v1& other)
826
- : stream_(other.stream_),
829
+ : base_from_cancellation_state<ReadHandler>(other),
830
+ stream_(other.stream_),
827
831
  buffers_(other.buffers_),
828
832
  delim_(other.delim_),
829
833
  start_(other.start_),
@@ -833,7 +837,10 @@ namespace detail
833
837
  }
834
838
 
835
839
  read_until_delim_op_v1(read_until_delim_op_v1&& other)
836
- : stream_(other.stream_),
840
+ : base_from_cancellation_state<ReadHandler>(
841
+ BOOST_ASIO_MOVE_CAST(base_from_cancellation_state<
842
+ ReadHandler>)(other)),
843
+ stream_(other.stream_),
837
844
  buffers_(BOOST_ASIO_MOVE_CAST(DynamicBuffer_v1)(other.buffers_)),
838
845
  delim_(other.delim_),
839
846
  start_(other.start_),
@@ -843,7 +850,7 @@ namespace detail
843
850
  }
844
851
  #endif // defined(BOOST_ASIO_HAS_MOVE)
845
852
 
846
- void operator()(const boost::system::error_code& ec,
853
+ void operator()(boost::system::error_code ec,
847
854
  std::size_t bytes_transferred, int start = 0)
848
855
  {
849
856
  const std::size_t not_found = (std::numeric_limits<std::size_t>::max)();
@@ -907,6 +914,11 @@ namespace detail
907
914
  buffers_.commit(bytes_transferred);
908
915
  if (ec || bytes_transferred == 0)
909
916
  break;
917
+ if (this->cancelled() != cancellation_type::none)
918
+ {
919
+ ec = error::operation_aborted;
920
+ break;
921
+ }
910
922
  }
911
923
 
912
924
  const boost::system::error_code result_ec =
@@ -917,7 +929,7 @@ namespace detail
917
929
  (ec || search_position_ == not_found)
918
930
  ? 0 : search_position_;
919
931
 
920
- handler_(result_ec, result_n);
932
+ BOOST_ASIO_MOVE_OR_LVALUE(ReadHandler)(handler_)(result_ec, result_n);
921
933
  }
922
934
  }
923
935
 
@@ -1039,40 +1051,21 @@ namespace detail
1039
1051
 
1040
1052
  #if !defined(GENERATING_DOCUMENTATION)
1041
1053
 
1042
- template <typename AsyncReadStream, typename DynamicBuffer_v1,
1043
- typename ReadHandler, typename Allocator>
1044
- struct associated_allocator<
1045
- detail::read_until_delim_op_v1<AsyncReadStream,
1046
- DynamicBuffer_v1, ReadHandler>,
1047
- Allocator>
1048
- {
1049
- typedef typename associated_allocator<ReadHandler, Allocator>::type type;
1050
-
1051
- static type get(
1052
- const detail::read_until_delim_op_v1<AsyncReadStream,
1053
- DynamicBuffer_v1, ReadHandler>& h,
1054
- const Allocator& a = Allocator()) BOOST_ASIO_NOEXCEPT
1055
- {
1056
- return associated_allocator<ReadHandler, Allocator>::get(h.handler_, a);
1057
- }
1058
- };
1059
-
1060
- template <typename AsyncReadStream, typename DynamicBuffer_v1,
1061
- typename ReadHandler, typename Executor>
1062
- struct associated_executor<
1054
+ template <template <typename, typename> class Associator,
1055
+ typename AsyncReadStream, typename DynamicBuffer_v1,
1056
+ typename ReadHandler, typename DefaultCandidate>
1057
+ struct associator<Associator,
1063
1058
  detail::read_until_delim_op_v1<AsyncReadStream,
1064
1059
  DynamicBuffer_v1, ReadHandler>,
1065
- Executor>
1066
- : detail::associated_executor_forwarding_base<ReadHandler, Executor>
1060
+ DefaultCandidate>
1061
+ : Associator<ReadHandler, DefaultCandidate>
1067
1062
  {
1068
- typedef typename associated_executor<ReadHandler, Executor>::type type;
1069
-
1070
- static type get(
1063
+ static typename Associator<ReadHandler, DefaultCandidate>::type get(
1071
1064
  const detail::read_until_delim_op_v1<AsyncReadStream,
1072
1065
  DynamicBuffer_v1, ReadHandler>& h,
1073
- const Executor& ex = Executor()) BOOST_ASIO_NOEXCEPT
1066
+ const DefaultCandidate& c = DefaultCandidate()) BOOST_ASIO_NOEXCEPT
1074
1067
  {
1075
- return associated_executor<ReadHandler, Executor>::get(h.handler_, ex);
1068
+ return Associator<ReadHandler, DefaultCandidate>::get(h.handler_, c);
1076
1069
  }
1077
1070
  };
1078
1071
 
@@ -1104,13 +1097,16 @@ namespace detail
1104
1097
  template <typename AsyncReadStream,
1105
1098
  typename DynamicBuffer_v1, typename ReadHandler>
1106
1099
  class read_until_delim_string_op_v1
1100
+ : public base_from_cancellation_state<ReadHandler>
1107
1101
  {
1108
1102
  public:
1109
1103
  template <typename BufferSequence>
1110
1104
  read_until_delim_string_op_v1(AsyncReadStream& stream,
1111
1105
  BOOST_ASIO_MOVE_ARG(BufferSequence) buffers,
1112
1106
  const std::string& delim, ReadHandler& handler)
1113
- : stream_(stream),
1107
+ : base_from_cancellation_state<ReadHandler>(
1108
+ handler, enable_partial_cancellation()),
1109
+ stream_(stream),
1114
1110
  buffers_(BOOST_ASIO_MOVE_CAST(BufferSequence)(buffers)),
1115
1111
  delim_(delim),
1116
1112
  start_(0),
@@ -1121,7 +1117,8 @@ namespace detail
1121
1117
 
1122
1118
  #if defined(BOOST_ASIO_HAS_MOVE)
1123
1119
  read_until_delim_string_op_v1(const read_until_delim_string_op_v1& other)
1124
- : stream_(other.stream_),
1120
+ : base_from_cancellation_state<ReadHandler>(other),
1121
+ stream_(other.stream_),
1125
1122
  buffers_(other.buffers_),
1126
1123
  delim_(other.delim_),
1127
1124
  start_(other.start_),
@@ -1131,7 +1128,10 @@ namespace detail
1131
1128
  }
1132
1129
 
1133
1130
  read_until_delim_string_op_v1(read_until_delim_string_op_v1&& other)
1134
- : stream_(other.stream_),
1131
+ : base_from_cancellation_state<ReadHandler>(
1132
+ BOOST_ASIO_MOVE_CAST(base_from_cancellation_state<
1133
+ ReadHandler>)(other)),
1134
+ stream_(other.stream_),
1135
1135
  buffers_(BOOST_ASIO_MOVE_CAST(DynamicBuffer_v1)(other.buffers_)),
1136
1136
  delim_(BOOST_ASIO_MOVE_CAST(std::string)(other.delim_)),
1137
1137
  start_(other.start_),
@@ -1141,7 +1141,7 @@ namespace detail
1141
1141
  }
1142
1142
  #endif // defined(BOOST_ASIO_HAS_MOVE)
1143
1143
 
1144
- void operator()(const boost::system::error_code& ec,
1144
+ void operator()(boost::system::error_code ec,
1145
1145
  std::size_t bytes_transferred, int start = 0)
1146
1146
  {
1147
1147
  const std::size_t not_found = (std::numeric_limits<std::size_t>::max)();
@@ -1216,6 +1216,11 @@ namespace detail
1216
1216
  buffers_.commit(bytes_transferred);
1217
1217
  if (ec || bytes_transferred == 0)
1218
1218
  break;
1219
+ if (this->cancelled() != cancellation_type::none)
1220
+ {
1221
+ ec = error::operation_aborted;
1222
+ break;
1223
+ }
1219
1224
  }
1220
1225
 
1221
1226
  const boost::system::error_code result_ec =
@@ -1226,7 +1231,7 @@ namespace detail
1226
1231
  (ec || search_position_ == not_found)
1227
1232
  ? 0 : search_position_;
1228
1233
 
1229
- handler_(result_ec, result_n);
1234
+ BOOST_ASIO_MOVE_OR_LVALUE(ReadHandler)(handler_)(result_ec, result_n);
1230
1235
  }
1231
1236
  }
1232
1237
 
@@ -1348,40 +1353,21 @@ namespace detail
1348
1353
 
1349
1354
  #if !defined(GENERATING_DOCUMENTATION)
1350
1355
 
1351
- template <typename AsyncReadStream, typename DynamicBuffer_v1,
1352
- typename ReadHandler, typename Allocator>
1353
- struct associated_allocator<
1354
- detail::read_until_delim_string_op_v1<AsyncReadStream,
1355
- DynamicBuffer_v1, ReadHandler>,
1356
- Allocator>
1357
- {
1358
- typedef typename associated_allocator<ReadHandler, Allocator>::type type;
1359
-
1360
- static type get(
1361
- const detail::read_until_delim_string_op_v1<AsyncReadStream,
1362
- DynamicBuffer_v1, ReadHandler>& h,
1363
- const Allocator& a = Allocator()) BOOST_ASIO_NOEXCEPT
1364
- {
1365
- return associated_allocator<ReadHandler, Allocator>::get(h.handler_, a);
1366
- }
1367
- };
1368
-
1369
- template <typename AsyncReadStream, typename DynamicBuffer_v1,
1370
- typename ReadHandler, typename Executor>
1371
- struct associated_executor<
1356
+ template <template <typename, typename> class Associator,
1357
+ typename AsyncReadStream, typename DynamicBuffer_v1,
1358
+ typename ReadHandler, typename DefaultCandidate>
1359
+ struct associator<Associator,
1372
1360
  detail::read_until_delim_string_op_v1<AsyncReadStream,
1373
1361
  DynamicBuffer_v1, ReadHandler>,
1374
- Executor>
1375
- : detail::associated_executor_forwarding_base<ReadHandler, Executor>
1362
+ DefaultCandidate>
1363
+ : Associator<ReadHandler, DefaultCandidate>
1376
1364
  {
1377
- typedef typename associated_executor<ReadHandler, Executor>::type type;
1378
-
1379
- static type get(
1365
+ static typename Associator<ReadHandler, DefaultCandidate>::type get(
1380
1366
  const detail::read_until_delim_string_op_v1<AsyncReadStream,
1381
1367
  DynamicBuffer_v1, ReadHandler>& h,
1382
- const Executor& ex = Executor()) BOOST_ASIO_NOEXCEPT
1368
+ const DefaultCandidate& c = DefaultCandidate()) BOOST_ASIO_NOEXCEPT
1383
1369
  {
1384
- return associated_executor<ReadHandler, Executor>::get(h.handler_, ex);
1370
+ return Associator<ReadHandler, DefaultCandidate>::get(h.handler_, c);
1385
1371
  }
1386
1372
  };
1387
1373
 
@@ -1418,13 +1404,16 @@ namespace detail
1418
1404
  template <typename AsyncReadStream, typename DynamicBuffer_v1,
1419
1405
  typename RegEx, typename ReadHandler>
1420
1406
  class read_until_expr_op_v1
1407
+ : public base_from_cancellation_state<ReadHandler>
1421
1408
  {
1422
1409
  public:
1423
1410
  template <typename BufferSequence>
1424
1411
  read_until_expr_op_v1(AsyncReadStream& stream,
1425
1412
  BOOST_ASIO_MOVE_ARG(BufferSequence) buffers,
1426
1413
  const boost::regex& expr, ReadHandler& handler)
1427
- : stream_(stream),
1414
+ : base_from_cancellation_state<ReadHandler>(
1415
+ handler, enable_partial_cancellation()),
1416
+ stream_(stream),
1428
1417
  buffers_(BOOST_ASIO_MOVE_CAST(BufferSequence)(buffers)),
1429
1418
  expr_(expr),
1430
1419
  start_(0),
@@ -1435,7 +1424,8 @@ namespace detail
1435
1424
 
1436
1425
  #if defined(BOOST_ASIO_HAS_MOVE)
1437
1426
  read_until_expr_op_v1(const read_until_expr_op_v1& other)
1438
- : stream_(other.stream_),
1427
+ : base_from_cancellation_state<ReadHandler>(other),
1428
+ stream_(other.stream_),
1439
1429
  buffers_(other.buffers_),
1440
1430
  expr_(other.expr_),
1441
1431
  start_(other.start_),
@@ -1445,7 +1435,10 @@ namespace detail
1445
1435
  }
1446
1436
 
1447
1437
  read_until_expr_op_v1(read_until_expr_op_v1&& other)
1448
- : stream_(other.stream_),
1438
+ : base_from_cancellation_state<ReadHandler>(
1439
+ BOOST_ASIO_MOVE_CAST(base_from_cancellation_state<
1440
+ ReadHandler>)(other)),
1441
+ stream_(other.stream_),
1449
1442
  buffers_(BOOST_ASIO_MOVE_CAST(DynamicBuffer_v1)(other.buffers_)),
1450
1443
  expr_(other.expr_),
1451
1444
  start_(other.start_),
@@ -1455,7 +1448,7 @@ namespace detail
1455
1448
  }
1456
1449
  #endif // defined(BOOST_ASIO_HAS_MOVE)
1457
1450
 
1458
- void operator()(const boost::system::error_code& ec,
1451
+ void operator()(boost::system::error_code ec,
1459
1452
  std::size_t bytes_transferred, int start = 0)
1460
1453
  {
1461
1454
  const std::size_t not_found = (std::numeric_limits<std::size_t>::max)();
@@ -1533,6 +1526,11 @@ namespace detail
1533
1526
  buffers_.commit(bytes_transferred);
1534
1527
  if (ec || bytes_transferred == 0)
1535
1528
  break;
1529
+ if (this->cancelled() != cancellation_type::none)
1530
+ {
1531
+ ec = error::operation_aborted;
1532
+ break;
1533
+ }
1536
1534
  }
1537
1535
 
1538
1536
  const boost::system::error_code result_ec =
@@ -1543,7 +1541,7 @@ namespace detail
1543
1541
  (ec || search_position_ == not_found)
1544
1542
  ? 0 : search_position_;
1545
1543
 
1546
- handler_(result_ec, result_n);
1544
+ BOOST_ASIO_MOVE_OR_LVALUE(ReadHandler)(handler_)(result_ec, result_n);
1547
1545
  }
1548
1546
  }
1549
1547
 
@@ -1664,40 +1662,21 @@ namespace detail
1664
1662
 
1665
1663
  #if !defined(GENERATING_DOCUMENTATION)
1666
1664
 
1667
- template <typename AsyncReadStream, typename DynamicBuffer_v1,
1668
- typename RegEx, typename ReadHandler, typename Allocator>
1669
- struct associated_allocator<
1670
- detail::read_until_expr_op_v1<AsyncReadStream,
1671
- DynamicBuffer_v1, RegEx, ReadHandler>,
1672
- Allocator>
1673
- {
1674
- typedef typename associated_allocator<ReadHandler, Allocator>::type type;
1675
-
1676
- static type get(
1677
- const detail::read_until_expr_op_v1<AsyncReadStream,
1678
- DynamicBuffer_v1, RegEx, ReadHandler>& h,
1679
- const Allocator& a = Allocator()) BOOST_ASIO_NOEXCEPT
1680
- {
1681
- return associated_allocator<ReadHandler, Allocator>::get(h.handler_, a);
1682
- }
1683
- };
1684
-
1685
- template <typename AsyncReadStream, typename DynamicBuffer_v1,
1686
- typename RegEx, typename ReadHandler, typename Executor>
1687
- struct associated_executor<
1665
+ template <template <typename, typename> class Associator,
1666
+ typename AsyncReadStream, typename DynamicBuffer_v1,
1667
+ typename RegEx, typename ReadHandler, typename DefaultCandidate>
1668
+ struct associator<Associator,
1688
1669
  detail::read_until_expr_op_v1<AsyncReadStream,
1689
1670
  DynamicBuffer_v1, RegEx, ReadHandler>,
1690
- Executor>
1691
- : detail::associated_executor_forwarding_base<ReadHandler, Executor>
1671
+ DefaultCandidate>
1672
+ : Associator<ReadHandler, DefaultCandidate>
1692
1673
  {
1693
- typedef typename associated_executor<ReadHandler, Executor>::type type;
1694
-
1695
- static type get(
1674
+ static typename Associator<ReadHandler, DefaultCandidate>::type get(
1696
1675
  const detail::read_until_expr_op_v1<AsyncReadStream,
1697
1676
  DynamicBuffer_v1, RegEx, ReadHandler>& h,
1698
- const Executor& ex = Executor()) BOOST_ASIO_NOEXCEPT
1677
+ const DefaultCandidate& c = DefaultCandidate()) BOOST_ASIO_NOEXCEPT
1699
1678
  {
1700
- return associated_executor<ReadHandler, Executor>::get(h.handler_, ex);
1679
+ return Associator<ReadHandler, DefaultCandidate>::get(h.handler_, c);
1701
1680
  }
1702
1681
  };
1703
1682
 
@@ -1732,13 +1711,16 @@ namespace detail
1732
1711
  template <typename AsyncReadStream, typename DynamicBuffer_v1,
1733
1712
  typename MatchCondition, typename ReadHandler>
1734
1713
  class read_until_match_op_v1
1714
+ : public base_from_cancellation_state<ReadHandler>
1735
1715
  {
1736
1716
  public:
1737
1717
  template <typename BufferSequence>
1738
1718
  read_until_match_op_v1(AsyncReadStream& stream,
1739
1719
  BOOST_ASIO_MOVE_ARG(BufferSequence) buffers,
1740
1720
  MatchCondition match_condition, ReadHandler& handler)
1741
- : stream_(stream),
1721
+ : base_from_cancellation_state<ReadHandler>(
1722
+ handler, enable_partial_cancellation()),
1723
+ stream_(stream),
1742
1724
  buffers_(BOOST_ASIO_MOVE_CAST(BufferSequence)(buffers)),
1743
1725
  match_condition_(match_condition),
1744
1726
  start_(0),
@@ -1749,7 +1731,8 @@ namespace detail
1749
1731
 
1750
1732
  #if defined(BOOST_ASIO_HAS_MOVE)
1751
1733
  read_until_match_op_v1(const read_until_match_op_v1& other)
1752
- : stream_(other.stream_),
1734
+ : base_from_cancellation_state<ReadHandler>(other),
1735
+ stream_(other.stream_),
1753
1736
  buffers_(other.buffers_),
1754
1737
  match_condition_(other.match_condition_),
1755
1738
  start_(other.start_),
@@ -1759,7 +1742,10 @@ namespace detail
1759
1742
  }
1760
1743
 
1761
1744
  read_until_match_op_v1(read_until_match_op_v1&& other)
1762
- : stream_(other.stream_),
1745
+ : base_from_cancellation_state<ReadHandler>(
1746
+ BOOST_ASIO_MOVE_CAST(base_from_cancellation_state<
1747
+ ReadHandler>)(other)),
1748
+ stream_(other.stream_),
1763
1749
  buffers_(BOOST_ASIO_MOVE_CAST(DynamicBuffer_v1)(other.buffers_)),
1764
1750
  match_condition_(other.match_condition_),
1765
1751
  start_(other.start_),
@@ -1769,7 +1755,7 @@ namespace detail
1769
1755
  }
1770
1756
  #endif // defined(BOOST_ASIO_HAS_MOVE)
1771
1757
 
1772
- void operator()(const boost::system::error_code& ec,
1758
+ void operator()(boost::system::error_code ec,
1773
1759
  std::size_t bytes_transferred, int start = 0)
1774
1760
  {
1775
1761
  const std::size_t not_found = (std::numeric_limits<std::size_t>::max)();
@@ -1843,6 +1829,11 @@ namespace detail
1843
1829
  buffers_.commit(bytes_transferred);
1844
1830
  if (ec || bytes_transferred == 0)
1845
1831
  break;
1832
+ if (this->cancelled() != cancellation_type::none)
1833
+ {
1834
+ ec = error::operation_aborted;
1835
+ break;
1836
+ }
1846
1837
  }
1847
1838
 
1848
1839
  const boost::system::error_code result_ec =
@@ -1853,7 +1844,7 @@ namespace detail
1853
1844
  (ec || search_position_ == not_found)
1854
1845
  ? 0 : search_position_;
1855
1846
 
1856
- handler_(result_ec, result_n);
1847
+ BOOST_ASIO_MOVE_OR_LVALUE(ReadHandler)(handler_)(result_ec, result_n);
1857
1848
  }
1858
1849
  }
1859
1850
 
@@ -1978,40 +1969,21 @@ namespace detail
1978
1969
 
1979
1970
  #if !defined(GENERATING_DOCUMENTATION)
1980
1971
 
1981
- template <typename AsyncReadStream, typename DynamicBuffer_v1,
1982
- typename MatchCondition, typename ReadHandler, typename Allocator>
1983
- struct associated_allocator<
1984
- detail::read_until_match_op_v1<AsyncReadStream,
1985
- DynamicBuffer_v1, MatchCondition, ReadHandler>,
1986
- Allocator>
1987
- {
1988
- typedef typename associated_allocator<ReadHandler, Allocator>::type type;
1989
-
1990
- static type get(
1991
- const detail::read_until_match_op_v1<AsyncReadStream,
1992
- DynamicBuffer_v1, MatchCondition, ReadHandler>& h,
1993
- const Allocator& a = Allocator()) BOOST_ASIO_NOEXCEPT
1994
- {
1995
- return associated_allocator<ReadHandler, Allocator>::get(h.handler_, a);
1996
- }
1997
- };
1998
-
1999
- template <typename AsyncReadStream, typename DynamicBuffer_v1,
2000
- typename MatchCondition, typename ReadHandler, typename Executor>
2001
- struct associated_executor<
1972
+ template <template <typename, typename> class Associator,
1973
+ typename AsyncReadStream, typename DynamicBuffer_v1,
1974
+ typename MatchCondition, typename ReadHandler, typename DefaultCandidate>
1975
+ struct associator<Associator,
2002
1976
  detail::read_until_match_op_v1<AsyncReadStream,
2003
1977
  DynamicBuffer_v1, MatchCondition, ReadHandler>,
2004
- Executor>
2005
- : detail::associated_executor_forwarding_base<ReadHandler, Executor>
1978
+ DefaultCandidate>
1979
+ : Associator<ReadHandler, DefaultCandidate>
2006
1980
  {
2007
- typedef typename associated_executor<ReadHandler, Executor>::type type;
2008
-
2009
- static type get(
1981
+ static typename Associator<ReadHandler, DefaultCandidate>::type get(
2010
1982
  const detail::read_until_match_op_v1<AsyncReadStream,
2011
1983
  DynamicBuffer_v1, MatchCondition, ReadHandler>& h,
2012
- const Executor& ex = Executor()) BOOST_ASIO_NOEXCEPT
1984
+ const DefaultCandidate& c = DefaultCandidate()) BOOST_ASIO_NOEXCEPT
2013
1985
  {
2014
- return associated_executor<ReadHandler, Executor>::get(h.handler_, ex);
1986
+ return Associator<ReadHandler, DefaultCandidate>::get(h.handler_, c);
2015
1987
  }
2016
1988
  };
2017
1989
 
@@ -2111,13 +2083,16 @@ namespace detail
2111
2083
  template <typename AsyncReadStream,
2112
2084
  typename DynamicBuffer_v2, typename ReadHandler>
2113
2085
  class read_until_delim_op_v2
2086
+ : public base_from_cancellation_state<ReadHandler>
2114
2087
  {
2115
2088
  public:
2116
2089
  template <typename BufferSequence>
2117
2090
  read_until_delim_op_v2(AsyncReadStream& stream,
2118
2091
  BOOST_ASIO_MOVE_ARG(BufferSequence) buffers,
2119
2092
  char delim, ReadHandler& handler)
2120
- : stream_(stream),
2093
+ : base_from_cancellation_state<ReadHandler>(
2094
+ handler, enable_partial_cancellation()),
2095
+ stream_(stream),
2121
2096
  buffers_(BOOST_ASIO_MOVE_CAST(BufferSequence)(buffers)),
2122
2097
  delim_(delim),
2123
2098
  start_(0),
@@ -2129,7 +2104,8 @@ namespace detail
2129
2104
 
2130
2105
  #if defined(BOOST_ASIO_HAS_MOVE)
2131
2106
  read_until_delim_op_v2(const read_until_delim_op_v2& other)
2132
- : stream_(other.stream_),
2107
+ : base_from_cancellation_state<ReadHandler>(other),
2108
+ stream_(other.stream_),
2133
2109
  buffers_(other.buffers_),
2134
2110
  delim_(other.delim_),
2135
2111
  start_(other.start_),
@@ -2140,7 +2116,10 @@ namespace detail
2140
2116
  }
2141
2117
 
2142
2118
  read_until_delim_op_v2(read_until_delim_op_v2&& other)
2143
- : stream_(other.stream_),
2119
+ : base_from_cancellation_state<ReadHandler>(
2120
+ BOOST_ASIO_MOVE_CAST(base_from_cancellation_state<
2121
+ ReadHandler>)(other)),
2122
+ stream_(other.stream_),
2144
2123
  buffers_(BOOST_ASIO_MOVE_CAST(DynamicBuffer_v2)(other.buffers_)),
2145
2124
  delim_(other.delim_),
2146
2125
  start_(other.start_),
@@ -2151,7 +2130,7 @@ namespace detail
2151
2130
  }
2152
2131
  #endif // defined(BOOST_ASIO_HAS_MOVE)
2153
2132
 
2154
- void operator()(const boost::system::error_code& ec,
2133
+ void operator()(boost::system::error_code ec,
2155
2134
  std::size_t bytes_transferred, int start = 0)
2156
2135
  {
2157
2136
  const std::size_t not_found = (std::numeric_limits<std::size_t>::max)();
@@ -2219,6 +2198,11 @@ namespace detail
2219
2198
  buffers_.shrink(bytes_to_read_ - bytes_transferred);
2220
2199
  if (ec || bytes_transferred == 0)
2221
2200
  break;
2201
+ if (this->cancelled() != cancellation_type::none)
2202
+ {
2203
+ ec = error::operation_aborted;
2204
+ break;
2205
+ }
2222
2206
  }
2223
2207
 
2224
2208
  const boost::system::error_code result_ec =
@@ -2229,7 +2213,7 @@ namespace detail
2229
2213
  (ec || search_position_ == not_found)
2230
2214
  ? 0 : search_position_;
2231
2215
 
2232
- handler_(result_ec, result_n);
2216
+ BOOST_ASIO_MOVE_OR_LVALUE(ReadHandler)(handler_)(result_ec, result_n);
2233
2217
  }
2234
2218
  }
2235
2219
 
@@ -2351,40 +2335,21 @@ namespace detail
2351
2335
 
2352
2336
  #if !defined(GENERATING_DOCUMENTATION)
2353
2337
 
2354
- template <typename AsyncReadStream, typename DynamicBuffer_v2,
2355
- typename ReadHandler, typename Allocator>
2356
- struct associated_allocator<
2357
- detail::read_until_delim_op_v2<AsyncReadStream,
2358
- DynamicBuffer_v2, ReadHandler>,
2359
- Allocator>
2360
- {
2361
- typedef typename associated_allocator<ReadHandler, Allocator>::type type;
2362
-
2363
- static type get(
2364
- const detail::read_until_delim_op_v2<AsyncReadStream,
2365
- DynamicBuffer_v2, ReadHandler>& h,
2366
- const Allocator& a = Allocator()) BOOST_ASIO_NOEXCEPT
2367
- {
2368
- return associated_allocator<ReadHandler, Allocator>::get(h.handler_, a);
2369
- }
2370
- };
2371
-
2372
- template <typename AsyncReadStream, typename DynamicBuffer_v2,
2373
- typename ReadHandler, typename Executor>
2374
- struct associated_executor<
2338
+ template <template <typename, typename> class Associator,
2339
+ typename AsyncReadStream, typename DynamicBuffer_v2,
2340
+ typename ReadHandler, typename DefaultCandidate>
2341
+ struct associator<Associator,
2375
2342
  detail::read_until_delim_op_v2<AsyncReadStream,
2376
2343
  DynamicBuffer_v2, ReadHandler>,
2377
- Executor>
2378
- : detail::associated_executor_forwarding_base<ReadHandler, Executor>
2344
+ DefaultCandidate>
2345
+ : Associator<ReadHandler, DefaultCandidate>
2379
2346
  {
2380
- typedef typename associated_executor<ReadHandler, Executor>::type type;
2381
-
2382
- static type get(
2347
+ static typename Associator<ReadHandler, DefaultCandidate>::type get(
2383
2348
  const detail::read_until_delim_op_v2<AsyncReadStream,
2384
2349
  DynamicBuffer_v2, ReadHandler>& h,
2385
- const Executor& ex = Executor()) BOOST_ASIO_NOEXCEPT
2350
+ const DefaultCandidate& c = DefaultCandidate()) BOOST_ASIO_NOEXCEPT
2386
2351
  {
2387
- return associated_executor<ReadHandler, Executor>::get(h.handler_, ex);
2352
+ return Associator<ReadHandler, DefaultCandidate>::get(h.handler_, c);
2388
2353
  }
2389
2354
  };
2390
2355
 
@@ -2412,13 +2377,16 @@ namespace detail
2412
2377
  template <typename AsyncReadStream,
2413
2378
  typename DynamicBuffer_v2, typename ReadHandler>
2414
2379
  class read_until_delim_string_op_v2
2380
+ : public base_from_cancellation_state<ReadHandler>
2415
2381
  {
2416
2382
  public:
2417
2383
  template <typename BufferSequence>
2418
2384
  read_until_delim_string_op_v2(AsyncReadStream& stream,
2419
2385
  BOOST_ASIO_MOVE_ARG(BufferSequence) buffers,
2420
2386
  const std::string& delim, ReadHandler& handler)
2421
- : stream_(stream),
2387
+ : base_from_cancellation_state<ReadHandler>(
2388
+ handler, enable_partial_cancellation()),
2389
+ stream_(stream),
2422
2390
  buffers_(BOOST_ASIO_MOVE_CAST(BufferSequence)(buffers)),
2423
2391
  delim_(delim),
2424
2392
  start_(0),
@@ -2430,7 +2398,8 @@ namespace detail
2430
2398
 
2431
2399
  #if defined(BOOST_ASIO_HAS_MOVE)
2432
2400
  read_until_delim_string_op_v2(const read_until_delim_string_op_v2& other)
2433
- : stream_(other.stream_),
2401
+ : base_from_cancellation_state<ReadHandler>(other),
2402
+ stream_(other.stream_),
2434
2403
  buffers_(other.buffers_),
2435
2404
  delim_(other.delim_),
2436
2405
  start_(other.start_),
@@ -2441,7 +2410,10 @@ namespace detail
2441
2410
  }
2442
2411
 
2443
2412
  read_until_delim_string_op_v2(read_until_delim_string_op_v2&& other)
2444
- : stream_(other.stream_),
2413
+ : base_from_cancellation_state<ReadHandler>(
2414
+ BOOST_ASIO_MOVE_CAST(base_from_cancellation_state<
2415
+ ReadHandler>)(other)),
2416
+ stream_(other.stream_),
2445
2417
  buffers_(BOOST_ASIO_MOVE_CAST(DynamicBuffer_v2)(other.buffers_)),
2446
2418
  delim_(BOOST_ASIO_MOVE_CAST(std::string)(other.delim_)),
2447
2419
  start_(other.start_),
@@ -2452,7 +2424,7 @@ namespace detail
2452
2424
  }
2453
2425
  #endif // defined(BOOST_ASIO_HAS_MOVE)
2454
2426
 
2455
- void operator()(const boost::system::error_code& ec,
2427
+ void operator()(boost::system::error_code ec,
2456
2428
  std::size_t bytes_transferred, int start = 0)
2457
2429
  {
2458
2430
  const std::size_t not_found = (std::numeric_limits<std::size_t>::max)();
@@ -2531,6 +2503,11 @@ namespace detail
2531
2503
  buffers_.shrink(bytes_to_read_ - bytes_transferred);
2532
2504
  if (ec || bytes_transferred == 0)
2533
2505
  break;
2506
+ if (this->cancelled() != cancellation_type::none)
2507
+ {
2508
+ ec = error::operation_aborted;
2509
+ break;
2510
+ }
2534
2511
  }
2535
2512
 
2536
2513
  const boost::system::error_code result_ec =
@@ -2541,7 +2518,7 @@ namespace detail
2541
2518
  (ec || search_position_ == not_found)
2542
2519
  ? 0 : search_position_;
2543
2520
 
2544
- handler_(result_ec, result_n);
2521
+ BOOST_ASIO_MOVE_OR_LVALUE(ReadHandler)(handler_)(result_ec, result_n);
2545
2522
  }
2546
2523
  }
2547
2524
 
@@ -2664,40 +2641,21 @@ namespace detail
2664
2641
 
2665
2642
  #if !defined(GENERATING_DOCUMENTATION)
2666
2643
 
2667
- template <typename AsyncReadStream, typename DynamicBuffer_v2,
2668
- typename ReadHandler, typename Allocator>
2669
- struct associated_allocator<
2670
- detail::read_until_delim_string_op_v2<AsyncReadStream,
2671
- DynamicBuffer_v2, ReadHandler>,
2672
- Allocator>
2673
- {
2674
- typedef typename associated_allocator<ReadHandler, Allocator>::type type;
2675
-
2676
- static type get(
2677
- const detail::read_until_delim_string_op_v2<AsyncReadStream,
2678
- DynamicBuffer_v2, ReadHandler>& h,
2679
- const Allocator& a = Allocator()) BOOST_ASIO_NOEXCEPT
2680
- {
2681
- return associated_allocator<ReadHandler, Allocator>::get(h.handler_, a);
2682
- }
2683
- };
2684
-
2685
- template <typename AsyncReadStream, typename DynamicBuffer_v2,
2686
- typename ReadHandler, typename Executor>
2687
- struct associated_executor<
2644
+ template <template <typename, typename> class Associator,
2645
+ typename AsyncReadStream, typename DynamicBuffer_v2,
2646
+ typename ReadHandler, typename DefaultCandidate>
2647
+ struct associator<Associator,
2688
2648
  detail::read_until_delim_string_op_v2<AsyncReadStream,
2689
2649
  DynamicBuffer_v2, ReadHandler>,
2690
- Executor>
2691
- : detail::associated_executor_forwarding_base<ReadHandler, Executor>
2650
+ DefaultCandidate>
2651
+ : Associator<ReadHandler, DefaultCandidate>
2692
2652
  {
2693
- typedef typename associated_executor<ReadHandler, Executor>::type type;
2694
-
2695
- static type get(
2653
+ static typename Associator<ReadHandler, DefaultCandidate>::type get(
2696
2654
  const detail::read_until_delim_string_op_v2<AsyncReadStream,
2697
2655
  DynamicBuffer_v2, ReadHandler>& h,
2698
- const Executor& ex = Executor()) BOOST_ASIO_NOEXCEPT
2656
+ const DefaultCandidate& c = DefaultCandidate()) BOOST_ASIO_NOEXCEPT
2699
2657
  {
2700
- return associated_executor<ReadHandler, Executor>::get(h.handler_, ex);
2658
+ return Associator<ReadHandler, DefaultCandidate>::get(h.handler_, c);
2701
2659
  }
2702
2660
  };
2703
2661
 
@@ -2731,13 +2689,16 @@ namespace detail
2731
2689
  template <typename AsyncReadStream, typename DynamicBuffer_v2,
2732
2690
  typename RegEx, typename ReadHandler>
2733
2691
  class read_until_expr_op_v2
2692
+ : public base_from_cancellation_state<ReadHandler>
2734
2693
  {
2735
2694
  public:
2736
2695
  template <typename BufferSequence>
2737
2696
  read_until_expr_op_v2(AsyncReadStream& stream,
2738
2697
  BOOST_ASIO_MOVE_ARG(BufferSequence) buffers,
2739
2698
  const boost::regex& expr, ReadHandler& handler)
2740
- : stream_(stream),
2699
+ : base_from_cancellation_state<ReadHandler>(
2700
+ handler, enable_partial_cancellation()),
2701
+ stream_(stream),
2741
2702
  buffers_(BOOST_ASIO_MOVE_CAST(BufferSequence)(buffers)),
2742
2703
  expr_(expr),
2743
2704
  start_(0),
@@ -2749,7 +2710,8 @@ namespace detail
2749
2710
 
2750
2711
  #if defined(BOOST_ASIO_HAS_MOVE)
2751
2712
  read_until_expr_op_v2(const read_until_expr_op_v2& other)
2752
- : stream_(other.stream_),
2713
+ : base_from_cancellation_state<ReadHandler>(other),
2714
+ stream_(other.stream_),
2753
2715
  buffers_(other.buffers_),
2754
2716
  expr_(other.expr_),
2755
2717
  start_(other.start_),
@@ -2760,7 +2722,10 @@ namespace detail
2760
2722
  }
2761
2723
 
2762
2724
  read_until_expr_op_v2(read_until_expr_op_v2&& other)
2763
- : stream_(other.stream_),
2725
+ : base_from_cancellation_state<ReadHandler>(
2726
+ BOOST_ASIO_MOVE_CAST(base_from_cancellation_state<
2727
+ ReadHandler>)(other)),
2728
+ stream_(other.stream_),
2764
2729
  buffers_(BOOST_ASIO_MOVE_CAST(DynamicBuffer_v2)(other.buffers_)),
2765
2730
  expr_(other.expr_),
2766
2731
  start_(other.start_),
@@ -2771,7 +2736,7 @@ namespace detail
2771
2736
  }
2772
2737
  #endif // defined(BOOST_ASIO_HAS_MOVE)
2773
2738
 
2774
- void operator()(const boost::system::error_code& ec,
2739
+ void operator()(boost::system::error_code ec,
2775
2740
  std::size_t bytes_transferred, int start = 0)
2776
2741
  {
2777
2742
  const std::size_t not_found = (std::numeric_limits<std::size_t>::max)();
@@ -2853,6 +2818,11 @@ namespace detail
2853
2818
  buffers_.shrink(bytes_to_read_ - bytes_transferred);
2854
2819
  if (ec || bytes_transferred == 0)
2855
2820
  break;
2821
+ if (this->cancelled() != cancellation_type::none)
2822
+ {
2823
+ ec = error::operation_aborted;
2824
+ break;
2825
+ }
2856
2826
  }
2857
2827
 
2858
2828
  const boost::system::error_code result_ec =
@@ -2863,7 +2833,7 @@ namespace detail
2863
2833
  (ec || search_position_ == not_found)
2864
2834
  ? 0 : search_position_;
2865
2835
 
2866
- handler_(result_ec, result_n);
2836
+ BOOST_ASIO_MOVE_OR_LVALUE(ReadHandler)(handler_)(result_ec, result_n);
2867
2837
  }
2868
2838
  }
2869
2839
 
@@ -2986,40 +2956,21 @@ namespace detail
2986
2956
 
2987
2957
  #if !defined(GENERATING_DOCUMENTATION)
2988
2958
 
2989
- template <typename AsyncReadStream, typename DynamicBuffer_v2,
2990
- typename RegEx, typename ReadHandler, typename Allocator>
2991
- struct associated_allocator<
2992
- detail::read_until_expr_op_v2<AsyncReadStream,
2993
- DynamicBuffer_v2, RegEx, ReadHandler>,
2994
- Allocator>
2995
- {
2996
- typedef typename associated_allocator<ReadHandler, Allocator>::type type;
2997
-
2998
- static type get(
2999
- const detail::read_until_expr_op_v2<AsyncReadStream,
3000
- DynamicBuffer_v2, RegEx, ReadHandler>& h,
3001
- const Allocator& a = Allocator()) BOOST_ASIO_NOEXCEPT
3002
- {
3003
- return associated_allocator<ReadHandler, Allocator>::get(h.handler_, a);
3004
- }
3005
- };
3006
-
3007
- template <typename AsyncReadStream, typename DynamicBuffer_v2,
3008
- typename RegEx, typename ReadHandler, typename Executor>
3009
- struct associated_executor<
2959
+ template <template <typename, typename> class Associator,
2960
+ typename AsyncReadStream, typename DynamicBuffer_v2,
2961
+ typename RegEx, typename ReadHandler, typename DefaultCandidate>
2962
+ struct associator<Associator,
3010
2963
  detail::read_until_expr_op_v2<AsyncReadStream,
3011
2964
  DynamicBuffer_v2, RegEx, ReadHandler>,
3012
- Executor>
3013
- : detail::associated_executor_forwarding_base<ReadHandler, Executor>
2965
+ DefaultCandidate>
2966
+ : Associator<ReadHandler, DefaultCandidate>
3014
2967
  {
3015
- typedef typename associated_executor<ReadHandler, Executor>::type type;
3016
-
3017
- static type get(
2968
+ static typename Associator<ReadHandler, DefaultCandidate>::type get(
3018
2969
  const detail::read_until_expr_op_v2<AsyncReadStream,
3019
2970
  DynamicBuffer_v2, RegEx, ReadHandler>& h,
3020
- const Executor& ex = Executor()) BOOST_ASIO_NOEXCEPT
2971
+ const DefaultCandidate& c = DefaultCandidate()) BOOST_ASIO_NOEXCEPT
3021
2972
  {
3022
- return associated_executor<ReadHandler, Executor>::get(h.handler_, ex);
2973
+ return Associator<ReadHandler, DefaultCandidate>::get(h.handler_, c);
3023
2974
  }
3024
2975
  };
3025
2976
 
@@ -3049,13 +3000,16 @@ namespace detail
3049
3000
  template <typename AsyncReadStream, typename DynamicBuffer_v2,
3050
3001
  typename MatchCondition, typename ReadHandler>
3051
3002
  class read_until_match_op_v2
3003
+ : public base_from_cancellation_state<ReadHandler>
3052
3004
  {
3053
3005
  public:
3054
3006
  template <typename BufferSequence>
3055
3007
  read_until_match_op_v2(AsyncReadStream& stream,
3056
3008
  BOOST_ASIO_MOVE_ARG(BufferSequence) buffers,
3057
3009
  MatchCondition match_condition, ReadHandler& handler)
3058
- : stream_(stream),
3010
+ : base_from_cancellation_state<ReadHandler>(
3011
+ handler, enable_partial_cancellation()),
3012
+ stream_(stream),
3059
3013
  buffers_(BOOST_ASIO_MOVE_CAST(BufferSequence)(buffers)),
3060
3014
  match_condition_(match_condition),
3061
3015
  start_(0),
@@ -3067,7 +3021,8 @@ namespace detail
3067
3021
 
3068
3022
  #if defined(BOOST_ASIO_HAS_MOVE)
3069
3023
  read_until_match_op_v2(const read_until_match_op_v2& other)
3070
- : stream_(other.stream_),
3024
+ : base_from_cancellation_state<ReadHandler>(other),
3025
+ stream_(other.stream_),
3071
3026
  buffers_(other.buffers_),
3072
3027
  match_condition_(other.match_condition_),
3073
3028
  start_(other.start_),
@@ -3078,7 +3033,10 @@ namespace detail
3078
3033
  }
3079
3034
 
3080
3035
  read_until_match_op_v2(read_until_match_op_v2&& other)
3081
- : stream_(other.stream_),
3036
+ : base_from_cancellation_state<ReadHandler>(
3037
+ BOOST_ASIO_MOVE_CAST(base_from_cancellation_state<
3038
+ ReadHandler>)(other)),
3039
+ stream_(other.stream_),
3082
3040
  buffers_(BOOST_ASIO_MOVE_CAST(DynamicBuffer_v2)(other.buffers_)),
3083
3041
  match_condition_(other.match_condition_),
3084
3042
  start_(other.start_),
@@ -3089,7 +3047,7 @@ namespace detail
3089
3047
  }
3090
3048
  #endif // defined(BOOST_ASIO_HAS_MOVE)
3091
3049
 
3092
- void operator()(const boost::system::error_code& ec,
3050
+ void operator()(boost::system::error_code ec,
3093
3051
  std::size_t bytes_transferred, int start = 0)
3094
3052
  {
3095
3053
  const std::size_t not_found = (std::numeric_limits<std::size_t>::max)();
@@ -3167,6 +3125,11 @@ namespace detail
3167
3125
  buffers_.shrink(bytes_to_read_ - bytes_transferred);
3168
3126
  if (ec || bytes_transferred == 0)
3169
3127
  break;
3128
+ if (this->cancelled() != cancellation_type::none)
3129
+ {
3130
+ ec = error::operation_aborted;
3131
+ break;
3132
+ }
3170
3133
  }
3171
3134
 
3172
3135
  const boost::system::error_code result_ec =
@@ -3177,7 +3140,7 @@ namespace detail
3177
3140
  (ec || search_position_ == not_found)
3178
3141
  ? 0 : search_position_;
3179
3142
 
3180
- handler_(result_ec, result_n);
3143
+ BOOST_ASIO_MOVE_OR_LVALUE(ReadHandler)(handler_)(result_ec, result_n);
3181
3144
  }
3182
3145
  }
3183
3146
 
@@ -3303,40 +3266,21 @@ namespace detail
3303
3266
 
3304
3267
  #if !defined(GENERATING_DOCUMENTATION)
3305
3268
 
3306
- template <typename AsyncReadStream, typename DynamicBuffer_v2,
3307
- typename MatchCondition, typename ReadHandler, typename Allocator>
3308
- struct associated_allocator<
3309
- detail::read_until_match_op_v2<AsyncReadStream,
3310
- DynamicBuffer_v2, MatchCondition, ReadHandler>,
3311
- Allocator>
3312
- {
3313
- typedef typename associated_allocator<ReadHandler, Allocator>::type type;
3314
-
3315
- static type get(
3316
- const detail::read_until_match_op_v2<AsyncReadStream,
3317
- DynamicBuffer_v2, MatchCondition, ReadHandler>& h,
3318
- const Allocator& a = Allocator()) BOOST_ASIO_NOEXCEPT
3319
- {
3320
- return associated_allocator<ReadHandler, Allocator>::get(h.handler_, a);
3321
- }
3322
- };
3323
-
3324
- template <typename AsyncReadStream, typename DynamicBuffer_v2,
3325
- typename MatchCondition, typename ReadHandler, typename Executor>
3326
- struct associated_executor<
3269
+ template <template <typename, typename> class Associator,
3270
+ typename AsyncReadStream, typename DynamicBuffer_v2,
3271
+ typename MatchCondition, typename ReadHandler, typename DefaultCandidate>
3272
+ struct associator<Associator,
3327
3273
  detail::read_until_match_op_v2<AsyncReadStream,
3328
3274
  DynamicBuffer_v2, MatchCondition, ReadHandler>,
3329
- Executor>
3330
- : detail::associated_executor_forwarding_base<ReadHandler, Executor>
3275
+ DefaultCandidate>
3276
+ : Associator<ReadHandler, DefaultCandidate>
3331
3277
  {
3332
- typedef typename associated_executor<ReadHandler, Executor>::type type;
3333
-
3334
- static type get(
3278
+ static typename Associator<ReadHandler, DefaultCandidate>::type get(
3335
3279
  const detail::read_until_match_op_v2<AsyncReadStream,
3336
3280
  DynamicBuffer_v2, MatchCondition, ReadHandler>& h,
3337
- const Executor& ex = Executor()) BOOST_ASIO_NOEXCEPT
3281
+ const DefaultCandidate& c = DefaultCandidate()) BOOST_ASIO_NOEXCEPT
3338
3282
  {
3339
- return associated_executor<ReadHandler, Executor>::get(h.handler_, ex);
3283
+ return Associator<ReadHandler, DefaultCandidate>::get(h.handler_, c);
3340
3284
  }
3341
3285
  };
3342
3286