passenger 6.0.15 → 6.0.17

Sign up to get free protection for your applications and to get access to all the features.
Files changed (292) hide show
  1. checksums.yaml +4 -4
  2. data/CHANGELOG +46 -2
  3. data/build/integration_tests.rb +6 -6
  4. data/build/ruby_tests.rb +1 -1
  5. data/build/test_basics.rb +0 -1
  6. data/src/agent/Core/Config.h +1 -1
  7. data/src/agent/Core/Controller/Config.h +1 -1
  8. data/src/agent/Core/SpawningKit/PipeWatcher.h +18 -3
  9. data/src/agent/Watchdog/Config.h +1 -1
  10. data/src/cxx_supportlib/Constants.h +1 -1
  11. data/src/cxx_supportlib/vendor-modified/boost/align/aligned_alloc.hpp +1 -1
  12. data/src/cxx_supportlib/vendor-modified/boost/array.hpp +1 -1
  13. data/src/cxx_supportlib/vendor-modified/boost/asio/any_completion_executor.hpp +344 -0
  14. data/src/cxx_supportlib/vendor-modified/boost/asio/any_completion_handler.hpp +686 -0
  15. data/src/cxx_supportlib/vendor-modified/boost/asio/any_io_executor.hpp +56 -0
  16. data/src/cxx_supportlib/vendor-modified/boost/asio/associated_allocator.hpp +81 -25
  17. data/src/cxx_supportlib/vendor-modified/boost/asio/associated_cancellation_slot.hpp +68 -8
  18. data/src/cxx_supportlib/vendor-modified/boost/asio/associated_executor.hpp +46 -11
  19. data/src/cxx_supportlib/vendor-modified/boost/asio/basic_datagram_socket.hpp +4 -4
  20. data/src/cxx_supportlib/vendor-modified/boost/asio/basic_deadline_timer.hpp +2 -2
  21. data/src/cxx_supportlib/vendor-modified/boost/asio/basic_file.hpp +1 -1
  22. data/src/cxx_supportlib/vendor-modified/boost/asio/basic_random_access_file.hpp +2 -2
  23. data/src/cxx_supportlib/vendor-modified/boost/asio/basic_raw_socket.hpp +4 -4
  24. data/src/cxx_supportlib/vendor-modified/boost/asio/basic_readable_pipe.hpp +2 -2
  25. data/src/cxx_supportlib/vendor-modified/boost/asio/basic_seq_packet_socket.hpp +2 -2
  26. data/src/cxx_supportlib/vendor-modified/boost/asio/basic_serial_port.hpp +3 -3
  27. data/src/cxx_supportlib/vendor-modified/boost/asio/basic_signal_set.hpp +2 -2
  28. data/src/cxx_supportlib/vendor-modified/boost/asio/basic_socket.hpp +3 -3
  29. data/src/cxx_supportlib/vendor-modified/boost/asio/basic_socket_acceptor.hpp +4 -4
  30. data/src/cxx_supportlib/vendor-modified/boost/asio/basic_stream_file.hpp +2 -2
  31. data/src/cxx_supportlib/vendor-modified/boost/asio/basic_stream_socket.hpp +2 -2
  32. data/src/cxx_supportlib/vendor-modified/boost/asio/basic_waitable_timer.hpp +2 -2
  33. data/src/cxx_supportlib/vendor-modified/boost/asio/basic_writable_pipe.hpp +2 -2
  34. data/src/cxx_supportlib/vendor-modified/boost/asio/bind_allocator.hpp +13 -3
  35. data/src/cxx_supportlib/vendor-modified/boost/asio/bind_cancellation_slot.hpp +14 -3
  36. data/src/cxx_supportlib/vendor-modified/boost/asio/bind_executor.hpp +13 -3
  37. data/src/cxx_supportlib/vendor-modified/boost/asio/compose.hpp +30 -305
  38. data/src/cxx_supportlib/vendor-modified/boost/asio/consign.hpp +90 -0
  39. data/src/cxx_supportlib/vendor-modified/boost/asio/defer.hpp +17 -18
  40. data/src/cxx_supportlib/vendor-modified/boost/asio/detail/bind_handler.hpp +98 -24
  41. data/src/cxx_supportlib/vendor-modified/boost/asio/detail/composed_work.hpp +330 -0
  42. data/src/cxx_supportlib/vendor-modified/boost/asio/detail/config.hpp +81 -15
  43. data/src/cxx_supportlib/vendor-modified/boost/asio/detail/handler_alloc_helpers.hpp +4 -4
  44. data/src/cxx_supportlib/vendor-modified/boost/asio/detail/handler_work.hpp +19 -11
  45. data/src/cxx_supportlib/vendor-modified/boost/asio/detail/impl/descriptor_ops.ipp +37 -0
  46. data/src/cxx_supportlib/vendor-modified/boost/asio/detail/impl/handler_tracking.ipp +3 -1
  47. data/src/cxx_supportlib/vendor-modified/boost/asio/detail/impl/select_reactor.ipp +1 -1
  48. data/src/cxx_supportlib/vendor-modified/boost/asio/detail/impl/socket_ops.ipp +10 -2
  49. data/src/cxx_supportlib/vendor-modified/boost/asio/detail/impl/strand_executor_service.hpp +14 -1
  50. data/src/cxx_supportlib/vendor-modified/boost/asio/detail/memory.hpp +18 -0
  51. data/src/cxx_supportlib/vendor-modified/boost/asio/detail/utility.hpp +1 -2
  52. data/src/cxx_supportlib/vendor-modified/boost/asio/detail/work_dispatcher.hpp +7 -3
  53. data/src/cxx_supportlib/vendor-modified/boost/asio/dispatch.hpp +4 -14
  54. data/src/cxx_supportlib/vendor-modified/boost/asio/execution/allocator.hpp +22 -3
  55. data/src/cxx_supportlib/vendor-modified/boost/asio/execution/any_executor.hpp +447 -142
  56. data/src/cxx_supportlib/vendor-modified/boost/asio/execution/blocking.hpp +57 -8
  57. data/src/cxx_supportlib/vendor-modified/boost/asio/execution/blocking_adaptation.hpp +51 -6
  58. data/src/cxx_supportlib/vendor-modified/boost/asio/execution/bulk_execute.hpp +5 -0
  59. data/src/cxx_supportlib/vendor-modified/boost/asio/execution/bulk_guarantee.hpp +41 -4
  60. data/src/cxx_supportlib/vendor-modified/boost/asio/execution/connect.hpp +5 -0
  61. data/src/cxx_supportlib/vendor-modified/boost/asio/execution/context.hpp +13 -2
  62. data/src/cxx_supportlib/vendor-modified/boost/asio/execution/context_as.hpp +13 -2
  63. data/src/cxx_supportlib/vendor-modified/boost/asio/execution/detail/as_operation.hpp +4 -0
  64. data/src/cxx_supportlib/vendor-modified/boost/asio/execution/execute.hpp +9 -2
  65. data/src/cxx_supportlib/vendor-modified/boost/asio/execution/executor.hpp +11 -1
  66. data/src/cxx_supportlib/vendor-modified/boost/asio/execution/mapping.hpp +52 -8
  67. data/src/cxx_supportlib/vendor-modified/boost/asio/execution/occupancy.hpp +13 -2
  68. data/src/cxx_supportlib/vendor-modified/boost/asio/execution/operation_state.hpp +5 -0
  69. data/src/cxx_supportlib/vendor-modified/boost/asio/execution/outstanding_work.hpp +39 -6
  70. data/src/cxx_supportlib/vendor-modified/boost/asio/execution/receiver.hpp +5 -0
  71. data/src/cxx_supportlib/vendor-modified/boost/asio/execution/relationship.hpp +39 -6
  72. data/src/cxx_supportlib/vendor-modified/boost/asio/execution/schedule.hpp +5 -0
  73. data/src/cxx_supportlib/vendor-modified/boost/asio/execution/scheduler.hpp +5 -0
  74. data/src/cxx_supportlib/vendor-modified/boost/asio/execution/sender.hpp +5 -0
  75. data/src/cxx_supportlib/vendor-modified/boost/asio/execution/set_done.hpp +5 -0
  76. data/src/cxx_supportlib/vendor-modified/boost/asio/execution/set_error.hpp +5 -0
  77. data/src/cxx_supportlib/vendor-modified/boost/asio/execution/set_value.hpp +5 -0
  78. data/src/cxx_supportlib/vendor-modified/boost/asio/execution/start.hpp +5 -0
  79. data/src/cxx_supportlib/vendor-modified/boost/asio/execution/submit.hpp +5 -0
  80. data/src/cxx_supportlib/vendor-modified/boost/asio/executor_work_guard.hpp +6 -9
  81. data/src/cxx_supportlib/vendor-modified/boost/asio/experimental/basic_channel.hpp +3 -3
  82. data/src/cxx_supportlib/vendor-modified/boost/asio/experimental/basic_concurrent_channel.hpp +3 -3
  83. data/src/cxx_supportlib/vendor-modified/boost/asio/experimental/channel_traits.hpp +70 -0
  84. data/src/cxx_supportlib/vendor-modified/boost/asio/experimental/co_composed.hpp +146 -0
  85. data/src/cxx_supportlib/vendor-modified/boost/asio/experimental/coro.hpp +35 -5
  86. data/src/cxx_supportlib/vendor-modified/boost/asio/experimental/detail/channel_handler.hpp +13 -3
  87. data/src/cxx_supportlib/vendor-modified/boost/asio/experimental/detail/channel_operation.hpp +7 -0
  88. data/src/cxx_supportlib/vendor-modified/boost/asio/experimental/detail/channel_service.hpp +180 -0
  89. data/src/cxx_supportlib/vendor-modified/boost/asio/experimental/detail/coro_completion_handler.hpp +171 -0
  90. data/src/cxx_supportlib/vendor-modified/boost/asio/experimental/detail/coro_promise_allocator.hpp +89 -66
  91. data/src/cxx_supportlib/vendor-modified/boost/asio/experimental/detail/partial_promise.hpp +66 -45
  92. data/src/cxx_supportlib/vendor-modified/boost/asio/experimental/impl/as_single.hpp +13 -3
  93. data/src/cxx_supportlib/vendor-modified/boost/asio/experimental/impl/co_composed.hpp +1134 -0
  94. data/src/cxx_supportlib/vendor-modified/boost/asio/experimental/impl/coro.hpp +130 -106
  95. data/src/cxx_supportlib/vendor-modified/boost/asio/experimental/impl/parallel_group.hpp +377 -3
  96. data/src/cxx_supportlib/vendor-modified/boost/asio/experimental/impl/promise.hpp +168 -29
  97. data/src/cxx_supportlib/vendor-modified/boost/asio/experimental/impl/use_coro.hpp +149 -203
  98. data/src/cxx_supportlib/vendor-modified/boost/asio/experimental/impl/use_promise.hpp +68 -0
  99. data/src/cxx_supportlib/vendor-modified/boost/asio/experimental/parallel_group.hpp +256 -0
  100. data/src/cxx_supportlib/vendor-modified/boost/asio/experimental/promise.hpp +76 -80
  101. data/src/cxx_supportlib/vendor-modified/boost/asio/experimental/use_coro.hpp +40 -14
  102. data/src/cxx_supportlib/vendor-modified/boost/asio/experimental/use_promise.hpp +113 -0
  103. data/src/cxx_supportlib/vendor-modified/boost/asio/impl/any_completion_executor.ipp +132 -0
  104. data/src/cxx_supportlib/vendor-modified/boost/asio/impl/any_io_executor.ipp +12 -0
  105. data/src/cxx_supportlib/vendor-modified/boost/asio/impl/append.hpp +12 -3
  106. data/src/cxx_supportlib/vendor-modified/boost/asio/impl/as_tuple.hpp +12 -3
  107. data/src/cxx_supportlib/vendor-modified/boost/asio/impl/buffered_read_stream.hpp +25 -6
  108. data/src/cxx_supportlib/vendor-modified/boost/asio/impl/buffered_write_stream.hpp +25 -6
  109. data/src/cxx_supportlib/vendor-modified/boost/asio/impl/co_spawn.hpp +34 -45
  110. data/src/cxx_supportlib/vendor-modified/boost/asio/impl/connect.hpp +28 -6
  111. data/src/cxx_supportlib/vendor-modified/boost/asio/impl/consign.hpp +204 -0
  112. data/src/cxx_supportlib/vendor-modified/boost/asio/impl/defer.hpp +33 -1
  113. data/src/cxx_supportlib/vendor-modified/boost/asio/impl/deferred.hpp +13 -3
  114. data/src/cxx_supportlib/vendor-modified/boost/asio/impl/dispatch.hpp +21 -9
  115. data/src/cxx_supportlib/vendor-modified/boost/asio/impl/handler_alloc_hook.ipp +1 -1
  116. data/src/cxx_supportlib/vendor-modified/boost/asio/impl/post.hpp +33 -1
  117. data/src/cxx_supportlib/vendor-modified/boost/asio/impl/prepend.hpp +12 -3
  118. data/src/cxx_supportlib/vendor-modified/boost/asio/impl/read.hpp +40 -9
  119. data/src/cxx_supportlib/vendor-modified/boost/asio/impl/read_at.hpp +27 -6
  120. data/src/cxx_supportlib/vendor-modified/boost/asio/impl/read_until.hpp +104 -24
  121. data/src/cxx_supportlib/vendor-modified/boost/asio/impl/redirect_error.hpp +12 -3
  122. data/src/cxx_supportlib/vendor-modified/boost/asio/impl/spawn.hpp +70 -15
  123. data/src/cxx_supportlib/vendor-modified/boost/asio/impl/src.hpp +1 -0
  124. data/src/cxx_supportlib/vendor-modified/boost/asio/impl/use_future.hpp +25 -0
  125. data/src/cxx_supportlib/vendor-modified/boost/asio/impl/write.hpp +38 -30
  126. data/src/cxx_supportlib/vendor-modified/boost/asio/impl/write_at.hpp +27 -6
  127. data/src/cxx_supportlib/vendor-modified/boost/asio/io_context.hpp +0 -13
  128. data/src/cxx_supportlib/vendor-modified/boost/asio/ip/impl/network_v4.ipp +3 -1
  129. data/src/cxx_supportlib/vendor-modified/boost/asio/ip/impl/network_v6.ipp +3 -1
  130. data/src/cxx_supportlib/vendor-modified/boost/asio/posix/basic_descriptor.hpp +2 -2
  131. data/src/cxx_supportlib/vendor-modified/boost/asio/posix/basic_stream_descriptor.hpp +2 -2
  132. data/src/cxx_supportlib/vendor-modified/boost/asio/post.hpp +17 -18
  133. data/src/cxx_supportlib/vendor-modified/boost/asio/spawn.hpp +3 -1
  134. data/src/cxx_supportlib/vendor-modified/boost/asio/ssl/detail/io.hpp +13 -3
  135. data/src/cxx_supportlib/vendor-modified/boost/asio/strand.hpp +11 -7
  136. data/src/cxx_supportlib/vendor-modified/boost/asio/system_executor.hpp +0 -13
  137. data/src/cxx_supportlib/vendor-modified/boost/asio/thread_pool.hpp +23 -18
  138. data/src/cxx_supportlib/vendor-modified/boost/asio/version.hpp +1 -1
  139. data/src/cxx_supportlib/vendor-modified/boost/asio/windows/basic_object_handle.hpp +2 -2
  140. data/src/cxx_supportlib/vendor-modified/boost/asio/windows/basic_overlapped_handle.hpp +1 -1
  141. data/src/cxx_supportlib/vendor-modified/boost/asio/windows/basic_random_access_handle.hpp +2 -2
  142. data/src/cxx_supportlib/vendor-modified/boost/asio/windows/basic_stream_handle.hpp +2 -2
  143. data/src/cxx_supportlib/vendor-modified/boost/asio.hpp +4 -0
  144. data/src/cxx_supportlib/vendor-modified/boost/bind/bind.hpp +1 -1
  145. data/src/cxx_supportlib/vendor-modified/boost/chrono/config.hpp +1 -0
  146. data/src/cxx_supportlib/vendor-modified/boost/chrono/detail/inlined/mac/chrono.hpp +4 -4
  147. data/src/cxx_supportlib/vendor-modified/boost/chrono/detail/scan_keyword.hpp +4 -2
  148. data/src/cxx_supportlib/vendor-modified/boost/chrono/duration.hpp +2 -2
  149. data/src/cxx_supportlib/vendor-modified/boost/chrono/io/duration_io.hpp +3 -3
  150. data/src/cxx_supportlib/vendor-modified/boost/chrono/io/duration_put.hpp +5 -5
  151. data/src/cxx_supportlib/vendor-modified/boost/chrono/io/duration_units.hpp +2 -2
  152. data/src/cxx_supportlib/vendor-modified/boost/chrono/io/time_point_io.hpp +2 -2
  153. data/src/cxx_supportlib/vendor-modified/boost/chrono/io/utility/ios_base_state_ptr.hpp +7 -7
  154. data/src/cxx_supportlib/vendor-modified/boost/chrono/time_point.hpp +1 -1
  155. data/src/cxx_supportlib/vendor-modified/boost/circular_buffer/details.hpp +5 -1
  156. data/src/cxx_supportlib/vendor-modified/boost/config/compiler/clang.hpp +10 -3
  157. data/src/cxx_supportlib/vendor-modified/boost/config/compiler/clang_version.hpp +9 -3
  158. data/src/cxx_supportlib/vendor-modified/boost/config/compiler/gcc.hpp +9 -3
  159. data/src/cxx_supportlib/vendor-modified/boost/config/compiler/sunpro_cc.hpp +6 -0
  160. data/src/cxx_supportlib/vendor-modified/boost/config/compiler/visualc.hpp +8 -0
  161. data/src/cxx_supportlib/vendor-modified/boost/config/compiler/xlcpp.hpp +4 -0
  162. data/src/cxx_supportlib/vendor-modified/boost/config/detail/suffix.hpp +33 -0
  163. data/src/cxx_supportlib/vendor-modified/boost/config/header_deprecated.hpp +1 -1
  164. data/src/cxx_supportlib/vendor-modified/boost/config/stdlib/libcpp.hpp +9 -0
  165. data/src/cxx_supportlib/vendor-modified/boost/config/stdlib/libstdcpp3.hpp +4 -2
  166. data/src/cxx_supportlib/vendor-modified/boost/container/allocator.hpp +1 -1
  167. data/src/cxx_supportlib/vendor-modified/boost/container/container_fwd.hpp +29 -0
  168. data/src/cxx_supportlib/vendor-modified/boost/container/deque.hpp +13 -13
  169. data/src/cxx_supportlib/vendor-modified/boost/container/detail/advanced_insert_int.hpp +80 -95
  170. data/src/cxx_supportlib/vendor-modified/boost/container/detail/config_begin.hpp +10 -0
  171. data/src/cxx_supportlib/vendor-modified/boost/container/detail/config_end.hpp +3 -0
  172. data/src/cxx_supportlib/vendor-modified/boost/container/detail/copy_move_algo.hpp +738 -34
  173. data/src/cxx_supportlib/vendor-modified/boost/container/detail/destroyers.hpp +38 -10
  174. data/src/cxx_supportlib/vendor-modified/boost/container/detail/flat_tree.hpp +1 -0
  175. data/src/cxx_supportlib/vendor-modified/boost/container/detail/iterator.hpp +2 -0
  176. data/src/cxx_supportlib/vendor-modified/boost/container/detail/workaround.hpp +3 -4
  177. data/src/cxx_supportlib/vendor-modified/boost/container/devector.hpp +1150 -1213
  178. data/src/cxx_supportlib/vendor-modified/boost/container/node_allocator.hpp +1 -1
  179. data/src/cxx_supportlib/vendor-modified/boost/container/options.hpp +104 -12
  180. data/src/cxx_supportlib/vendor-modified/boost/container/stable_vector.hpp +1 -0
  181. data/src/cxx_supportlib/vendor-modified/boost/container/string.hpp +11 -1
  182. data/src/cxx_supportlib/vendor-modified/boost/container/vector.hpp +31 -331
  183. data/src/cxx_supportlib/vendor-modified/boost/container_hash/detail/hash_mix.hpp +113 -0
  184. data/src/cxx_supportlib/vendor-modified/boost/container_hash/detail/hash_range.hpp +173 -0
  185. data/src/cxx_supportlib/vendor-modified/boost/container_hash/detail/hash_tuple.hpp +133 -0
  186. data/src/cxx_supportlib/vendor-modified/boost/container_hash/hash.hpp +461 -566
  187. data/src/cxx_supportlib/vendor-modified/boost/container_hash/hash_fwd.hpp +24 -24
  188. data/src/cxx_supportlib/vendor-modified/boost/container_hash/is_contiguous_range.hpp +91 -0
  189. data/src/cxx_supportlib/vendor-modified/boost/container_hash/is_described_class.hpp +38 -0
  190. data/src/cxx_supportlib/vendor-modified/boost/container_hash/is_range.hpp +73 -0
  191. data/src/cxx_supportlib/vendor-modified/boost/container_hash/is_unordered_range.hpp +39 -0
  192. data/src/cxx_supportlib/vendor-modified/boost/core/bit.hpp +32 -4
  193. data/src/cxx_supportlib/vendor-modified/boost/core/detail/string_view.hpp +16 -0
  194. data/src/cxx_supportlib/vendor-modified/boost/core/empty_value.hpp +16 -16
  195. data/src/cxx_supportlib/vendor-modified/boost/core/fclose_deleter.hpp +46 -0
  196. data/src/cxx_supportlib/vendor-modified/boost/date_time/date.hpp +1 -1
  197. data/src/cxx_supportlib/vendor-modified/boost/date_time/gregorian/formatters.hpp +3 -3
  198. data/src/cxx_supportlib/vendor-modified/boost/date_time/gregorian/formatters_limited.hpp +3 -3
  199. data/src/cxx_supportlib/vendor-modified/boost/date_time/gregorian/greg_date.hpp +12 -13
  200. data/src/cxx_supportlib/vendor-modified/boost/date_time/gregorian/parsers.hpp +2 -2
  201. data/src/cxx_supportlib/vendor-modified/boost/date_time/gregorian_calendar.ipp +2 -2
  202. data/src/cxx_supportlib/vendor-modified/boost/date_time/iso_format.hpp +13 -13
  203. data/src/cxx_supportlib/vendor-modified/boost/date_time/local_time/local_date_time.hpp +2 -2
  204. data/src/cxx_supportlib/vendor-modified/boost/date_time/posix_time/time_formatters.hpp +4 -4
  205. data/src/cxx_supportlib/vendor-modified/boost/date_time/posix_time/time_formatters_limited.hpp +2 -2
  206. data/src/cxx_supportlib/vendor-modified/boost/date_time/special_values_parser.hpp +1 -1
  207. data/src/cxx_supportlib/vendor-modified/boost/date_time/time_facet.hpp +1 -1
  208. data/src/cxx_supportlib/vendor-modified/boost/date_time/time_parsing.hpp +2 -2
  209. data/src/cxx_supportlib/vendor-modified/boost/describe/bases.hpp +50 -0
  210. data/src/cxx_supportlib/vendor-modified/boost/describe/detail/config.hpp +40 -0
  211. data/src/cxx_supportlib/vendor-modified/boost/describe/detail/cx_streq.hpp +30 -0
  212. data/src/cxx_supportlib/vendor-modified/boost/describe/detail/void_t.hpp +32 -0
  213. data/src/cxx_supportlib/vendor-modified/boost/describe/members.hpp +159 -0
  214. data/src/cxx_supportlib/vendor-modified/boost/describe/modifiers.hpp +33 -0
  215. data/src/cxx_supportlib/vendor-modified/boost/intrusive/avltree_algorithms.hpp +9 -9
  216. data/src/cxx_supportlib/vendor-modified/boost/intrusive/bstree_algorithms.hpp +45 -45
  217. data/src/cxx_supportlib/vendor-modified/boost/intrusive/detail/any_node_and_algorithms.hpp +8 -8
  218. data/src/cxx_supportlib/vendor-modified/boost/intrusive/detail/bstree_algorithms_base.hpp +37 -38
  219. data/src/cxx_supportlib/vendor-modified/boost/intrusive/detail/iterator.hpp +16 -0
  220. data/src/cxx_supportlib/vendor-modified/boost/intrusive/detail/workaround.hpp +1 -1
  221. data/src/cxx_supportlib/vendor-modified/boost/intrusive/hashtable.hpp +145 -90
  222. data/src/cxx_supportlib/vendor-modified/boost/intrusive/pack_options.hpp +2 -0
  223. data/src/cxx_supportlib/vendor-modified/boost/intrusive/rbtree_algorithms.hpp +7 -7
  224. data/src/cxx_supportlib/vendor-modified/boost/intrusive/sgtree_algorithms.hpp +5 -5
  225. data/src/cxx_supportlib/vendor-modified/boost/intrusive/splaytree_algorithms.hpp +11 -9
  226. data/src/cxx_supportlib/vendor-modified/boost/intrusive/treap_algorithms.hpp +7 -7
  227. data/src/cxx_supportlib/vendor-modified/boost/iterator/iterator_facade.hpp +106 -25
  228. data/src/cxx_supportlib/vendor-modified/boost/lexical_cast/detail/converter_lexical_streams.hpp +1 -1
  229. data/src/cxx_supportlib/vendor-modified/boost/lexical_cast/detail/converter_numeric.hpp +8 -5
  230. data/src/cxx_supportlib/vendor-modified/boost/lexical_cast/detail/lcast_unsigned_converters.hpp +1 -1
  231. data/src/cxx_supportlib/vendor-modified/boost/move/algo/detail/adaptive_sort_merge.hpp +4 -2
  232. data/src/cxx_supportlib/vendor-modified/boost/move/algo/detail/pdqsort.hpp +2 -1
  233. data/src/cxx_supportlib/vendor-modified/boost/move/detail/type_traits.hpp +8 -4
  234. data/src/cxx_supportlib/vendor-modified/boost/mp11/bind.hpp +111 -0
  235. data/src/cxx_supportlib/vendor-modified/boost/mp11/version.hpp +1 -1
  236. data/src/cxx_supportlib/vendor-modified/boost/numeric/conversion/detail/int_float_mixture.hpp +5 -5
  237. data/src/cxx_supportlib/vendor-modified/boost/numeric/conversion/detail/sign_mixture.hpp +5 -5
  238. data/src/cxx_supportlib/vendor-modified/boost/numeric/conversion/detail/udt_builtin_mixture.hpp +5 -5
  239. data/src/cxx_supportlib/vendor-modified/boost/preprocessor/variadic/has_opt.hpp +6 -2
  240. data/src/cxx_supportlib/vendor-modified/boost/smart_ptr/detail/spinlock_gcc_atomic.hpp +11 -2
  241. data/src/cxx_supportlib/vendor-modified/boost/smart_ptr/intrusive_ptr.hpp +1 -1
  242. data/src/cxx_supportlib/vendor-modified/boost/system/detail/config.hpp +7 -1
  243. data/src/cxx_supportlib/vendor-modified/boost/system/detail/error_category.hpp +2 -2
  244. data/src/cxx_supportlib/vendor-modified/boost/system/detail/error_category_impl.hpp +10 -1
  245. data/src/cxx_supportlib/vendor-modified/boost/system/detail/error_code.hpp +38 -43
  246. data/src/cxx_supportlib/vendor-modified/boost/system/detail/error_condition.hpp +52 -0
  247. data/src/cxx_supportlib/vendor-modified/boost/throw_exception.hpp +1 -1
  248. data/src/cxx_supportlib/vendor-modified/boost/type_traits/detail/is_function_ptr_helper.hpp +27 -27
  249. data/src/cxx_supportlib/vendor-modified/boost/type_traits/detail/is_mem_fun_pointer_impl.hpp +27 -27
  250. data/src/cxx_supportlib/vendor-modified/boost/type_traits/intrinsics.hpp +22 -8
  251. data/src/cxx_supportlib/vendor-modified/boost/unordered/detail/fca.hpp +37 -7
  252. data/src/cxx_supportlib/vendor-modified/boost/unordered/detail/foa.hpp +1921 -0
  253. data/src/cxx_supportlib/vendor-modified/boost/unordered/detail/implementation.hpp +66 -82
  254. data/src/cxx_supportlib/vendor-modified/boost/unordered/detail/prime_fmod.hpp +6 -0
  255. data/src/cxx_supportlib/vendor-modified/boost/unordered/detail/type_traits.hpp +109 -0
  256. data/src/cxx_supportlib/vendor-modified/boost/unordered/detail/xmx.hpp +75 -0
  257. data/src/cxx_supportlib/vendor-modified/boost/unordered/hash_traits.hpp +45 -0
  258. data/src/cxx_supportlib/vendor-modified/boost/unordered/unordered_flat_map.hpp +732 -0
  259. data/src/cxx_supportlib/vendor-modified/boost/unordered/unordered_flat_map_fwd.hpp +49 -0
  260. data/src/cxx_supportlib/vendor-modified/boost/unordered/unordered_flat_set.hpp +586 -0
  261. data/src/cxx_supportlib/vendor-modified/boost/unordered/unordered_flat_set_fwd.hpp +49 -0
  262. data/src/cxx_supportlib/vendor-modified/boost/unordered/unordered_map.hpp +166 -66
  263. data/src/cxx_supportlib/vendor-modified/boost/unordered/unordered_set.hpp +145 -28
  264. data/src/cxx_supportlib/vendor-modified/boost/version.hpp +2 -2
  265. data/src/cxx_supportlib/vendor-modified/jsoncpp/json-forwards.h +143 -261
  266. data/src/cxx_supportlib/vendor-modified/jsoncpp/json.h +763 -947
  267. data/src/cxx_supportlib/vendor-modified/jsoncpp/jsoncpp.cpp +1477 -1487
  268. data/src/cxx_supportlib/vendor-modified/websocketpp/websocketpp/common/md5.hpp +1 -1
  269. data/src/ruby_native_extension/extconf.rb +1 -1
  270. data/src/ruby_supportlib/phusion_passenger/packaging.rb +1 -0
  271. data/src/ruby_supportlib/phusion_passenger/platform_info/apache.rb +3 -2
  272. data/src/ruby_supportlib/phusion_passenger/platform_info/binary_compatibility.rb +1 -1
  273. data/src/ruby_supportlib/phusion_passenger/platform_info/operating_system.rb +5 -5
  274. data/src/ruby_supportlib/phusion_passenger.rb +5 -5
  275. metadata +36 -19
  276. data/src/cxx_supportlib/vendor-modified/boost/align/align.hpp +0 -19
  277. data/src/cxx_supportlib/vendor-modified/boost/align/alignment_of.hpp +0 -54
  278. data/src/cxx_supportlib/vendor-modified/boost/align/alignment_of_forward.hpp +0 -20
  279. data/src/cxx_supportlib/vendor-modified/boost/align/detail/align_cxx11.hpp +0 -21
  280. data/src/cxx_supportlib/vendor-modified/boost/align/detail/aligned_alloc.hpp +0 -52
  281. data/src/cxx_supportlib/vendor-modified/boost/align/detail/alignment_of.hpp +0 -31
  282. data/src/cxx_supportlib/vendor-modified/boost/align/detail/alignment_of_cxx11.hpp +0 -23
  283. data/src/cxx_supportlib/vendor-modified/boost/align/detail/element_type.hpp +0 -91
  284. data/src/cxx_supportlib/vendor-modified/boost/align/detail/integral_constant.hpp +0 -53
  285. data/src/cxx_supportlib/vendor-modified/boost/align/detail/min_size.hpp +0 -26
  286. data/src/cxx_supportlib/vendor-modified/boost/asio/experimental/detail/completion_handler_erasure.hpp +0 -196
  287. data/src/cxx_supportlib/vendor-modified/boost/asio/impl/compose.hpp +0 -709
  288. data/src/cxx_supportlib/vendor-modified/boost/container_hash/detail/float_functions.hpp +0 -336
  289. data/src/cxx_supportlib/vendor-modified/boost/container_hash/detail/hash_float.hpp +0 -271
  290. data/src/cxx_supportlib/vendor-modified/boost/container_hash/detail/limits.hpp +0 -62
  291. data/src/cxx_supportlib/vendor-modified/boost/container_hash/extensions.hpp +0 -361
  292. data/src/cxx_supportlib/vendor-modified/boost/detail/container_fwd.hpp +0 -157
@@ -19,6 +19,7 @@
19
19
  #include <new>
20
20
  #include <typeinfo>
21
21
  #include <boost/asio/detail/assert.hpp>
22
+ #include <boost/asio/detail/atomic_count.hpp>
22
23
  #include <boost/asio/detail/cstddef.hpp>
23
24
  #include <boost/asio/detail/executor_function.hpp>
24
25
  #include <boost/asio/detail/memory.hpp>
@@ -65,10 +66,25 @@ public:
65
66
  template <class... OtherSupportableProperties>
66
67
  any_executor(any_executor<OtherSupportableProperties...> e);
67
68
 
69
+ /// Construct to point to the same target as another any_executor.
70
+ template <class... OtherSupportableProperties>
71
+ any_executor(std::nothrow_t,
72
+ any_executor<OtherSupportableProperties...> e) noexcept;
73
+
74
+ /// Construct to point to the same target as another any_executor.
75
+ any_executor(std::nothrow_t, const any_executor& e) noexcept;
76
+
77
+ /// Construct to point to the same target as another any_executor.
78
+ any_executor(std::nothrow_t, any_executor&& e) noexcept;
79
+
68
80
  /// Construct a polymorphic wrapper for the specified executor.
69
81
  template <typename Executor>
70
82
  any_executor(Executor e);
71
83
 
84
+ /// Construct a polymorphic wrapper for the specified executor.
85
+ template <typename Executor>
86
+ any_executor(std::nothrow_t, Executor e) noexcept;
87
+
72
88
  /// Assignment operator.
73
89
  any_executor& operator=(const any_executor& e) noexcept;
74
90
 
@@ -127,13 +143,6 @@ public:
127
143
 
128
144
  /// Execute the function on the target executor.
129
145
  /**
130
- * Do not call this function directly. It is intended for use with the
131
- * execution::execute customisation point.
132
- *
133
- * For example:
134
- * @code execution::any_executor<> ex = ...;
135
- * execution::execute(ex, my_function_object); @endcode
136
- *
137
146
  * Throws boost::asio::bad_executor if the polymorphic wrapper has no target.
138
147
  */
139
148
  template <typename Function>
@@ -487,13 +496,103 @@ struct is_valid_target_executor<int, Props> : false_type
487
496
  {
488
497
  };
489
498
 
499
+ class shared_target_executor
500
+ {
501
+ public:
502
+ template <typename E>
503
+ shared_target_executor(BOOST_ASIO_MOVE_ARG(E) e,
504
+ typename decay<E>::type*& target)
505
+ {
506
+ impl<typename decay<E>::type>* i =
507
+ new impl<typename decay<E>::type>(BOOST_ASIO_MOVE_CAST(E)(e));
508
+ target = &i->ex_;
509
+ impl_ = i;
510
+ }
511
+
512
+ template <typename E>
513
+ shared_target_executor(std::nothrow_t, BOOST_ASIO_MOVE_ARG(E) e,
514
+ typename decay<E>::type*& target) BOOST_ASIO_NOEXCEPT
515
+ {
516
+ impl<typename decay<E>::type>* i =
517
+ new (std::nothrow) impl<typename decay<E>::type>(
518
+ BOOST_ASIO_MOVE_CAST(E)(e));
519
+ target = i ? &i->ex_ : 0;
520
+ impl_ = i;
521
+ }
522
+
523
+ shared_target_executor(
524
+ const shared_target_executor& other) BOOST_ASIO_NOEXCEPT
525
+ : impl_(other.impl_)
526
+ {
527
+ if (impl_)
528
+ boost::asio::detail::ref_count_up(impl_->ref_count_);
529
+ }
530
+
531
+ shared_target_executor& operator=(
532
+ const shared_target_executor& other) BOOST_ASIO_NOEXCEPT
533
+ {
534
+ impl_ = other.impl_;
535
+ if (impl_)
536
+ boost::asio::detail::ref_count_up(impl_->ref_count_);
537
+ return *this;
538
+ }
539
+
540
+ #if defined(BOOST_ASIO_HAS_MOVE)
541
+ shared_target_executor(
542
+ shared_target_executor&& other) BOOST_ASIO_NOEXCEPT
543
+ : impl_(other.impl_)
544
+ {
545
+ other.impl_ = 0;
546
+ }
547
+
548
+ shared_target_executor& operator=(
549
+ shared_target_executor&& other) BOOST_ASIO_NOEXCEPT
550
+ {
551
+ impl_ = other.impl_;
552
+ other.impl_ = 0;
553
+ return *this;
554
+ }
555
+ #endif // defined(BOOST_ASIO_HAS_MOVE)
556
+
557
+ ~shared_target_executor()
558
+ {
559
+ if (impl_)
560
+ if (boost::asio::detail::ref_count_down(impl_->ref_count_))
561
+ delete impl_;
562
+ }
563
+
564
+ void* get() const BOOST_ASIO_NOEXCEPT
565
+ {
566
+ return impl_ ? impl_->get() : 0;
567
+ }
568
+
569
+ private:
570
+ struct impl_base
571
+ {
572
+ impl_base() : ref_count_(1) {}
573
+ virtual ~impl_base() {}
574
+ virtual void* get() = 0;
575
+ boost::asio::detail::atomic_count ref_count_;
576
+ };
577
+
578
+ template <typename Executor>
579
+ struct impl : impl_base
580
+ {
581
+ impl(Executor ex) : ex_(BOOST_ASIO_MOVE_CAST(Executor)(ex)) {}
582
+ virtual void* get() { return &ex_; }
583
+ Executor ex_;
584
+ };
585
+
586
+ impl_base* impl_;
587
+ };
588
+
490
589
  class any_executor_base
491
590
  {
492
591
  public:
493
592
  any_executor_base() BOOST_ASIO_NOEXCEPT
494
- : object_fns_(object_fns_table<void>()),
593
+ : object_fns_(0),
495
594
  target_(0),
496
- target_fns_(target_fns_table<void>())
595
+ target_fns_(0)
497
596
  {
498
597
  }
499
598
 
@@ -511,29 +610,75 @@ public:
511
610
  >());
512
611
  }
513
612
 
613
+ template <BOOST_ASIO_EXECUTION_EXECUTOR Executor>
614
+ any_executor_base(std::nothrow_t, Executor ex, false_type) BOOST_ASIO_NOEXCEPT
615
+ : target_fns_(target_fns_table<Executor>(
616
+ any_executor_base::query_blocking(ex,
617
+ can_query<const Executor&, const execution::blocking_t&>())
618
+ == execution::blocking.always))
619
+ {
620
+ any_executor_base::construct_object(std::nothrow, ex,
621
+ integral_constant<bool,
622
+ sizeof(Executor) <= sizeof(object_type)
623
+ && alignment_of<Executor>::value <= alignment_of<object_type>::value
624
+ >());
625
+ if (target_ == 0)
626
+ {
627
+ object_fns_ = 0;
628
+ target_fns_ = 0;
629
+ }
630
+ }
631
+
514
632
  template <BOOST_ASIO_EXECUTION_EXECUTOR Executor>
515
633
  any_executor_base(Executor other, true_type)
516
- : object_fns_(object_fns_table<boost::asio::detail::shared_ptr<void> >()),
634
+ : object_fns_(object_fns_table<shared_target_executor>()),
517
635
  target_fns_(other.target_fns_)
518
636
  {
519
- boost::asio::detail::shared_ptr<Executor> p =
520
- boost::asio::detail::make_shared<Executor>(
521
- BOOST_ASIO_MOVE_CAST(Executor)(other));
637
+ Executor* p = 0;
638
+ new (&object_) shared_target_executor(
639
+ BOOST_ASIO_MOVE_CAST(Executor)(other), p);
522
640
  target_ = p->template target<void>();
523
- new (&object_) boost::asio::detail::shared_ptr<void>(
524
- BOOST_ASIO_MOVE_CAST(boost::asio::detail::shared_ptr<Executor>)(p));
525
641
  }
526
642
 
527
- any_executor_base(const any_executor_base& other) BOOST_ASIO_NOEXCEPT
528
- : object_fns_(other.object_fns_),
643
+ template <BOOST_ASIO_EXECUTION_EXECUTOR Executor>
644
+ any_executor_base(std::nothrow_t,
645
+ Executor other, true_type) BOOST_ASIO_NOEXCEPT
646
+ : object_fns_(object_fns_table<shared_target_executor>()),
529
647
  target_fns_(other.target_fns_)
530
648
  {
531
- object_fns_->copy(*this, other);
649
+ Executor* p = 0;
650
+ new (&object_) shared_target_executor(
651
+ std::nothrow, BOOST_ASIO_MOVE_CAST(Executor)(other), p);
652
+ if (p)
653
+ target_ = p->template target<void>();
654
+ else
655
+ {
656
+ target_ = 0;
657
+ object_fns_ = 0;
658
+ target_fns_ = 0;
659
+ }
660
+ }
661
+
662
+ any_executor_base(const any_executor_base& other) BOOST_ASIO_NOEXCEPT
663
+ {
664
+ if (!!other)
665
+ {
666
+ object_fns_ = other.object_fns_;
667
+ target_fns_ = other.target_fns_;
668
+ object_fns_->copy(*this, other);
669
+ }
670
+ else
671
+ {
672
+ object_fns_ = 0;
673
+ target_ = 0;
674
+ target_fns_ = 0;
675
+ }
532
676
  }
533
677
 
534
678
  ~any_executor_base() BOOST_ASIO_NOEXCEPT
535
679
  {
536
- object_fns_->destroy(*this);
680
+ if (!!*this)
681
+ object_fns_->destroy(*this);
537
682
  }
538
683
 
539
684
  any_executor_base& operator=(
@@ -541,33 +686,53 @@ public:
541
686
  {
542
687
  if (this != &other)
543
688
  {
544
- object_fns_->destroy(*this);
545
- object_fns_ = other.object_fns_;
546
- target_fns_ = other.target_fns_;
547
- object_fns_->copy(*this, other);
689
+ if (!!*this)
690
+ object_fns_->destroy(*this);
691
+ if (!!other)
692
+ {
693
+ object_fns_ = other.object_fns_;
694
+ target_fns_ = other.target_fns_;
695
+ object_fns_->copy(*this, other);
696
+ }
697
+ else
698
+ {
699
+ object_fns_ = 0;
700
+ target_ = 0;
701
+ target_fns_ = 0;
702
+ }
548
703
  }
549
704
  return *this;
550
705
  }
551
706
 
552
707
  any_executor_base& operator=(nullptr_t) BOOST_ASIO_NOEXCEPT
553
708
  {
554
- object_fns_->destroy(*this);
709
+ if (target_)
710
+ object_fns_->destroy(*this);
555
711
  target_ = 0;
556
- object_fns_ = object_fns_table<void>();
557
- target_fns_ = target_fns_table<void>();
712
+ object_fns_ = 0;
713
+ target_fns_ = 0;
558
714
  return *this;
559
715
  }
560
716
 
561
717
  #if defined(BOOST_ASIO_HAS_MOVE)
562
718
 
563
719
  any_executor_base(any_executor_base&& other) BOOST_ASIO_NOEXCEPT
564
- : object_fns_(other.object_fns_),
565
- target_fns_(other.target_fns_)
566
720
  {
567
- other.object_fns_ = object_fns_table<void>();
568
- other.target_fns_ = target_fns_table<void>();
569
- object_fns_->move(*this, other);
570
- other.target_ = 0;
721
+ if (other.target_)
722
+ {
723
+ object_fns_ = other.object_fns_;
724
+ target_fns_ = other.target_fns_;
725
+ other.object_fns_ = 0;
726
+ other.target_fns_ = 0;
727
+ object_fns_->move(*this, other);
728
+ other.target_ = 0;
729
+ }
730
+ else
731
+ {
732
+ object_fns_ = 0;
733
+ target_ = 0;
734
+ target_fns_ = 0;
735
+ }
571
736
  }
572
737
 
573
738
  any_executor_base& operator=(
@@ -575,13 +740,23 @@ public:
575
740
  {
576
741
  if (this != &other)
577
742
  {
578
- object_fns_->destroy(*this);
579
- object_fns_ = other.object_fns_;
580
- other.object_fns_ = object_fns_table<void>();
581
- target_fns_ = other.target_fns_;
582
- other.target_fns_ = target_fns_table<void>();
583
- object_fns_->move(*this, other);
584
- other.target_ = 0;
743
+ if (!!*this)
744
+ object_fns_->destroy(*this);
745
+ if (!!other)
746
+ {
747
+ object_fns_ = other.object_fns_;
748
+ target_fns_ = other.target_fns_;
749
+ other.object_fns_ = 0;
750
+ other.target_fns_ = 0;
751
+ object_fns_->move(*this, other);
752
+ other.target_ = 0;
753
+ }
754
+ else
755
+ {
756
+ object_fns_ = 0;
757
+ target_ = 0;
758
+ target_fns_ = 0;
759
+ }
585
760
  }
586
761
  return *this;
587
762
  }
@@ -601,38 +776,53 @@ public:
601
776
  template <typename F>
602
777
  void execute(BOOST_ASIO_MOVE_ARG(F) f) const
603
778
  {
604
- if (target_fns_->blocking_execute != 0)
779
+ if (target_)
605
780
  {
606
- boost::asio::detail::non_const_lvalue<F> f2(f);
607
- target_fns_->blocking_execute(*this, function_view(f2.value));
781
+ if (target_fns_->blocking_execute != 0)
782
+ {
783
+ boost::asio::detail::non_const_lvalue<F> f2(f);
784
+ target_fns_->blocking_execute(*this, function_view(f2.value));
785
+ }
786
+ else
787
+ {
788
+ target_fns_->execute(*this,
789
+ function(BOOST_ASIO_MOVE_CAST(F)(f), std::allocator<void>()));
790
+ }
608
791
  }
609
792
  else
610
793
  {
611
- target_fns_->execute(*this,
612
- function(BOOST_ASIO_MOVE_CAST(F)(f), std::allocator<void>()));
794
+ bad_executor ex;
795
+ boost::asio::detail::throw_exception(ex);
613
796
  }
614
797
  }
615
798
 
616
799
  template <typename Executor>
617
800
  Executor* target()
618
801
  {
619
- return static_cast<Executor*>(target_);
802
+ return target_ && (is_same<Executor, void>::value
803
+ || target_fns_->target_type() == target_type_ex<Executor>())
804
+ ? static_cast<Executor*>(target_) : 0;
620
805
  }
621
806
 
622
807
  template <typename Executor>
623
808
  const Executor* target() const
624
809
  {
625
- return static_cast<Executor*>(target_);
810
+ return target_ && (is_same<Executor, void>::value
811
+ || target_fns_->target_type() == target_type_ex<Executor>())
812
+ ? static_cast<const Executor*>(target_) : 0;
626
813
  }
627
814
 
628
815
  #if !defined(BOOST_ASIO_NO_TYPEID)
629
816
  const std::type_info& target_type() const
817
+ {
818
+ return target_ ? target_fns_->target_type() : typeid(void);
819
+ }
630
820
  #else // !defined(BOOST_ASIO_NO_TYPEID)
631
821
  const void* target_type() const
632
- #endif // !defined(BOOST_ASIO_NO_TYPEID)
633
822
  {
634
- return target_fns_->target_type();
823
+ return target_ ? target_fns_->target_type() : 0;
635
824
  }
825
+ #endif // !defined(BOOST_ASIO_NO_TYPEID)
636
826
 
637
827
  struct unspecified_bool_type_t {};
638
828
  typedef void (*unspecified_bool_type)(unspecified_bool_type_t);
@@ -682,57 +872,22 @@ protected:
682
872
  const void* (*target)(const any_executor_base&);
683
873
  };
684
874
 
685
- static void destroy_void(any_executor_base&)
686
- {
687
- }
688
-
689
- static void copy_void(any_executor_base& ex1, const any_executor_base&)
690
- {
691
- ex1.target_ = 0;
692
- }
693
-
694
- static void move_void(any_executor_base& ex1, any_executor_base&)
695
- {
696
- ex1.target_ = 0;
697
- }
698
-
699
- static const void* target_void(const any_executor_base&)
700
- {
701
- return 0;
702
- }
703
-
704
- template <typename Obj>
705
- static const object_fns* object_fns_table(
706
- typename enable_if<
707
- is_same<Obj, void>::value
708
- >::type* = 0)
709
- {
710
- static const object_fns fns =
711
- {
712
- &any_executor_base::destroy_void,
713
- &any_executor_base::copy_void,
714
- &any_executor_base::move_void,
715
- &any_executor_base::target_void
716
- };
717
- return &fns;
718
- }
719
-
720
875
  static void destroy_shared(any_executor_base& ex)
721
876
  {
722
- typedef boost::asio::detail::shared_ptr<void> type;
877
+ typedef shared_target_executor type;
723
878
  ex.object<type>().~type();
724
879
  }
725
880
 
726
881
  static void copy_shared(any_executor_base& ex1, const any_executor_base& ex2)
727
882
  {
728
- typedef boost::asio::detail::shared_ptr<void> type;
883
+ typedef shared_target_executor type;
729
884
  new (&ex1.object_) type(ex2.object<type>());
730
885
  ex1.target_ = ex2.target_;
731
886
  }
732
887
 
733
888
  static void move_shared(any_executor_base& ex1, any_executor_base& ex2)
734
889
  {
735
- typedef boost::asio::detail::shared_ptr<void> type;
890
+ typedef shared_target_executor type;
736
891
  new (&ex1.object_) type(BOOST_ASIO_MOVE_CAST(type)(ex2.object<type>()));
737
892
  ex1.target_ = ex2.target_;
738
893
  ex2.object<type>().~type();
@@ -740,14 +895,14 @@ protected:
740
895
 
741
896
  static const void* target_shared(const any_executor_base& ex)
742
897
  {
743
- typedef boost::asio::detail::shared_ptr<void> type;
898
+ typedef shared_target_executor type;
744
899
  return ex.object<type>().get();
745
900
  }
746
901
 
747
902
  template <typename Obj>
748
903
  static const object_fns* object_fns_table(
749
904
  typename enable_if<
750
- is_same<Obj, boost::asio::detail::shared_ptr<void> >::value
905
+ is_same<Obj, shared_target_executor>::value
751
906
  >::type* = 0)
752
907
  {
753
908
  static const object_fns fns =
@@ -791,7 +946,7 @@ protected:
791
946
  static const object_fns* object_fns_table(
792
947
  typename enable_if<
793
948
  !is_same<Obj, void>::value
794
- && !is_same<Obj, boost::asio::detail::shared_ptr<void> >::value
949
+ && !is_same<Obj, shared_target_executor>::value
795
950
  >::type* = 0)
796
951
  {
797
952
  static const object_fns fns =
@@ -819,52 +974,6 @@ protected:
819
974
  void (*blocking_execute)(const any_executor_base&, function_view);
820
975
  };
821
976
 
822
- #if !defined(BOOST_ASIO_NO_TYPEID)
823
- static const std::type_info& target_type_void()
824
- {
825
- return typeid(void);
826
- }
827
- #else // !defined(BOOST_ASIO_NO_TYPEID)
828
- static const void* target_type_void()
829
- {
830
- return 0;
831
- }
832
- #endif // !defined(BOOST_ASIO_NO_TYPEID)
833
-
834
- static bool equal_void(const any_executor_base&, const any_executor_base&)
835
- {
836
- return true;
837
- }
838
-
839
- static void execute_void(const any_executor_base&,
840
- BOOST_ASIO_MOVE_ARG(function))
841
- {
842
- bad_executor ex;
843
- boost::asio::detail::throw_exception(ex);
844
- }
845
-
846
- static void blocking_execute_void(const any_executor_base&, function_view)
847
- {
848
- bad_executor ex;
849
- boost::asio::detail::throw_exception(ex);
850
- }
851
-
852
- template <typename Ex>
853
- static const target_fns* target_fns_table(
854
- typename enable_if<
855
- is_same<Ex, void>::value
856
- >::type* = 0)
857
- {
858
- static const target_fns fns =
859
- {
860
- &any_executor_base::target_type_void,
861
- &any_executor_base::equal_void,
862
- &any_executor_base::execute_void,
863
- &any_executor_base::blocking_execute_void
864
- };
865
- return &fns;
866
- }
867
-
868
977
  #if !defined(BOOST_ASIO_NO_TYPEID)
869
978
  template <typename Ex>
870
979
  static const std::type_info& target_type_ex()
@@ -891,13 +1000,21 @@ protected:
891
1000
  static void execute_ex(const any_executor_base& ex,
892
1001
  BOOST_ASIO_MOVE_ARG(function) f)
893
1002
  {
1003
+ #if defined(BOOST_ASIO_NO_DEPRECATED)
1004
+ ex.target<Ex>()->execute(BOOST_ASIO_MOVE_CAST(function)(f));
1005
+ #else // defined(BOOST_ASIO_NO_DEPRECATED)
894
1006
  execution::execute(*ex.target<Ex>(), BOOST_ASIO_MOVE_CAST(function)(f));
1007
+ #endif // defined(BOOST_ASIO_NO_DEPRECATED)
895
1008
  }
896
1009
 
897
1010
  template <typename Ex>
898
1011
  static void blocking_execute_ex(const any_executor_base& ex, function_view f)
899
1012
  {
1013
+ #if defined(BOOST_ASIO_NO_DEPRECATED)
1014
+ ex.target<Ex>()->execute(f);
1015
+ #else // defined(BOOST_ASIO_NO_DEPRECATED)
900
1016
  execution::execute(*ex.target<Ex>(), f);
1017
+ #endif // defined(BOOST_ASIO_NO_DEPRECATED)
901
1018
  }
902
1019
 
903
1020
  template <typename Ex>
@@ -1155,13 +1272,30 @@ private:
1155
1272
  template <typename Executor>
1156
1273
  void construct_object(Executor& ex, false_type)
1157
1274
  {
1158
- object_fns_ = object_fns_table<boost::asio::detail::shared_ptr<void> >();
1159
- boost::asio::detail::shared_ptr<Executor> p =
1160
- boost::asio::detail::make_shared<Executor>(
1161
- BOOST_ASIO_MOVE_CAST(Executor)(ex));
1162
- target_ = p.get();
1163
- new (&object_) boost::asio::detail::shared_ptr<void>(
1164
- BOOST_ASIO_MOVE_CAST(boost::asio::detail::shared_ptr<Executor>)(p));
1275
+ object_fns_ = object_fns_table<shared_target_executor>();
1276
+ Executor* p = 0;
1277
+ new (&object_) shared_target_executor(
1278
+ BOOST_ASIO_MOVE_CAST(Executor)(ex), p);
1279
+ target_ = p;
1280
+ }
1281
+
1282
+ template <typename Executor>
1283
+ void construct_object(std::nothrow_t,
1284
+ Executor& ex, true_type) BOOST_ASIO_NOEXCEPT
1285
+ {
1286
+ object_fns_ = object_fns_table<Executor>();
1287
+ target_ = new (&object_) Executor(BOOST_ASIO_MOVE_CAST(Executor)(ex));
1288
+ }
1289
+
1290
+ template <typename Executor>
1291
+ void construct_object(std::nothrow_t,
1292
+ Executor& ex, false_type) BOOST_ASIO_NOEXCEPT
1293
+ {
1294
+ object_fns_ = object_fns_table<shared_target_executor>();
1295
+ Executor* p = 0;
1296
+ new (&object_) shared_target_executor(
1297
+ std::nothrow, BOOST_ASIO_MOVE_CAST(Executor)(ex), p);
1298
+ target_ = p;
1165
1299
  }
1166
1300
 
1167
1301
  /*private:*/public:
@@ -1228,6 +1362,21 @@ public:
1228
1362
  {
1229
1363
  }
1230
1364
 
1365
+ template <typename Executor>
1366
+ any_executor(std::nothrow_t, Executor ex,
1367
+ typename enable_if<
1368
+ conditional<
1369
+ !is_same<Executor, any_executor>::value
1370
+ && !is_base_of<detail::any_executor_base, Executor>::value,
1371
+ is_executor<Executor>,
1372
+ false_type
1373
+ >::type::value
1374
+ >::type* = 0) BOOST_ASIO_NOEXCEPT
1375
+ : detail::any_executor_base(std::nothrow,
1376
+ BOOST_ASIO_MOVE_CAST(Executor)(ex), false_type())
1377
+ {
1378
+ }
1379
+
1231
1380
  #if defined(BOOST_ASIO_HAS_VARIADIC_TEMPLATES)
1232
1381
 
1233
1382
  template <typename... OtherSupportableProperties>
@@ -1237,6 +1386,14 @@ public:
1237
1386
  {
1238
1387
  }
1239
1388
 
1389
+ template <typename... OtherSupportableProperties>
1390
+ any_executor(std::nothrow_t,
1391
+ any_executor<OtherSupportableProperties...> other) BOOST_ASIO_NOEXCEPT
1392
+ : detail::any_executor_base(
1393
+ static_cast<const detail::any_executor_base&>(other))
1394
+ {
1395
+ }
1396
+
1240
1397
  #else // defined(BOOST_ASIO_HAS_VARIADIC_TEMPLATES)
1241
1398
 
1242
1399
  template <typename U0, typename U1, typename U2, typename U3,
@@ -1247,6 +1404,15 @@ public:
1247
1404
  {
1248
1405
  }
1249
1406
 
1407
+ template <typename U0, typename U1, typename U2, typename U3,
1408
+ typename U4, typename U5, typename U6, typename U7>
1409
+ any_executor(std::nothrow_t,
1410
+ any_executor<U0, U1, U2, U3, U4, U5, U6, U7> other) BOOST_ASIO_NOEXCEPT
1411
+ : detail::any_executor_base(
1412
+ static_cast<const detail::any_executor_base&>(other))
1413
+ {
1414
+ }
1415
+
1250
1416
  #endif // defined(BOOST_ASIO_HAS_VARIADIC_TEMPLATES)
1251
1417
 
1252
1418
  any_executor(const any_executor& other) BOOST_ASIO_NOEXCEPT
@@ -1255,6 +1421,12 @@ public:
1255
1421
  {
1256
1422
  }
1257
1423
 
1424
+ any_executor(std::nothrow_t, const any_executor& other) BOOST_ASIO_NOEXCEPT
1425
+ : detail::any_executor_base(
1426
+ static_cast<const detail::any_executor_base&>(other))
1427
+ {
1428
+ }
1429
+
1258
1430
  any_executor& operator=(const any_executor& other) BOOST_ASIO_NOEXCEPT
1259
1431
  {
1260
1432
  if (this != &other)
@@ -1280,6 +1452,13 @@ public:
1280
1452
  {
1281
1453
  }
1282
1454
 
1455
+ any_executor(std::nothrow_t, any_executor&& other) BOOST_ASIO_NOEXCEPT
1456
+ : detail::any_executor_base(
1457
+ static_cast<any_executor_base&&>(
1458
+ static_cast<any_executor_base&>(other)))
1459
+ {
1460
+ }
1461
+
1283
1462
  any_executor& operator=(any_executor&& other) BOOST_ASIO_NOEXCEPT
1284
1463
  {
1285
1464
  if (this != &other)
@@ -1414,6 +1593,25 @@ public:
1414
1593
  {
1415
1594
  }
1416
1595
 
1596
+ template <typename Executor>
1597
+ any_executor(std::nothrow_t, Executor ex,
1598
+ typename enable_if<
1599
+ conditional<
1600
+ !is_same<Executor, any_executor>::value
1601
+ && !is_base_of<detail::any_executor_base, Executor>::value,
1602
+ detail::is_valid_target_executor<
1603
+ Executor, void(SupportableProperties...)>,
1604
+ false_type
1605
+ >::type::value
1606
+ >::type* = 0) BOOST_ASIO_NOEXCEPT
1607
+ : detail::any_executor_base(std::nothrow,
1608
+ BOOST_ASIO_MOVE_CAST(Executor)(ex), false_type()),
1609
+ prop_fns_(prop_fns_table<Executor>())
1610
+ {
1611
+ if (this->template target<void>() == 0)
1612
+ prop_fns_ = prop_fns_table<void>();
1613
+ }
1614
+
1417
1615
  template <typename... OtherSupportableProperties>
1418
1616
  any_executor(any_executor<OtherSupportableProperties...> other,
1419
1617
  typename enable_if<
@@ -1434,6 +1632,29 @@ public:
1434
1632
  {
1435
1633
  }
1436
1634
 
1635
+ template <typename... OtherSupportableProperties>
1636
+ any_executor(std::nothrow_t,
1637
+ any_executor<OtherSupportableProperties...> other,
1638
+ typename enable_if<
1639
+ conditional<
1640
+ !is_same<
1641
+ any_executor<OtherSupportableProperties...>,
1642
+ any_executor
1643
+ >::value,
1644
+ typename detail::supportable_properties<
1645
+ 0, void(SupportableProperties...)>::template is_valid_target<
1646
+ any_executor<OtherSupportableProperties...> >,
1647
+ false_type
1648
+ >::type::value
1649
+ >::type* = 0) BOOST_ASIO_NOEXCEPT
1650
+ : detail::any_executor_base(std::nothrow, BOOST_ASIO_MOVE_CAST(
1651
+ any_executor<OtherSupportableProperties...>)(other), true_type()),
1652
+ prop_fns_(prop_fns_table<any_executor<OtherSupportableProperties...> >())
1653
+ {
1654
+ if (this->template target<void>() == 0)
1655
+ prop_fns_ = prop_fns_table<void>();
1656
+ }
1657
+
1437
1658
  any_executor(const any_executor& other) BOOST_ASIO_NOEXCEPT
1438
1659
  : detail::any_executor_base(
1439
1660
  static_cast<const detail::any_executor_base&>(other)),
@@ -1441,6 +1662,13 @@ public:
1441
1662
  {
1442
1663
  }
1443
1664
 
1665
+ any_executor(std::nothrow_t, const any_executor& other) BOOST_ASIO_NOEXCEPT
1666
+ : detail::any_executor_base(
1667
+ static_cast<const detail::any_executor_base&>(other)),
1668
+ prop_fns_(other.prop_fns_)
1669
+ {
1670
+ }
1671
+
1444
1672
  any_executor& operator=(const any_executor& other) BOOST_ASIO_NOEXCEPT
1445
1673
  {
1446
1674
  if (this != &other)
@@ -1470,6 +1698,15 @@ public:
1470
1698
  other.prop_fns_ = prop_fns_table<void>();
1471
1699
  }
1472
1700
 
1701
+ any_executor(std::nothrow_t, any_executor&& other) BOOST_ASIO_NOEXCEPT
1702
+ : detail::any_executor_base(
1703
+ static_cast<any_executor_base&&>(
1704
+ static_cast<any_executor_base&>(other))),
1705
+ prop_fns_(other.prop_fns_)
1706
+ {
1707
+ other.prop_fns_ = prop_fns_table<void>();
1708
+ }
1709
+
1473
1710
  any_executor& operator=(any_executor&& other) BOOST_ASIO_NOEXCEPT
1474
1711
  {
1475
1712
  if (this != &other)
@@ -1789,6 +2026,15 @@ inline void swap(any_executor<SupportableProperties...>& a,
1789
2026
  other.prop_fns_ = prop_fns_table<void>(); \
1790
2027
  } \
1791
2028
  \
2029
+ any_executor(std::nothrow_t, any_executor&& other) BOOST_ASIO_NOEXCEPT \
2030
+ : detail::any_executor_base( \
2031
+ static_cast<any_executor_base&&>( \
2032
+ static_cast<any_executor_base&>(other))), \
2033
+ prop_fns_(other.prop_fns_) \
2034
+ { \
2035
+ other.prop_fns_ = prop_fns_table<void>(); \
2036
+ } \
2037
+ \
1792
2038
  any_executor& operator=(any_executor&& other) BOOST_ASIO_NOEXCEPT \
1793
2039
  { \
1794
2040
  if (this != &other) \
@@ -1846,6 +2092,25 @@ inline void swap(any_executor<SupportableProperties...>& a,
1846
2092
  { \
1847
2093
  } \
1848
2094
  \
2095
+ template <BOOST_ASIO_EXECUTION_EXECUTOR Executor> \
2096
+ any_executor(std::nothrow_t, Executor ex, \
2097
+ typename enable_if< \
2098
+ conditional< \
2099
+ !is_same<Executor, any_executor>::value \
2100
+ && !is_base_of<detail::any_executor_base, Executor>::value, \
2101
+ detail::is_valid_target_executor< \
2102
+ Executor, void(BOOST_ASIO_VARIADIC_TARGS(n))>, \
2103
+ false_type \
2104
+ >::type::value \
2105
+ >::type* = 0) BOOST_ASIO_NOEXCEPT \
2106
+ : detail::any_executor_base(std::nothrow, \
2107
+ BOOST_ASIO_MOVE_CAST(Executor)(ex), false_type()), \
2108
+ prop_fns_(prop_fns_table<Executor>()) \
2109
+ { \
2110
+ if (this->template target<void>() == 0) \
2111
+ prop_fns_ = prop_fns_table<void>(); \
2112
+ } \
2113
+ \
1849
2114
  any_executor(const any_executor& other) BOOST_ASIO_NOEXCEPT \
1850
2115
  : detail::any_executor_base( \
1851
2116
  static_cast<const detail::any_executor_base&>(other)), \
@@ -1853,6 +2118,16 @@ inline void swap(any_executor<SupportableProperties...>& a,
1853
2118
  { \
1854
2119
  } \
1855
2120
  \
2121
+ any_executor(std::nothrow_t, \
2122
+ const any_executor& other) BOOST_ASIO_NOEXCEPT \
2123
+ : detail::any_executor_base( \
2124
+ static_cast<const detail::any_executor_base&>(other)), \
2125
+ prop_fns_(other.prop_fns_) \
2126
+ { \
2127
+ if (this->template target<void>() == 0) \
2128
+ prop_fns_ = prop_fns_table<void>(); \
2129
+ } \
2130
+ \
1856
2131
  any_executor(any_executor<> other) \
1857
2132
  : detail::any_executor_base(BOOST_ASIO_MOVE_CAST( \
1858
2133
  any_executor<>)(other), true_type()), \
@@ -1860,6 +2135,15 @@ inline void swap(any_executor<SupportableProperties...>& a,
1860
2135
  { \
1861
2136
  } \
1862
2137
  \
2138
+ any_executor(std::nothrow_t, any_executor<> other) BOOST_ASIO_NOEXCEPT \
2139
+ : detail::any_executor_base(std::nothrow, \
2140
+ BOOST_ASIO_MOVE_CAST(any_executor<>)(other), true_type()), \
2141
+ prop_fns_(prop_fns_table<any_executor<> >()) \
2142
+ { \
2143
+ if (this->template target<void>() == 0) \
2144
+ prop_fns_ = prop_fns_table<void>(); \
2145
+ } \
2146
+ \
1863
2147
  template <typename OtherAnyExecutor> \
1864
2148
  any_executor(OtherAnyExecutor other, \
1865
2149
  typename enable_if< \
@@ -1879,6 +2163,27 @@ inline void swap(any_executor<SupportableProperties...>& a,
1879
2163
  { \
1880
2164
  } \
1881
2165
  \
2166
+ template <typename OtherAnyExecutor> \
2167
+ any_executor(std::nothrow_t, OtherAnyExecutor other, \
2168
+ typename enable_if< \
2169
+ conditional< \
2170
+ !is_same<OtherAnyExecutor, any_executor>::value \
2171
+ && is_base_of<detail::any_executor_base, \
2172
+ OtherAnyExecutor>::value, \
2173
+ typename detail::supportable_properties< \
2174
+ 0, void(BOOST_ASIO_VARIADIC_TARGS(n))>::template \
2175
+ is_valid_target<OtherAnyExecutor>, \
2176
+ false_type \
2177
+ >::type::value \
2178
+ >::type* = 0) BOOST_ASIO_NOEXCEPT \
2179
+ : detail::any_executor_base(std::nothrow, \
2180
+ BOOST_ASIO_MOVE_CAST(OtherAnyExecutor)(other), true_type()), \
2181
+ prop_fns_(prop_fns_table<OtherAnyExecutor>()) \
2182
+ { \
2183
+ if (this->template target<void>() == 0) \
2184
+ prop_fns_ = prop_fns_table<void>(); \
2185
+ } \
2186
+ \
1882
2187
  any_executor& operator=(const any_executor& other) BOOST_ASIO_NOEXCEPT \
1883
2188
  { \
1884
2189
  if (this != &other) \