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
@@ -65,7 +65,7 @@ template <typename Handler>
65
65
  auto zero_arg_copyable_handler_test(Handler h, void*)
66
66
  -> decltype(
67
67
  sizeof(Handler(static_cast<const Handler&>(h))),
68
- ((h)()),
68
+ (BOOST_ASIO_MOVE_OR_LVALUE(Handler)(h)()),
69
69
  char(0));
70
70
 
71
71
  template <typename Handler>
@@ -75,7 +75,7 @@ template <typename Handler, typename Arg1>
75
75
  auto one_arg_handler_test(Handler h, Arg1* a1)
76
76
  -> decltype(
77
77
  sizeof(Handler(BOOST_ASIO_MOVE_CAST(Handler)(h))),
78
- ((h)(*a1)),
78
+ (BOOST_ASIO_MOVE_OR_LVALUE(Handler)(h)(*a1)),
79
79
  char(0));
80
80
 
81
81
  template <typename Handler>
@@ -85,7 +85,7 @@ template <typename Handler, typename Arg1, typename Arg2>
85
85
  auto two_arg_handler_test(Handler h, Arg1* a1, Arg2* a2)
86
86
  -> decltype(
87
87
  sizeof(Handler(BOOST_ASIO_MOVE_CAST(Handler)(h))),
88
- ((h)(*a1, *a2)),
88
+ (BOOST_ASIO_MOVE_OR_LVALUE(Handler)(h)(*a1, *a2)),
89
89
  char(0));
90
90
 
91
91
  template <typename Handler>
@@ -95,7 +95,8 @@ template <typename Handler, typename Arg1, typename Arg2>
95
95
  auto two_arg_move_handler_test(Handler h, Arg1* a1, Arg2* a2)
96
96
  -> decltype(
97
97
  sizeof(Handler(BOOST_ASIO_MOVE_CAST(Handler)(h))),
98
- ((h)(*a1, BOOST_ASIO_MOVE_CAST(Arg2)(*a2))),
98
+ (BOOST_ASIO_MOVE_OR_LVALUE(Handler)(h)(
99
+ *a1, BOOST_ASIO_MOVE_CAST(Arg2)(*a2))),
99
100
  char(0));
100
101
 
101
102
  template <typename Handler>
@@ -117,9 +118,11 @@ template <typename T> const T& clvref(T);
117
118
  #if defined(BOOST_ASIO_HAS_MOVE)
118
119
  template <typename T> T rvref();
119
120
  template <typename T> T rvref(T);
121
+ template <typename T> T rorlvref();
120
122
  #else // defined(BOOST_ASIO_HAS_MOVE)
121
123
  template <typename T> const T& rvref();
122
124
  template <typename T> const T& rvref(T);
125
+ template <typename T> T& rorlvref();
123
126
  #endif // defined(BOOST_ASIO_HAS_MOVE)
124
127
  template <typename T> char argbyv(T);
125
128
 
@@ -146,7 +149,7 @@ struct handler_type_requirements
146
149
  boost::asio::detail::clvref< \
147
150
  asio_true_handler_type>())) + \
148
151
  sizeof( \
149
- boost::asio::detail::lvref< \
152
+ boost::asio::detail::rorlvref< \
150
153
  asio_true_handler_type>()(), \
151
154
  char(0))> BOOST_ASIO_UNUSED_TYPEDEF
152
155
 
@@ -171,7 +174,7 @@ struct handler_type_requirements
171
174
  boost::asio::detail::rvref< \
172
175
  asio_true_handler_type>())) + \
173
176
  sizeof( \
174
- boost::asio::detail::lvref< \
177
+ boost::asio::detail::rorlvref< \
175
178
  asio_true_handler_type>()( \
176
179
  boost::asio::detail::lvref<const boost::system::error_code>(), \
177
180
  boost::asio::detail::lvref<const std::size_t>()), \
@@ -198,7 +201,7 @@ struct handler_type_requirements
198
201
  boost::asio::detail::rvref< \
199
202
  asio_true_handler_type>())) + \
200
203
  sizeof( \
201
- boost::asio::detail::lvref< \
204
+ boost::asio::detail::rorlvref< \
202
205
  asio_true_handler_type>()( \
203
206
  boost::asio::detail::lvref<const boost::system::error_code>(), \
204
207
  boost::asio::detail::lvref<const std::size_t>()), \
@@ -224,7 +227,7 @@ struct handler_type_requirements
224
227
  boost::asio::detail::rvref< \
225
228
  asio_true_handler_type>())) + \
226
229
  sizeof( \
227
- boost::asio::detail::lvref< \
230
+ boost::asio::detail::rorlvref< \
228
231
  asio_true_handler_type>()( \
229
232
  boost::asio::detail::lvref<const boost::system::error_code>()), \
230
233
  char(0))> BOOST_ASIO_UNUSED_TYPEDEF
@@ -250,7 +253,7 @@ struct handler_type_requirements
250
253
  boost::asio::detail::rvref< \
251
254
  asio_true_handler_type>())) + \
252
255
  sizeof( \
253
- boost::asio::detail::lvref< \
256
+ boost::asio::detail::rorlvref< \
254
257
  asio_true_handler_type>()( \
255
258
  boost::asio::detail::lvref<const boost::system::error_code>(), \
256
259
  boost::asio::detail::rvref<socket_type>()), \
@@ -276,7 +279,7 @@ struct handler_type_requirements
276
279
  boost::asio::detail::rvref< \
277
280
  asio_true_handler_type>())) + \
278
281
  sizeof( \
279
- boost::asio::detail::lvref< \
282
+ boost::asio::detail::rorlvref< \
280
283
  asio_true_handler_type>()( \
281
284
  boost::asio::detail::lvref<const boost::system::error_code>()), \
282
285
  char(0))> BOOST_ASIO_UNUSED_TYPEDEF
@@ -302,7 +305,7 @@ struct handler_type_requirements
302
305
  boost::asio::detail::rvref< \
303
306
  asio_true_handler_type>())) + \
304
307
  sizeof( \
305
- boost::asio::detail::lvref< \
308
+ boost::asio::detail::rorlvref< \
306
309
  asio_true_handler_type>()( \
307
310
  boost::asio::detail::lvref<const boost::system::error_code>(), \
308
311
  boost::asio::detail::lvref<const endpoint_type>()), \
@@ -329,7 +332,7 @@ struct handler_type_requirements
329
332
  boost::asio::detail::rvref< \
330
333
  asio_true_handler_type>())) + \
331
334
  sizeof( \
332
- boost::asio::detail::lvref< \
335
+ boost::asio::detail::rorlvref< \
333
336
  asio_true_handler_type>()( \
334
337
  boost::asio::detail::lvref<const boost::system::error_code>(), \
335
338
  boost::asio::detail::lvref<const iter_type>()), \
@@ -356,7 +359,7 @@ struct handler_type_requirements
356
359
  boost::asio::detail::rvref< \
357
360
  asio_true_handler_type>())) + \
358
361
  sizeof( \
359
- boost::asio::detail::lvref< \
362
+ boost::asio::detail::rorlvref< \
360
363
  asio_true_handler_type>()( \
361
364
  boost::asio::detail::lvref<const boost::system::error_code>(), \
362
365
  boost::asio::detail::lvref<const range_type>()), \
@@ -382,7 +385,7 @@ struct handler_type_requirements
382
385
  boost::asio::detail::rvref< \
383
386
  asio_true_handler_type>())) + \
384
387
  sizeof( \
385
- boost::asio::detail::lvref< \
388
+ boost::asio::detail::rorlvref< \
386
389
  asio_true_handler_type>()( \
387
390
  boost::asio::detail::lvref<const boost::system::error_code>()), \
388
391
  char(0))> BOOST_ASIO_UNUSED_TYPEDEF
@@ -408,7 +411,7 @@ struct handler_type_requirements
408
411
  boost::asio::detail::rvref< \
409
412
  asio_true_handler_type>())) + \
410
413
  sizeof( \
411
- boost::asio::detail::lvref< \
414
+ boost::asio::detail::rorlvref< \
412
415
  asio_true_handler_type>()( \
413
416
  boost::asio::detail::lvref<const boost::system::error_code>(), \
414
417
  boost::asio::detail::lvref<const int>()), \
@@ -434,7 +437,7 @@ struct handler_type_requirements
434
437
  boost::asio::detail::rvref< \
435
438
  asio_true_handler_type>())) + \
436
439
  sizeof( \
437
- boost::asio::detail::lvref< \
440
+ boost::asio::detail::rorlvref< \
438
441
  asio_true_handler_type>()( \
439
442
  boost::asio::detail::lvref<const boost::system::error_code>()), \
440
443
  char(0))> BOOST_ASIO_UNUSED_TYPEDEF
@@ -460,7 +463,7 @@ struct handler_type_requirements
460
463
  boost::asio::detail::rvref< \
461
464
  asio_true_handler_type>())) + \
462
465
  sizeof( \
463
- boost::asio::detail::lvref< \
466
+ boost::asio::detail::rorlvref< \
464
467
  asio_true_handler_type>()( \
465
468
  boost::asio::detail::lvref<const boost::system::error_code>(), \
466
469
  boost::asio::detail::lvref<const std::size_t>()), \
@@ -486,7 +489,7 @@ struct handler_type_requirements
486
489
  boost::asio::detail::rvref< \
487
490
  asio_true_handler_type>())) + \
488
491
  sizeof( \
489
- boost::asio::detail::lvref< \
492
+ boost::asio::detail::rorlvref< \
490
493
  asio_true_handler_type>()( \
491
494
  boost::asio::detail::lvref<const boost::system::error_code>()), \
492
495
  char(0))> BOOST_ASIO_UNUSED_TYPEDEF
@@ -69,8 +69,8 @@ public:
69
69
  }
70
70
 
71
71
  template <typename OtherExecutor>
72
- handler_work_base(const Executor& ex,
73
- const OtherExecutor&) BOOST_ASIO_NOEXCEPT
72
+ handler_work_base(bool /*base1_owns_work*/, const Executor& ex,
73
+ const OtherExecutor& /*candidate*/) BOOST_ASIO_NOEXCEPT
74
74
  : executor_(boost::asio::prefer(ex, execution::outstanding_work.tracked))
75
75
  {
76
76
  }
@@ -130,7 +130,7 @@ public:
130
130
  executor_.on_work_started();
131
131
  }
132
132
 
133
- handler_work_base(const Executor& ex,
133
+ handler_work_base(bool /*base1_owns_work*/, const Executor& ex,
134
134
  const Executor& candidate) BOOST_ASIO_NOEXCEPT
135
135
  : executor_(ex),
136
136
  owns_work_(ex != candidate)
@@ -140,8 +140,8 @@ public:
140
140
  }
141
141
 
142
142
  template <typename OtherExecutor>
143
- handler_work_base(const Executor& ex,
144
- const OtherExecutor&) BOOST_ASIO_NOEXCEPT
143
+ handler_work_base(bool /*base1_owns_work*/, const Executor& ex,
144
+ const OtherExecutor& /*candidate*/) BOOST_ASIO_NOEXCEPT
145
145
  : executor_(ex),
146
146
  owns_work_(true)
147
147
  {
@@ -234,7 +234,7 @@ public:
234
234
  executor_.on_work_started();
235
235
  }
236
236
 
237
- handler_work_base(const Executor& ex,
237
+ handler_work_base(bool /*base1_owns_work*/, const Executor& ex,
238
238
  const Executor& candidate) BOOST_ASIO_NOEXCEPT
239
239
  : executor_(ex != candidate ? ex : Executor())
240
240
  {
@@ -293,14 +293,15 @@ template <
293
293
  typename T1, typename T2, typename T3, typename T4, typename T5,
294
294
  typename T6, typename T7, typename T8, typename T9,
295
295
  #endif // defined(BOOST_ASIO_HAS_VARIADIC_TEMPLATES)
296
- typename IoContext, typename PolymorphicExecutor>
296
+ typename CandidateExecutor, typename IoContext,
297
+ typename PolymorphicExecutor>
297
298
  class handler_work_base<
298
299
  #if defined(BOOST_ASIO_HAS_VARIADIC_TEMPLATES)
299
300
  execution::any_executor<SupportableProperties...>,
300
301
  #else // defined(BOOST_ASIO_HAS_VARIADIC_TEMPLATES)
301
302
  execution::any_executor<T1, T2, T3, T4, T5, T6, T7, T8, T9>,
302
303
  #endif // defined(BOOST_ASIO_HAS_VARIADIC_TEMPLATES)
303
- void, IoContext, PolymorphicExecutor>
304
+ CandidateExecutor, IoContext, PolymorphicExecutor>
304
305
  {
305
306
  public:
306
307
  typedef
@@ -324,15 +325,18 @@ public:
324
325
  {
325
326
  }
326
327
 
327
- handler_work_base(const executor_type& ex,
328
+ handler_work_base(bool base1_owns_work, const executor_type& ex,
328
329
  const executor_type& candidate) BOOST_ASIO_NOEXCEPT
329
- : executor_(ex != candidate ? ex : executor_type())
330
+ : executor_(
331
+ !base1_owns_work && ex == candidate
332
+ ? executor_type()
333
+ : boost::asio::prefer(ex, execution::outstanding_work.tracked))
330
334
  {
331
335
  }
332
336
 
333
337
  template <typename OtherExecutor>
334
- handler_work_base(const executor_type& ex,
335
- const OtherExecutor&) BOOST_ASIO_NOEXCEPT
338
+ handler_work_base(bool /*base1_owns_work*/, const executor_type& ex,
339
+ const OtherExecutor& /*candidate*/) BOOST_ASIO_NOEXCEPT
336
340
  : executor_(boost::asio::prefer(ex, execution::outstanding_work.tracked))
337
341
  {
338
342
  }
@@ -368,8 +372,11 @@ private:
368
372
 
369
373
  #if !defined(BOOST_ASIO_USE_TS_EXECUTOR_AS_DEFAULT)
370
374
 
371
- template <typename Executor, typename IoContext, typename PolymorphicExecutor>
372
- class handler_work_base<Executor, void, IoContext, PolymorphicExecutor,
375
+ template <typename Executor, typename CandidateExecutor,
376
+ typename IoContext, typename PolymorphicExecutor>
377
+ class handler_work_base<
378
+ Executor, CandidateExecutor,
379
+ IoContext, PolymorphicExecutor,
373
380
  typename enable_if<
374
381
  is_same<
375
382
  Executor,
@@ -393,15 +400,18 @@ public:
393
400
  {
394
401
  }
395
402
 
396
- handler_work_base(const executor_type& ex,
403
+ handler_work_base(bool base1_owns_work, const executor_type& ex,
397
404
  const executor_type& candidate) BOOST_ASIO_NOEXCEPT
398
- : executor_(ex != candidate ? ex : executor_type())
405
+ : executor_(
406
+ !base1_owns_work && ex == candidate
407
+ ? executor_type()
408
+ : boost::asio::prefer(ex, execution::outstanding_work.tracked))
399
409
  {
400
410
  }
401
411
 
402
412
  template <typename OtherExecutor>
403
- handler_work_base(const executor_type& ex,
404
- const OtherExecutor&) BOOST_ASIO_NOEXCEPT
413
+ handler_work_base(bool /*base1_owns_work*/, const executor_type& ex,
414
+ const OtherExecutor& /*candidate*/) BOOST_ASIO_NOEXCEPT
405
415
  : executor_(boost::asio::prefer(ex, execution::outstanding_work.tracked))
406
416
  {
407
417
  }
@@ -450,7 +460,8 @@ public:
450
460
 
451
461
  handler_work(Handler& handler, const IoExecutor& io_ex) BOOST_ASIO_NOEXCEPT
452
462
  : base1_type(0, 0, io_ex),
453
- base2_type(boost::asio::get_associated_executor(handler, io_ex), io_ex)
463
+ base2_type(base1_type::owns_work(),
464
+ boost::asio::get_associated_executor(handler, io_ex), io_ex)
454
465
  {
455
466
  }
456
467
 
@@ -19,12 +19,20 @@
19
19
 
20
20
  #if defined(BOOST_ASIO_HAS_DEV_POLL)
21
21
 
22
+ #include <boost/asio/detail/scheduler.hpp>
23
+
22
24
  #include <boost/asio/detail/push_options.hpp>
23
25
 
24
26
  namespace boost {
25
27
  namespace asio {
26
28
  namespace detail {
27
29
 
30
+ inline void dev_poll_reactor::post_immediate_completion(
31
+ reactor_op* op, bool is_continuation)
32
+ {
33
+ scheduler_.post_immediate_completion(op, is_continuation);
34
+ }
35
+
28
36
  template <typename Time_Traits>
29
37
  void dev_poll_reactor::add_timer_queue(timer_queue<Time_Traits>& queue)
30
38
  {
@@ -21,6 +21,7 @@
21
21
 
22
22
  #include <boost/asio/detail/dev_poll_reactor.hpp>
23
23
  #include <boost/asio/detail/assert.hpp>
24
+ #include <boost/asio/detail/scheduler.hpp>
24
25
  #include <boost/asio/detail/throw_error.hpp>
25
26
  #include <boost/asio/error.hpp>
26
27
 
@@ -202,6 +203,19 @@ void dev_poll_reactor::cancel_ops(socket_type descriptor,
202
203
  cancel_ops_unlocked(descriptor, boost::asio::error::operation_aborted);
203
204
  }
204
205
 
206
+ void dev_poll_reactor::cancel_ops_by_key(socket_type descriptor,
207
+ dev_poll_reactor::per_descriptor_data&,
208
+ int op_type, void* cancellation_key)
209
+ {
210
+ boost::asio::detail::mutex::scoped_lock lock(mutex_);
211
+ op_queue<operation> ops;
212
+ bool need_interrupt = op_queue_[op_type].cancel_operations_by_key(
213
+ descriptor, ops, cancellation_key, boost::asio::error::operation_aborted);
214
+ scheduler_.post_deferred_completions(ops);
215
+ if (need_interrupt)
216
+ interrupter_.interrupt();
217
+ }
218
+
205
219
  void dev_poll_reactor::deregister_descriptor(socket_type descriptor,
206
220
  dev_poll_reactor::per_descriptor_data&, bool)
207
221
  {
@@ -17,12 +17,20 @@
17
17
 
18
18
  #if defined(BOOST_ASIO_HAS_EPOLL)
19
19
 
20
+ #include <boost/asio/detail/scheduler.hpp>
21
+
20
22
  #include <boost/asio/detail/push_options.hpp>
21
23
 
22
24
  namespace boost {
23
25
  namespace asio {
24
26
  namespace detail {
25
27
 
28
+ inline void epoll_reactor::post_immediate_completion(
29
+ operation* op, bool is_continuation)
30
+ {
31
+ scheduler_.post_immediate_completion(op, is_continuation);
32
+ }
33
+
26
34
  template <typename Time_Traits>
27
35
  void epoll_reactor::add_timer_queue(timer_queue<Time_Traits>& queue)
28
36
  {
@@ -67,6 +75,18 @@ std::size_t epoll_reactor::cancel_timer(timer_queue<Time_Traits>& queue,
67
75
  return n;
68
76
  }
69
77
 
78
+ template <typename Time_Traits>
79
+ void epoll_reactor::cancel_timer_by_key(timer_queue<Time_Traits>& queue,
80
+ typename timer_queue<Time_Traits>::per_timer_data* timer,
81
+ void* cancellation_key)
82
+ {
83
+ mutex::scoped_lock lock(mutex_);
84
+ op_queue<operation> ops;
85
+ queue.cancel_timer_by_key(timer, ops, cancellation_key);
86
+ lock.unlock();
87
+ scheduler_.post_deferred_completions(ops);
88
+ }
89
+
70
90
  template <typename Time_Traits>
71
91
  void epoll_reactor::move_timer(timer_queue<Time_Traits>& queue,
72
92
  typename timer_queue<Time_Traits>::per_timer_data& target,
@@ -22,6 +22,7 @@
22
22
  #include <cstddef>
23
23
  #include <sys/epoll.h>
24
24
  #include <boost/asio/detail/epoll_reactor.hpp>
25
+ #include <boost/asio/detail/scheduler.hpp>
25
26
  #include <boost/asio/detail/throw_error.hpp>
26
27
  #include <boost/asio/error.hpp>
27
28
 
@@ -343,6 +344,35 @@ void epoll_reactor::cancel_ops(socket_type,
343
344
  scheduler_.post_deferred_completions(ops);
344
345
  }
345
346
 
347
+ void epoll_reactor::cancel_ops_by_key(socket_type,
348
+ epoll_reactor::per_descriptor_data& descriptor_data,
349
+ int op_type, void* cancellation_key)
350
+ {
351
+ if (!descriptor_data)
352
+ return;
353
+
354
+ mutex::scoped_lock descriptor_lock(descriptor_data->mutex_);
355
+
356
+ op_queue<operation> ops;
357
+ op_queue<reactor_op> other_ops;
358
+ while (reactor_op* op = descriptor_data->op_queue_[op_type].front())
359
+ {
360
+ descriptor_data->op_queue_[op_type].pop();
361
+ if (op->cancellation_key_ == cancellation_key)
362
+ {
363
+ op->ec_ = boost::asio::error::operation_aborted;
364
+ ops.push(op);
365
+ }
366
+ else
367
+ other_ops.push(op);
368
+ }
369
+ descriptor_data->op_queue_[op_type].push(other_ops);
370
+
371
+ descriptor_lock.unlock();
372
+
373
+ scheduler_.post_deferred_completions(ops);
374
+ }
375
+
346
376
  void epoll_reactor::deregister_descriptor(socket_type descriptor,
347
377
  epoll_reactor::per_descriptor_data& descriptor_data, bool closing)
348
378
  {
@@ -20,12 +20,20 @@
20
20
 
21
21
  #if defined(BOOST_ASIO_HAS_KQUEUE)
22
22
 
23
+ #include <boost/asio/detail/scheduler.hpp>
24
+
23
25
  #include <boost/asio/detail/push_options.hpp>
24
26
 
25
27
  namespace boost {
26
28
  namespace asio {
27
29
  namespace detail {
28
30
 
31
+ inline void kqueue_reactor::post_immediate_completion(
32
+ operation* op, bool is_continuation)
33
+ {
34
+ scheduler_.post_immediate_completion(op, is_continuation);
35
+ }
36
+
29
37
  template <typename Time_Traits>
30
38
  void kqueue_reactor::add_timer_queue(timer_queue<Time_Traits>& queue)
31
39
  {
@@ -71,6 +79,18 @@ std::size_t kqueue_reactor::cancel_timer(timer_queue<Time_Traits>& queue,
71
79
  return n;
72
80
  }
73
81
 
82
+ template <typename Time_Traits>
83
+ void kqueue_reactor::cancel_timer_by_key(timer_queue<Time_Traits>& queue,
84
+ typename timer_queue<Time_Traits>::per_timer_data* timer,
85
+ void* cancellation_key)
86
+ {
87
+ mutex::scoped_lock lock(mutex_);
88
+ op_queue<operation> ops;
89
+ queue.cancel_timer_by_key(timer, ops, cancellation_key);
90
+ lock.unlock();
91
+ scheduler_.post_deferred_completions(ops);
92
+ }
93
+
74
94
  template <typename Time_Traits>
75
95
  void kqueue_reactor::move_timer(timer_queue<Time_Traits>& queue,
76
96
  typename timer_queue<Time_Traits>::per_timer_data& target,
@@ -287,6 +287,35 @@ void kqueue_reactor::cancel_ops(socket_type,
287
287
  scheduler_.post_deferred_completions(ops);
288
288
  }
289
289
 
290
+ void kqueue_reactor::cancel_ops_by_key(socket_type,
291
+ kqueue_reactor::per_descriptor_data& descriptor_data,
292
+ int op_type, void* cancellation_key)
293
+ {
294
+ if (!descriptor_data)
295
+ return;
296
+
297
+ mutex::scoped_lock descriptor_lock(descriptor_data->mutex_);
298
+
299
+ op_queue<operation> ops;
300
+ op_queue<reactor_op> other_ops;
301
+ while (reactor_op* op = descriptor_data->op_queue_[op_type].front())
302
+ {
303
+ descriptor_data->op_queue_[op_type].pop();
304
+ if (op->cancellation_key_ == cancellation_key)
305
+ {
306
+ op->ec_ = boost::asio::error::operation_aborted;
307
+ ops.push(op);
308
+ }
309
+ else
310
+ other_ops.push(op);
311
+ }
312
+ descriptor_data->op_queue_[op_type].push(other_ops);
313
+
314
+ descriptor_lock.unlock();
315
+
316
+ scheduler_.post_deferred_completions(ops);
317
+ }
318
+
290
319
  void kqueue_reactor::deregister_descriptor(socket_type descriptor,
291
320
  kqueue_reactor::per_descriptor_data& descriptor_data, bool closing)
292
321
  {
@@ -23,12 +23,24 @@
23
23
  && !defined(BOOST_ASIO_HAS_KQUEUE) \
24
24
  && !defined(BOOST_ASIO_WINDOWS_RUNTIME))
25
25
 
26
+ #if defined(BOOST_ASIO_HAS_IOCP)
27
+ # include <boost/asio/detail/win_iocp_io_context.hpp>
28
+ #else // defined(BOOST_ASIO_HAS_IOCP)
29
+ # include <boost/asio/detail/scheduler.hpp>
30
+ #endif // defined(BOOST_ASIO_HAS_IOCP)
31
+
26
32
  #include <boost/asio/detail/push_options.hpp>
27
33
 
28
34
  namespace boost {
29
35
  namespace asio {
30
36
  namespace detail {
31
37
 
38
+ inline void select_reactor::post_immediate_completion(
39
+ reactor_op* op, bool is_continuation)
40
+ {
41
+ scheduler_.post_immediate_completion(op, is_continuation);
42
+ }
43
+
32
44
  template <typename Time_Traits>
33
45
  void select_reactor::add_timer_queue(timer_queue<Time_Traits>& queue)
34
46
  {
@@ -74,6 +86,18 @@ std::size_t select_reactor::cancel_timer(timer_queue<Time_Traits>& queue,
74
86
  return n;
75
87
  }
76
88
 
89
+ template <typename Time_Traits>
90
+ void select_reactor::cancel_timer_by_key(timer_queue<Time_Traits>& queue,
91
+ typename timer_queue<Time_Traits>::per_timer_data* timer,
92
+ void* cancellation_key)
93
+ {
94
+ mutex::scoped_lock lock(mutex_);
95
+ op_queue<operation> ops;
96
+ queue.cancel_timer_by_key(timer, ops, cancellation_key);
97
+ lock.unlock();
98
+ scheduler_.post_deferred_completions(ops);
99
+ }
100
+
77
101
  template <typename Time_Traits>
78
102
  void select_reactor::move_timer(timer_queue<Time_Traits>& queue,
79
103
  typename timer_queue<Time_Traits>::per_timer_data& target,
@@ -28,6 +28,12 @@
28
28
  #include <boost/asio/detail/signal_blocker.hpp>
29
29
  #include <boost/asio/detail/socket_ops.hpp>
30
30
 
31
+ #if defined(BOOST_ASIO_HAS_IOCP)
32
+ # include <boost/asio/detail/win_iocp_io_context.hpp>
33
+ #else // defined(BOOST_ASIO_HAS_IOCP)
34
+ # include <boost/asio/detail/scheduler.hpp>
35
+ #endif // defined(BOOST_ASIO_HAS_IOCP)
36
+
31
37
  #include <boost/asio/detail/push_options.hpp>
32
38
 
33
39
  namespace boost {
@@ -166,6 +172,19 @@ void select_reactor::cancel_ops(socket_type descriptor,
166
172
  cancel_ops_unlocked(descriptor, boost::asio::error::operation_aborted);
167
173
  }
168
174
 
175
+ void select_reactor::cancel_ops_by_key(socket_type descriptor,
176
+ select_reactor::per_descriptor_data&,
177
+ int op_type, void* cancellation_key)
178
+ {
179
+ boost::asio::detail::mutex::scoped_lock lock(mutex_);
180
+ op_queue<operation> ops;
181
+ bool need_interrupt = op_queue_[op_type].cancel_operations_by_key(
182
+ descriptor, ops, cancellation_key, boost::asio::error::operation_aborted);
183
+ scheduler_.post_deferred_completions(ops);
184
+ if (need_interrupt)
185
+ interrupter_.interrupt();
186
+ }
187
+
169
188
  void select_reactor::deregister_descriptor(socket_type descriptor,
170
189
  select_reactor::per_descriptor_data&, bool)
171
190
  {
@@ -106,9 +106,11 @@ public:
106
106
  if (push_waiting_to_ready(this_->impl_))
107
107
  {
108
108
  recycling_allocator<void> allocator;
109
+ executor_type ex = this_->executor_;
109
110
  execution::execute(
110
111
  boost::asio::prefer(
111
- boost::asio::require(this_->executor_,
112
+ boost::asio::require(
113
+ BOOST_ASIO_MOVE_CAST(executor_type)(ex),
112
114
  execution::blocking.never),
113
115
  execution::allocator(allocator)),
114
116
  BOOST_ASIO_MOVE_CAST(invoker)(*this_));
@@ -76,6 +76,12 @@ std::size_t timer_queue<time_traits<boost::posix_time::ptime> >::cancel_timer(
76
76
  return impl_.cancel_timer(timer, ops, max_cancelled);
77
77
  }
78
78
 
79
+ void timer_queue<time_traits<boost::posix_time::ptime> >::cancel_timer_by_key(
80
+ per_timer_data* timer, op_queue<operation>& ops, void* cancellation_key)
81
+ {
82
+ impl_.cancel_timer_by_key(timer, ops, cancellation_key);
83
+ }
84
+
79
85
  void timer_queue<time_traits<boost::posix_time::ptime> >::move_timer(
80
86
  per_timer_data& target, per_timer_data& source)
81
87
  {
@@ -24,8 +24,8 @@
24
24
  #include <sys/types.h>
25
25
  #include <sys/event.h>
26
26
  #include <sys/time.h>
27
+ #include <boost/asio/detail/conditionally_enabled_mutex.hpp>
27
28
  #include <boost/asio/detail/limits.hpp>
28
- #include <boost/asio/detail/mutex.hpp>
29
29
  #include <boost/asio/detail/object_pool.hpp>
30
30
  #include <boost/asio/detail/op_queue.hpp>
31
31
  #include <boost/asio/detail/reactor_op.hpp>
@@ -115,10 +115,7 @@ public:
115
115
  per_descriptor_data& source_descriptor_data);
116
116
 
117
117
  // Post a reactor operation for immediate completion.
118
- void post_immediate_completion(reactor_op* op, bool is_continuation)
119
- {
120
- scheduler_.post_immediate_completion(op, is_continuation);
121
- }
118
+ void post_immediate_completion(operation* op, bool is_continuation);
122
119
 
123
120
  // Start a new operation. The reactor operation will be performed when the
124
121
  // given descriptor is flagged as ready, or an error has occurred.
@@ -132,6 +129,13 @@ public:
132
129
  BOOST_ASIO_DECL void cancel_ops(socket_type descriptor,
133
130
  per_descriptor_data& descriptor_data);
134
131
 
132
+ // Cancel all operations associated with the given descriptor and key. The
133
+ // handlers associated with the descriptor will be invoked with the
134
+ // operation_aborted error.
135
+ BOOST_ASIO_DECL void cancel_ops_by_key(socket_type descriptor,
136
+ per_descriptor_data& descriptor_data,
137
+ int op_type, void* cancellation_key);
138
+
135
139
  // Cancel any operations that are running against the descriptor and remove
136
140
  // its registration from the reactor. The reactor resources associated with
137
141
  // the descriptor must be released by calling cleanup_descriptor_data.
@@ -171,6 +175,12 @@ public:
171
175
  typename timer_queue<Time_Traits>::per_timer_data& timer,
172
176
  std::size_t max_cancelled = (std::numeric_limits<std::size_t>::max)());
173
177
 
178
+ // Cancel the timer operations associated with the given key.
179
+ template <typename Time_Traits>
180
+ void cancel_timer_by_key(timer_queue<Time_Traits>& queue,
181
+ typename timer_queue<Time_Traits>::per_timer_data* timer,
182
+ void* cancellation_key);
183
+
174
184
  // Move the timer operations associated with the given timer.
175
185
  template <typename Time_Traits>
176
186
  void move_timer(timer_queue<Time_Traits>& queue,