passenger 6.0.23 → 6.0.24

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.

Potentially problematic release.


This version of passenger might be problematic. Click here for more details.

Files changed (305) hide show
  1. checksums.yaml +4 -4
  2. data/CHANGELOG +26 -1
  3. data/Rakefile +7 -3
  4. data/bin/passenger-install-apache2-module +5 -0
  5. data/bin/passenger-install-nginx-module +17 -2
  6. data/build/apache2.rb +1 -1
  7. data/build/basics.rb +10 -4
  8. data/build/cxx_tests.rb +18 -7
  9. data/build/support/cxx_dependency_map.rb +40 -6
  10. data/build/test_basics.rb +4 -12
  11. data/package.json +1 -1
  12. data/passenger.gemspec +1 -1
  13. data/src/agent/Core/ApplicationPool/Group/InitializationAndShutdown.cpp +8 -0
  14. data/src/agent/Core/ApplicationPool/Group/InternalUtils.cpp +10 -2
  15. data/src/agent/Core/ApplicationPool/Group/LifetimeAndBasics.cpp +8 -0
  16. data/src/agent/Core/ApplicationPool/Group/Miscellaneous.cpp +9 -0
  17. data/src/agent/Core/ApplicationPool/Group/OutOfBandWork.cpp +9 -0
  18. data/src/agent/Core/ApplicationPool/Group/ProcessListManagement.cpp +63 -50
  19. data/src/agent/Core/ApplicationPool/Group/SessionManagement.cpp +19 -9
  20. data/src/agent/Core/ApplicationPool/Group/SpawningAndRestarting.cpp +8 -0
  21. data/src/agent/Core/ApplicationPool/Group/StateInspection.cpp +8 -0
  22. data/src/agent/Core/ApplicationPool/Group/Verification.cpp +8 -0
  23. data/src/agent/Core/ApplicationPool/Group.h +15 -5
  24. data/src/agent/Core/ApplicationPool/Pool/AnalyticsCollection.cpp +5 -0
  25. data/src/agent/Core/ApplicationPool/Pool/GarbageCollection.cpp +5 -0
  26. data/src/agent/Core/ApplicationPool/Pool/GeneralUtils.cpp +5 -0
  27. data/src/agent/Core/ApplicationPool/Pool/GroupUtils.cpp +5 -0
  28. data/src/agent/Core/ApplicationPool/Pool/InitializationAndShutdown.cpp +5 -0
  29. data/src/agent/Core/ApplicationPool/Pool/Miscellaneous.cpp +5 -0
  30. data/src/agent/Core/ApplicationPool/Pool/ProcessUtils.cpp +5 -0
  31. data/src/agent/Core/ApplicationPool/Pool/StateInspection.cpp +11 -1
  32. data/src/agent/Core/ApplicationPool/Pool.h +0 -2
  33. data/src/agent/Core/ApplicationPool/Process.h +22 -6
  34. data/src/agent/Core/ApplicationPool/Session.h +6 -1
  35. data/src/agent/Core/Config.h +7 -3
  36. data/src/agent/Core/Controller/Config.h +1 -1
  37. data/src/agent/Core/CoreMain.cpp +10 -17
  38. data/src/agent/Core/SpawningKit/Handshake/Prepare.h +1 -53
  39. data/src/agent/Core/SpawningKit/Handshake/Session.h +3 -0
  40. data/src/agent/Core/SpawningKit/Handshake/WorkDir.h +5 -2
  41. data/src/agent/Core/SpawningKit/SmartSpawner.h +6 -2
  42. data/src/agent/Core/SpawningKit/Spawner.h +4 -0
  43. data/src/agent/Shared/Fundamentals/AbortHandler.cpp +88 -9
  44. data/src/agent/Shared/Fundamentals/AbortHandler.h +2 -0
  45. data/src/agent/Shared/Fundamentals/Initialization.cpp +9 -3
  46. data/src/agent/Shared/Fundamentals/Initialization.h +3 -3
  47. data/src/agent/SpawnEnvSetupper/SpawnEnvSetupperMain.cpp +6 -7
  48. data/src/agent/Watchdog/Config.h +1 -1
  49. data/src/agent/Watchdog/WatchdogMain.cpp +4 -7
  50. data/src/apache2_module/ConfigGeneral/ManifestGeneration.h +5 -3
  51. data/src/apache2_module/DirConfig/AutoGeneratedStruct.h +3 -0
  52. data/src/apache2_module/DirConfig/AutoGeneratedStruct.h.cxxcodebuilder +3 -0
  53. data/src/apache2_module/ServerConfig/AutoGeneratedStruct.h +2 -1
  54. data/src/apache2_module/ServerConfig/AutoGeneratedStruct.h.cxxcodebuilder +2 -1
  55. data/src/cxx_supportlib/Constants.h +1 -1
  56. data/src/cxx_supportlib/DataStructures/StringMap.h +0 -1
  57. data/src/cxx_supportlib/FileTools/PathManip.cpp +1 -1
  58. data/src/cxx_supportlib/SafeLibev.h +1 -3
  59. data/src/cxx_supportlib/ServerKit/Hooks.h +2 -2
  60. data/src/cxx_supportlib/ServerKit/HttpHeaderParser.h +0 -1
  61. data/src/cxx_supportlib/ServerKit/HttpServer.h +15 -10
  62. data/src/cxx_supportlib/ServerKit/Server.h +0 -6
  63. data/src/cxx_supportlib/Utils/AsyncSignalSafeUtils.h +2 -0
  64. data/src/cxx_supportlib/Utils/SpeedMeter.h +0 -3
  65. data/src/cxx_supportlib/oxt/implementation.cpp +11 -0
  66. data/src/cxx_supportlib/oxt/system_calls.cpp +10 -3
  67. data/src/cxx_supportlib/oxt/thread.hpp +1 -1
  68. data/src/cxx_supportlib/vendor-modified/boost/asio/as_tuple.hpp +35 -9
  69. data/src/cxx_supportlib/vendor-modified/boost/asio/associated_immediate_executor.hpp +3 -2
  70. data/src/cxx_supportlib/vendor-modified/boost/asio/associator.hpp +1 -1
  71. data/src/cxx_supportlib/vendor-modified/boost/asio/async_result.hpp +74 -68
  72. data/src/cxx_supportlib/vendor-modified/boost/asio/basic_datagram_socket.hpp +11 -11
  73. data/src/cxx_supportlib/vendor-modified/boost/asio/basic_deadline_timer.hpp +2 -2
  74. data/src/cxx_supportlib/vendor-modified/boost/asio/basic_random_access_file.hpp +2 -2
  75. data/src/cxx_supportlib/vendor-modified/boost/asio/basic_raw_socket.hpp +10 -10
  76. data/src/cxx_supportlib/vendor-modified/boost/asio/basic_readable_pipe.hpp +1 -1
  77. data/src/cxx_supportlib/vendor-modified/boost/asio/basic_seq_packet_socket.hpp +3 -3
  78. data/src/cxx_supportlib/vendor-modified/boost/asio/basic_serial_port.hpp +2 -2
  79. data/src/cxx_supportlib/vendor-modified/boost/asio/basic_signal_set.hpp +1 -1
  80. data/src/cxx_supportlib/vendor-modified/boost/asio/basic_socket.hpp +2 -2
  81. data/src/cxx_supportlib/vendor-modified/boost/asio/basic_socket_acceptor.hpp +9 -9
  82. data/src/cxx_supportlib/vendor-modified/boost/asio/basic_stream_file.hpp +2 -2
  83. data/src/cxx_supportlib/vendor-modified/boost/asio/basic_stream_socket.hpp +6 -6
  84. data/src/cxx_supportlib/vendor-modified/boost/asio/basic_waitable_timer.hpp +2 -2
  85. data/src/cxx_supportlib/vendor-modified/boost/asio/basic_writable_pipe.hpp +1 -1
  86. data/src/cxx_supportlib/vendor-modified/boost/asio/bind_allocator.hpp +88 -22
  87. data/src/cxx_supportlib/vendor-modified/boost/asio/bind_cancellation_slot.hpp +91 -22
  88. data/src/cxx_supportlib/vendor-modified/boost/asio/bind_executor.hpp +105 -23
  89. data/src/cxx_supportlib/vendor-modified/boost/asio/bind_immediate_executor.hpp +90 -23
  90. data/src/cxx_supportlib/vendor-modified/boost/asio/buffer.hpp +2 -2
  91. data/src/cxx_supportlib/vendor-modified/boost/asio/buffer_registration.hpp +1 -1
  92. data/src/cxx_supportlib/vendor-modified/boost/asio/cancel_after.hpp +303 -0
  93. data/src/cxx_supportlib/vendor-modified/boost/asio/cancel_at.hpp +296 -0
  94. data/src/cxx_supportlib/vendor-modified/boost/asio/{experimental/impl/co_composed.hpp → co_composed.hpp} +208 -61
  95. data/src/cxx_supportlib/vendor-modified/boost/asio/completion_condition.hpp +49 -0
  96. data/src/cxx_supportlib/vendor-modified/boost/asio/compose.hpp +10 -201
  97. data/src/cxx_supportlib/vendor-modified/boost/asio/composed.hpp +415 -0
  98. data/src/cxx_supportlib/vendor-modified/boost/asio/connect.hpp +214 -48
  99. data/src/cxx_supportlib/vendor-modified/boost/asio/coroutine.hpp +3 -4
  100. data/src/cxx_supportlib/vendor-modified/boost/asio/default_completion_token.hpp +91 -0
  101. data/src/cxx_supportlib/vendor-modified/boost/asio/deferred.hpp +9 -5
  102. data/src/cxx_supportlib/vendor-modified/boost/asio/detached.hpp +2 -2
  103. data/src/cxx_supportlib/vendor-modified/boost/asio/detail/buffered_stream_storage.hpp +1 -1
  104. data/src/cxx_supportlib/vendor-modified/boost/asio/{experimental/detail/channel_message.hpp → detail/completion_message.hpp} +14 -16
  105. data/src/cxx_supportlib/vendor-modified/boost/asio/{experimental/detail/channel_payload.hpp → detail/completion_payload.hpp} +30 -32
  106. data/src/cxx_supportlib/vendor-modified/boost/asio/{experimental/detail/channel_handler.hpp → detail/completion_payload_handler.hpp} +15 -13
  107. data/src/cxx_supportlib/vendor-modified/boost/asio/detail/config.hpp +26 -32
  108. data/src/cxx_supportlib/vendor-modified/boost/asio/detail/deadline_timer_service.hpp +5 -1
  109. data/src/cxx_supportlib/vendor-modified/boost/asio/detail/handler_alloc_helpers.hpp +14 -118
  110. data/src/cxx_supportlib/vendor-modified/boost/asio/detail/impl/descriptor_ops.ipp +36 -33
  111. data/src/cxx_supportlib/vendor-modified/boost/asio/detail/impl/dev_poll_reactor.ipp +1 -1
  112. data/src/cxx_supportlib/vendor-modified/boost/asio/detail/impl/reactive_descriptor_service.ipp +7 -5
  113. data/src/cxx_supportlib/vendor-modified/boost/asio/detail/impl/reactive_socket_service_base.ipp +6 -4
  114. data/src/cxx_supportlib/vendor-modified/boost/asio/detail/impl/socket_ops.ipp +44 -35
  115. data/src/cxx_supportlib/vendor-modified/boost/asio/detail/impl/socket_select_interrupter.ipp +1 -1
  116. data/src/cxx_supportlib/vendor-modified/boost/asio/detail/initiation_base.hpp +64 -0
  117. data/src/cxx_supportlib/vendor-modified/boost/asio/detail/memory.hpp +0 -11
  118. data/src/cxx_supportlib/vendor-modified/boost/asio/detail/reactive_descriptor_service.hpp +20 -16
  119. data/src/cxx_supportlib/vendor-modified/boost/asio/detail/reactive_socket_send_op.hpp +0 -1
  120. data/src/cxx_supportlib/vendor-modified/boost/asio/detail/reactive_socket_service.hpp +4 -4
  121. data/src/cxx_supportlib/vendor-modified/boost/asio/detail/reactive_socket_service_base.hpp +23 -18
  122. data/src/cxx_supportlib/vendor-modified/boost/asio/detail/recycling_allocator.hpp +9 -0
  123. data/src/cxx_supportlib/vendor-modified/boost/asio/detail/resolve_endpoint_op.hpp +1 -1
  124. data/src/cxx_supportlib/vendor-modified/boost/asio/detail/resolve_query_op.hpp +1 -1
  125. data/src/cxx_supportlib/vendor-modified/boost/asio/detail/thread_info_base.hpp +11 -1
  126. data/src/cxx_supportlib/vendor-modified/boost/asio/detail/timed_cancel_op.hpp +363 -0
  127. data/src/cxx_supportlib/vendor-modified/boost/asio/detail/wrapped_handler.hpp +29 -51
  128. data/src/cxx_supportlib/vendor-modified/boost/asio/execution/allocator.hpp +1 -1
  129. data/src/cxx_supportlib/vendor-modified/boost/asio/execution/blocking.hpp +1 -1
  130. data/src/cxx_supportlib/vendor-modified/boost/asio/execution/blocking_adaptation.hpp +1 -1
  131. data/src/cxx_supportlib/vendor-modified/boost/asio/execution/context.hpp +1 -1
  132. data/src/cxx_supportlib/vendor-modified/boost/asio/execution/mapping.hpp +1 -1
  133. data/src/cxx_supportlib/vendor-modified/boost/asio/execution/occupancy.hpp +1 -1
  134. data/src/cxx_supportlib/vendor-modified/boost/asio/execution/outstanding_work.hpp +1 -1
  135. data/src/cxx_supportlib/vendor-modified/boost/asio/execution/relationship.hpp +1 -1
  136. data/src/cxx_supportlib/vendor-modified/boost/asio/experimental/basic_channel.hpp +2 -1
  137. data/src/cxx_supportlib/vendor-modified/boost/asio/experimental/basic_concurrent_channel.hpp +2 -1
  138. data/src/cxx_supportlib/vendor-modified/boost/asio/experimental/co_composed.hpp +2 -114
  139. data/src/cxx_supportlib/vendor-modified/boost/asio/experimental/detail/channel_receive_op.hpp +2 -3
  140. data/src/cxx_supportlib/vendor-modified/boost/asio/experimental/detail/channel_send_functions.hpp +27 -19
  141. data/src/cxx_supportlib/vendor-modified/boost/asio/experimental/detail/channel_send_op.hpp +0 -1
  142. data/src/cxx_supportlib/vendor-modified/boost/asio/experimental/detail/channel_service.hpp +17 -15
  143. data/src/cxx_supportlib/vendor-modified/boost/asio/experimental/detail/coro_promise_allocator.hpp +2 -3
  144. data/src/cxx_supportlib/vendor-modified/boost/asio/experimental/detail/impl/channel_service.hpp +4 -2
  145. data/src/cxx_supportlib/vendor-modified/boost/asio/experimental/detail/partial_promise.hpp +3 -5
  146. data/src/cxx_supportlib/vendor-modified/boost/asio/experimental/impl/as_single.hpp +12 -7
  147. data/src/cxx_supportlib/vendor-modified/boost/asio/experimental/impl/coro.hpp +1 -1
  148. data/src/cxx_supportlib/vendor-modified/boost/asio/experimental/parallel_group.hpp +38 -40
  149. data/src/cxx_supportlib/vendor-modified/boost/asio/experimental/promise.hpp +3 -3
  150. data/src/cxx_supportlib/vendor-modified/boost/asio/experimental/use_coro.hpp +5 -5
  151. data/src/cxx_supportlib/vendor-modified/boost/asio/experimental/use_promise.hpp +1 -1
  152. data/src/cxx_supportlib/vendor-modified/boost/asio/immediate.hpp +144 -0
  153. data/src/cxx_supportlib/vendor-modified/boost/asio/impl/append.hpp +14 -7
  154. data/src/cxx_supportlib/vendor-modified/boost/asio/impl/as_tuple.hpp +45 -14
  155. data/src/cxx_supportlib/vendor-modified/boost/asio/impl/awaitable.hpp +3 -3
  156. data/src/cxx_supportlib/vendor-modified/boost/asio/impl/cancel_after.hpp +270 -0
  157. data/src/cxx_supportlib/vendor-modified/boost/asio/impl/cancel_at.hpp +270 -0
  158. data/src/cxx_supportlib/vendor-modified/boost/asio/impl/co_spawn.hpp +8 -0
  159. data/src/cxx_supportlib/vendor-modified/boost/asio/impl/connect.hpp +60 -166
  160. data/src/cxx_supportlib/vendor-modified/boost/asio/impl/consign.hpp +14 -7
  161. data/src/cxx_supportlib/vendor-modified/boost/asio/impl/detached.hpp +2 -2
  162. data/src/cxx_supportlib/vendor-modified/boost/asio/impl/prepend.hpp +14 -7
  163. data/src/cxx_supportlib/vendor-modified/boost/asio/impl/read.hpp +26 -177
  164. data/src/cxx_supportlib/vendor-modified/boost/asio/impl/read_at.hpp +16 -82
  165. data/src/cxx_supportlib/vendor-modified/boost/asio/impl/read_until.hpp +13 -286
  166. data/src/cxx_supportlib/vendor-modified/boost/asio/impl/redirect_error.hpp +55 -18
  167. data/src/cxx_supportlib/vendor-modified/boost/asio/impl/spawn.hpp +1 -1
  168. data/src/cxx_supportlib/vendor-modified/boost/asio/impl/write.hpp +26 -185
  169. data/src/cxx_supportlib/vendor-modified/boost/asio/impl/write_at.hpp +16 -87
  170. data/src/cxx_supportlib/vendor-modified/boost/asio/io_context_strand.hpp +5 -5
  171. data/src/cxx_supportlib/vendor-modified/boost/asio/ip/basic_resolver.hpp +6 -6
  172. data/src/cxx_supportlib/vendor-modified/boost/asio/ip/detail/socket_option.hpp +1 -1
  173. data/src/cxx_supportlib/vendor-modified/boost/asio/ip/impl/address_v6.ipp +1 -1
  174. data/src/cxx_supportlib/vendor-modified/boost/asio/placeholders.hpp +12 -6
  175. data/src/cxx_supportlib/vendor-modified/boost/asio/posix/basic_descriptor.hpp +1 -1
  176. data/src/cxx_supportlib/vendor-modified/boost/asio/posix/basic_stream_descriptor.hpp +2 -2
  177. data/src/cxx_supportlib/vendor-modified/boost/asio/read.hpp +127 -28
  178. data/src/cxx_supportlib/vendor-modified/boost/asio/read_at.hpp +70 -20
  179. data/src/cxx_supportlib/vendor-modified/boost/asio/read_until.hpp +114 -36
  180. data/src/cxx_supportlib/vendor-modified/boost/asio/redirect_error.hpp +43 -3
  181. data/src/cxx_supportlib/vendor-modified/boost/asio/registered_buffer.hpp +2 -2
  182. data/src/cxx_supportlib/vendor-modified/boost/asio/spawn.hpp +0 -1
  183. data/src/cxx_supportlib/vendor-modified/boost/asio/ssl/detail/impl/openssl_init.ipp +2 -2
  184. data/src/cxx_supportlib/vendor-modified/boost/asio/ssl/impl/context.ipp +10 -7
  185. data/src/cxx_supportlib/vendor-modified/boost/asio/ssl/stream.hpp +5 -5
  186. data/src/cxx_supportlib/vendor-modified/boost/asio/this_coro.hpp +2 -2
  187. data/src/cxx_supportlib/vendor-modified/boost/asio/use_awaitable.hpp +2 -2
  188. data/src/cxx_supportlib/vendor-modified/boost/asio/use_future.hpp +1 -1
  189. data/src/cxx_supportlib/vendor-modified/boost/asio/uses_executor.hpp +1 -1
  190. data/src/cxx_supportlib/vendor-modified/boost/asio/version.hpp +1 -1
  191. data/src/cxx_supportlib/vendor-modified/boost/asio/write.hpp +147 -35
  192. data/src/cxx_supportlib/vendor-modified/boost/asio/write_at.hpp +74 -22
  193. data/src/cxx_supportlib/vendor-modified/boost/asio.hpp +6 -0
  194. data/src/cxx_supportlib/vendor-modified/boost/assert/source_location.hpp +4 -1
  195. data/src/cxx_supportlib/vendor-modified/boost/atomic/detail/futex.hpp +42 -11
  196. data/src/cxx_supportlib/vendor-modified/boost/bind/bind.hpp +15 -37
  197. data/src/cxx_supportlib/vendor-modified/boost/container/adaptive_pool.hpp +8 -8
  198. data/src/cxx_supportlib/vendor-modified/boost/container/allocator.hpp +1 -1
  199. data/src/cxx_supportlib/vendor-modified/boost/container/allocator_traits.hpp +151 -10
  200. data/src/cxx_supportlib/vendor-modified/boost/container/container_fwd.hpp +11 -9
  201. data/src/cxx_supportlib/vendor-modified/boost/container/deque.hpp +611 -102
  202. data/src/cxx_supportlib/vendor-modified/boost/container/detail/adaptive_node_pool.hpp +1 -1
  203. data/src/cxx_supportlib/vendor-modified/boost/container/detail/adaptive_node_pool_impl.hpp +47 -47
  204. data/src/cxx_supportlib/vendor-modified/boost/container/detail/advanced_insert_int.hpp +25 -24
  205. data/src/cxx_supportlib/vendor-modified/boost/container/detail/allocation_type.hpp +7 -7
  206. data/src/cxx_supportlib/vendor-modified/boost/container/detail/block_list.hpp +2 -2
  207. data/src/cxx_supportlib/vendor-modified/boost/container/detail/block_slist.hpp +2 -2
  208. data/src/cxx_supportlib/vendor-modified/boost/container/detail/construct_in_place.hpp +35 -1
  209. data/src/cxx_supportlib/vendor-modified/boost/container/detail/copy_move_algo.hpp +14 -14
  210. data/src/cxx_supportlib/vendor-modified/boost/container/detail/dispatch_uses_allocator.hpp +1 -1
  211. data/src/cxx_supportlib/vendor-modified/boost/container/detail/flat_tree.hpp +55 -23
  212. data/src/cxx_supportlib/vendor-modified/boost/container/detail/function_detector.hpp +1 -1
  213. data/src/cxx_supportlib/vendor-modified/boost/container/detail/is_container.hpp +2 -2
  214. data/src/cxx_supportlib/vendor-modified/boost/container/detail/is_contiguous_container.hpp +1 -1
  215. data/src/cxx_supportlib/vendor-modified/boost/container/detail/is_pair.hpp +4 -4
  216. data/src/cxx_supportlib/vendor-modified/boost/container/detail/iterators.hpp +8 -8
  217. data/src/cxx_supportlib/vendor-modified/boost/container/detail/math_functions.hpp +9 -9
  218. data/src/cxx_supportlib/vendor-modified/boost/container/detail/mpl.hpp +4 -4
  219. data/src/cxx_supportlib/vendor-modified/boost/container/detail/multiallocation_chain.hpp +96 -10
  220. data/src/cxx_supportlib/vendor-modified/boost/container/detail/node_alloc_holder.hpp +19 -4
  221. data/src/cxx_supportlib/vendor-modified/boost/container/detail/node_pool.hpp +1 -1
  222. data/src/cxx_supportlib/vendor-modified/boost/container/detail/pair.hpp +17 -17
  223. data/src/cxx_supportlib/vendor-modified/boost/container/detail/pool_common.hpp +1 -1
  224. data/src/cxx_supportlib/vendor-modified/boost/container/detail/pool_common_alloc.hpp +2 -2
  225. data/src/cxx_supportlib/vendor-modified/boost/container/detail/pool_resource.hpp +4 -4
  226. data/src/cxx_supportlib/vendor-modified/boost/container/detail/tree.hpp +86 -52
  227. data/src/cxx_supportlib/vendor-modified/boost/container/detail/version_type.hpp +4 -4
  228. data/src/cxx_supportlib/vendor-modified/boost/container/detail/workaround.hpp +12 -0
  229. data/src/cxx_supportlib/vendor-modified/boost/container/devector.hpp +145 -65
  230. data/src/cxx_supportlib/vendor-modified/boost/container/flat_map.hpp +105 -22
  231. data/src/cxx_supportlib/vendor-modified/boost/container/flat_set.hpp +2 -2
  232. data/src/cxx_supportlib/vendor-modified/boost/container/list.hpp +30 -22
  233. data/src/cxx_supportlib/vendor-modified/boost/container/map.hpp +19 -2
  234. data/src/cxx_supportlib/vendor-modified/boost/container/new_allocator.hpp +1 -1
  235. data/src/cxx_supportlib/vendor-modified/boost/container/node_allocator.hpp +15 -8
  236. data/src/cxx_supportlib/vendor-modified/boost/container/node_handle.hpp +6 -5
  237. data/src/cxx_supportlib/vendor-modified/boost/container/options.hpp +15 -15
  238. data/src/cxx_supportlib/vendor-modified/boost/container/pmr/memory_resource.hpp +1 -1
  239. data/src/cxx_supportlib/vendor-modified/boost/container/pmr/monotonic_buffer_resource.hpp +1 -1
  240. data/src/cxx_supportlib/vendor-modified/boost/container/pmr/resource_adaptor.hpp +3 -3
  241. data/src/cxx_supportlib/vendor-modified/boost/container/scoped_allocator.hpp +1 -1
  242. data/src/cxx_supportlib/vendor-modified/boost/container/set.hpp +2 -2
  243. data/src/cxx_supportlib/vendor-modified/boost/container/slist.hpp +31 -24
  244. data/src/cxx_supportlib/vendor-modified/boost/container/small_vector.hpp +45 -43
  245. data/src/cxx_supportlib/vendor-modified/boost/container/stable_vector.hpp +45 -33
  246. data/src/cxx_supportlib/vendor-modified/boost/container/static_vector.hpp +5 -7
  247. data/src/cxx_supportlib/vendor-modified/boost/container/string.hpp +55 -47
  248. data/src/cxx_supportlib/vendor-modified/boost/container/uses_allocator.hpp +3 -3
  249. data/src/cxx_supportlib/vendor-modified/boost/container/vector.hpp +222 -73
  250. data/src/cxx_supportlib/vendor-modified/boost/core/detail/minstd_rand.hpp +58 -0
  251. data/src/cxx_supportlib/vendor-modified/boost/core/detail/string_view.hpp +13 -13
  252. data/src/cxx_supportlib/vendor-modified/boost/core/empty_value.hpp +53 -5
  253. data/src/cxx_supportlib/vendor-modified/boost/core/lightweight_test.hpp +1 -0
  254. data/src/cxx_supportlib/vendor-modified/boost/core/pointer_in_range.hpp +49 -0
  255. data/src/cxx_supportlib/vendor-modified/boost/core/span.hpp +2 -0
  256. data/src/cxx_supportlib/vendor-modified/boost/core/type_name.hpp +7 -2
  257. data/src/cxx_supportlib/vendor-modified/boost/function/function_base.hpp +22 -34
  258. data/src/cxx_supportlib/vendor-modified/boost/function/function_template.hpp +141 -38
  259. data/src/cxx_supportlib/vendor-modified/boost/intrusive/detail/algorithm.hpp +8 -8
  260. data/src/cxx_supportlib/vendor-modified/boost/intrusive/detail/hash.hpp +1 -1
  261. data/src/cxx_supportlib/vendor-modified/boost/intrusive/detail/hook_traits.hpp +8 -6
  262. data/src/cxx_supportlib/vendor-modified/boost/intrusive/pointer_traits.hpp +18 -18
  263. data/src/cxx_supportlib/vendor-modified/boost/lexical_cast/detail/converter_lexical_streams.hpp +22 -17
  264. data/src/cxx_supportlib/vendor-modified/boost/libs/random/src/random_device.cpp +3 -1
  265. data/src/cxx_supportlib/vendor-modified/boost/move/detail/config_begin.hpp +0 -1
  266. data/src/cxx_supportlib/vendor-modified/boost/move/detail/launder.hpp +53 -0
  267. data/src/cxx_supportlib/vendor-modified/boost/move/detail/type_traits.hpp +9 -1
  268. data/src/cxx_supportlib/vendor-modified/boost/move/detail/workaround.hpp +6 -1
  269. data/src/cxx_supportlib/vendor-modified/boost/mp11/version.hpp +1 -1
  270. data/src/cxx_supportlib/vendor-modified/boost/mpl/aux_/integral_wrapper.hpp +2 -1
  271. data/src/cxx_supportlib/vendor-modified/boost/predef/version.h +1 -1
  272. data/src/cxx_supportlib/vendor-modified/boost/smart_ptr/detail/requires_cxx11.hpp +1 -1
  273. data/src/cxx_supportlib/vendor-modified/boost/smart_ptr/detail/sp_has_gcc_intrinsics.hpp +4 -1
  274. data/src/cxx_supportlib/vendor-modified/boost/system/detail/generic_category_message.hpp +13 -1
  275. data/src/cxx_supportlib/vendor-modified/boost/unordered/concurrent_flat_map.hpp +13 -1
  276. data/src/cxx_supportlib/vendor-modified/boost/unordered/concurrent_flat_map_fwd.hpp +15 -0
  277. data/src/cxx_supportlib/vendor-modified/boost/unordered/concurrent_flat_set.hpp +13 -1
  278. data/src/cxx_supportlib/vendor-modified/boost/unordered/concurrent_flat_set_fwd.hpp +15 -0
  279. data/src/cxx_supportlib/vendor-modified/boost/unordered/detail/fca.hpp +22 -6
  280. data/src/cxx_supportlib/vendor-modified/boost/unordered/detail/foa/concurrent_table.hpp +38 -10
  281. data/src/cxx_supportlib/vendor-modified/boost/unordered/detail/foa/core.hpp +111 -2
  282. data/src/cxx_supportlib/vendor-modified/boost/unordered/detail/foa/cumulative_stats.hpp +177 -0
  283. data/src/cxx_supportlib/vendor-modified/boost/unordered/detail/foa/table.hpp +11 -1
  284. data/src/cxx_supportlib/vendor-modified/boost/unordered/hash_traits.hpp +33 -7
  285. data/src/cxx_supportlib/vendor-modified/boost/unordered/unordered_flat_map.hpp +12 -0
  286. data/src/cxx_supportlib/vendor-modified/boost/unordered/unordered_flat_map_fwd.hpp +15 -0
  287. data/src/cxx_supportlib/vendor-modified/boost/unordered/unordered_flat_set.hpp +12 -0
  288. data/src/cxx_supportlib/vendor-modified/boost/unordered/unordered_flat_set_fwd.hpp +14 -0
  289. data/src/cxx_supportlib/vendor-modified/boost/unordered/unordered_map_fwd.hpp +19 -0
  290. data/src/cxx_supportlib/vendor-modified/boost/unordered/unordered_node_map.hpp +12 -0
  291. data/src/cxx_supportlib/vendor-modified/boost/unordered/unordered_node_map_fwd.hpp +15 -0
  292. data/src/cxx_supportlib/vendor-modified/boost/unordered/unordered_node_set.hpp +12 -0
  293. data/src/cxx_supportlib/vendor-modified/boost/unordered/unordered_node_set_fwd.hpp +14 -0
  294. data/src/cxx_supportlib/vendor-modified/boost/unordered/unordered_set_fwd.hpp +17 -0
  295. data/src/cxx_supportlib/vendor-modified/boost/utility/detail/minstd_rand.hpp +1 -43
  296. data/src/cxx_supportlib/vendor-modified/boost/version.hpp +2 -2
  297. data/src/ruby_supportlib/phusion_passenger/config/compile_nginx_engine_command.rb +6 -2
  298. data/src/ruby_supportlib/phusion_passenger/config/install_standalone_runtime_command.rb +10 -0
  299. data/src/ruby_supportlib/phusion_passenger/config/nginx_engine_compiler.rb +12 -4
  300. data/src/ruby_supportlib/phusion_passenger/platform_info/compiler.rb +32 -5
  301. data/src/ruby_supportlib/phusion_passenger/standalone/start_command.rb +0 -4
  302. data/src/ruby_supportlib/phusion_passenger/utils/json.rb +5 -1
  303. data/src/ruby_supportlib/phusion_passenger/utils.rb +5 -15
  304. data/src/ruby_supportlib/phusion_passenger.rb +5 -5
  305. metadata +21 -8
@@ -0,0 +1,53 @@
1
+ //////////////////////////////////////////////////////////////////////////////
2
+ //
3
+ // (C) Copyright Ion Gaztanaga 2014-2015. Distributed under the Boost
4
+ // Software License, Version 1.0. (See accompanying file
5
+ // LICENSE_1_0.txt or copy at http://www.boost.org/LICENSE_1_0.txt)
6
+ //
7
+ // See http://www.boost.org/libs/container for documentation.
8
+ //
9
+ //////////////////////////////////////////////////////////////////////////////
10
+ #ifndef BOOST_MOVE_DETAIL_LAUNDER_HPP
11
+ #define BOOST_MOVE_DETAIL_LAUNDER_HPP
12
+
13
+ #ifndef BOOST_CONFIG_HPP
14
+ # include <boost/config.hpp>
15
+ #endif
16
+
17
+ #if defined(BOOST_HAS_PRAGMA_ONCE)
18
+ # pragma once
19
+ #endif
20
+
21
+ #include <boost/move/detail/workaround.hpp>
22
+
23
+ namespace boost {
24
+ namespace move_detail {
25
+
26
+ #if defined(BOOST_MOVE_HAS_BUILTIN_LAUNDER)
27
+
28
+ template<class T>
29
+ BOOST_MOVE_FORCEINLINE T* launder(T* p)
30
+ {
31
+ return __builtin_launder( p );
32
+ }
33
+
34
+ #else
35
+
36
+ template<class T>
37
+ BOOST_MOVE_FORCEINLINE T* launder(T* p)
38
+ {
39
+ return p;
40
+ }
41
+
42
+ #endif
43
+
44
+ template<class T>
45
+ BOOST_MOVE_FORCEINLINE T launder_cast(const volatile void* p)
46
+ {
47
+ return (launder)((T)p);
48
+ }
49
+
50
+ } //namespace move_detail {
51
+ } //namespace boost {
52
+
53
+ #endif //#ifndef BOOST_MOVE_DETAIL_LAUNDER_HPP
@@ -1197,12 +1197,20 @@ struct aligned_struct;
1197
1197
  template <> struct aligned_struct<1> { char data; };
1198
1198
  template <> struct aligned_struct<2> { short data; };
1199
1199
  template <> struct aligned_struct<4> { int data; };
1200
- template <> struct aligned_struct<8> { double data; };
1200
+ //8 byte alignment does not propely work in x86 if attribute is not used.
1201
+ //If a user declares a variable with 8 byte alignment, such as a double
1202
+ //the compiler will not realign the stack.
1203
+ //
1204
+ //If _declspec(align) is used MSVC will realign the stack.
1205
+ //
1206
+ //Disabled specialization
1207
+ //template <> struct aligned_struct<8> { double data; };
1201
1208
 
1202
1209
  #define BOOST_MOVE_ALIGNED_STRUCT(x) \
1203
1210
  template <> struct aligned_struct<x> { \
1204
1211
  __declspec(align(x)) char data; \
1205
1212
  }
1213
+ BOOST_MOVE_ALIGNED_STRUCT(8);
1206
1214
  BOOST_MOVE_ALIGNED_STRUCT(16);
1207
1215
  BOOST_MOVE_ALIGNED_STRUCT(32);
1208
1216
  BOOST_MOVE_ALIGNED_STRUCT(64);
@@ -147,5 +147,10 @@ template<unsigned> struct static_assert_test {};
147
147
  #define BOOST_MOVE_INTRINSIC_CAST BOOST_MOVE_FORCEINLINE
148
148
  #endif
149
149
 
150
- #endif //#ifndef BOOST_MOVE_DETAIL_WORKAROUND_HPP
150
+ #if defined(__has_builtin)
151
+ #if __has_builtin(__builtin_launder)
152
+ #define BOOST_MOVE_HAS_BUILTIN_LAUNDER
153
+ #endif
154
+ #endif
151
155
 
156
+ #endif //#ifndef BOOST_MOVE_DETAIL_WORKAROUND_HPP
@@ -11,6 +11,6 @@
11
11
  // Same format as BOOST_VERSION:
12
12
  // major * 100000 + minor * 100 + patch
13
13
 
14
- #define BOOST_MP11_VERSION 108500
14
+ #define BOOST_MP11_VERSION 108600
15
15
 
16
16
  #endif // #ifndef BOOST_MP11_VERSION_HPP_INCLUDED
@@ -56,7 +56,8 @@ struct AUX_WRAPPER_NAME
56
56
  // have to #ifdef here: some compilers don't like the 'N + 1' form (MSVC),
57
57
  // while some other don't like 'value + 1' (Borland), and some don't like
58
58
  // either
59
- #if BOOST_WORKAROUND(__EDG_VERSION__, <= 243)
59
+ #if BOOST_WORKAROUND(__EDG_VERSION__, <= 243) \
60
+ || __cplusplus >= 201103L
60
61
  private:
61
62
  BOOST_STATIC_CONSTANT(AUX_WRAPPER_VALUE_TYPE, next_value = BOOST_MPL_AUX_STATIC_CAST(AUX_WRAPPER_VALUE_TYPE, (N + 1)));
62
63
  BOOST_STATIC_CONSTANT(AUX_WRAPPER_VALUE_TYPE, prior_value = BOOST_MPL_AUX_STATIC_CAST(AUX_WRAPPER_VALUE_TYPE, (N - 1)));
@@ -10,6 +10,6 @@ http://www.boost.org/LICENSE_1_0.txt)
10
10
 
11
11
  #include <boost/predef/version_number.h>
12
12
 
13
- #define BOOST_PREDEF_VERSION BOOST_VERSION_NUMBER(1,15,0)
13
+ #define BOOST_PREDEF_VERSION BOOST_VERSION_NUMBER(1,15,1)
14
14
 
15
15
  #endif
@@ -16,7 +16,7 @@
16
16
  defined(BOOST_NO_CXX11_NULLPTR) || \
17
17
  defined(BOOST_NO_CXX11_SMART_PTR)
18
18
 
19
- BOOST_PRAGMA_MESSAGE("C++03 support was deprecated in Boost.SmartPtr 1.82 and will be removed in Boost.SmartPtr 1.86.")
19
+ BOOST_PRAGMA_MESSAGE("C++03 support was deprecated in Boost.SmartPtr 1.82 and will be removed in Boost.SmartPtr 1.87.")
20
20
 
21
21
  #endif
22
22
 
@@ -17,8 +17,11 @@
17
17
  // Defines the BOOST_SP_HAS_GCC_INTRINSICS macro if the __atomic_*
18
18
  // intrinsics are available.
19
19
 
20
+ // Libraries (e.g. Kokkos) sometimes define the __ATOMIC_RELAXED macros,
21
+ // leading to errors under MSVC (https://github.com/boostorg/smart_ptr/pull/112)
20
22
 
21
- #if defined( __ATOMIC_RELAXED ) && defined( __ATOMIC_ACQUIRE ) && defined( __ATOMIC_RELEASE ) && defined( __ATOMIC_ACQ_REL )
23
+ #if defined( __ATOMIC_RELAXED ) && defined( __ATOMIC_ACQUIRE ) && defined( __ATOMIC_RELEASE ) && defined( __ATOMIC_ACQ_REL ) \
24
+ && !( defined(_MSC_VER) && !defined(__clang__) )
22
25
 
23
26
  # define BOOST_SP_HAS_GCC_INTRINSICS
24
27
 
@@ -39,7 +39,19 @@ inline char const * strerror_r_helper( int r, char const * buffer ) noexcept
39
39
 
40
40
  inline char const * generic_error_category_message( int ev, char * buffer, std::size_t len ) noexcept
41
41
  {
42
- return strerror_r_helper( strerror_r( ev, buffer, len ), buffer );
42
+ if( buffer != nullptr )
43
+ {
44
+ return strerror_r_helper( strerror_r( ev, buffer, len ), buffer );
45
+ }
46
+ else
47
+ {
48
+ // strerror_r requires non-null buffer pointer
49
+
50
+ char tmp[ 1 ] = {};
51
+ char const* r = strerror_r_helper( strerror_r( ev, tmp, 0 ), buffer );
52
+
53
+ return r == tmp? nullptr: r;
54
+ }
43
55
  }
44
56
 
45
57
  inline std::string generic_error_category_message( int ev )
@@ -1,7 +1,7 @@
1
1
  /* Fast open-addressing concurrent hashmap.
2
2
  *
3
3
  * Copyright 2023 Christian Mazakas.
4
- * Copyright 2023 Joaquin M Lopez Munoz.
4
+ * Copyright 2023-2024 Joaquin M Lopez Munoz.
5
5
  * Distributed under the Boost Software License, Version 1.0.
6
6
  * (See accompanying file LICENSE_1_0.txt or copy at
7
7
  * http://www.boost.org/LICENSE_1_0.txt)
@@ -75,6 +75,10 @@ namespace boost {
75
75
  typename boost::allocator_const_pointer<allocator_type>::type;
76
76
  static constexpr size_type bulk_visit_size = table_type::bulk_visit_size;
77
77
 
78
+ #if defined(BOOST_UNORDERED_ENABLE_STATS)
79
+ using stats = typename table_type::stats;
80
+ #endif
81
+
78
82
  concurrent_flat_map()
79
83
  : concurrent_flat_map(detail::foa::default_bucket_count)
80
84
  {
@@ -714,6 +718,14 @@ namespace boost {
714
718
  void rehash(size_type n) { table_.rehash(n); }
715
719
  void reserve(size_type n) { table_.reserve(n); }
716
720
 
721
+ #if defined(BOOST_UNORDERED_ENABLE_STATS)
722
+ /// Stats
723
+ ///
724
+ stats get_stats() const { return table_.get_stats(); }
725
+
726
+ void reset_stats() noexcept { table_.reset_stats(); }
727
+ #endif
728
+
717
729
  /// Observers
718
730
  ///
719
731
  allocator_type get_allocator() const noexcept
@@ -1,6 +1,7 @@
1
1
  /* Fast open-addressing concurrent hashmap.
2
2
  *
3
3
  * Copyright 2023 Christian Mazakas.
4
+ * Copyright 2024 Braden Ganetsky.
4
5
  * Distributed under the Boost Software License, Version 1.0.
5
6
  * (See accompanying file LICENSE_1_0.txt or copy at
6
7
  * http://www.boost.org/LICENSE_1_0.txt)
@@ -11,11 +12,16 @@
11
12
  #ifndef BOOST_UNORDERED_CONCURRENT_FLAT_MAP_FWD_HPP
12
13
  #define BOOST_UNORDERED_CONCURRENT_FLAT_MAP_FWD_HPP
13
14
 
15
+ #include <boost/config.hpp>
14
16
  #include <boost/container_hash/hash_fwd.hpp>
15
17
 
16
18
  #include <functional>
17
19
  #include <memory>
18
20
 
21
+ #ifndef BOOST_NO_CXX17_HDR_MEMORY_RESOURCE
22
+ #include <memory_resource>
23
+ #endif
24
+
19
25
  namespace boost {
20
26
  namespace unordered {
21
27
 
@@ -43,6 +49,15 @@ namespace boost {
43
49
  typename concurrent_flat_map<K, T, H, P, A>::size_type erase_if(
44
50
  concurrent_flat_map<K, T, H, P, A>& c, Predicate pred);
45
51
 
52
+ #ifndef BOOST_NO_CXX17_HDR_MEMORY_RESOURCE
53
+ namespace pmr {
54
+ template <class Key, class T, class Hash = boost::hash<Key>,
55
+ class Pred = std::equal_to<Key> >
56
+ using concurrent_flat_map = boost::unordered::concurrent_flat_map<Key, T,
57
+ Hash, Pred, std::pmr::polymorphic_allocator<std::pair<Key const, T> > >;
58
+ } // namespace pmr
59
+ #endif
60
+
46
61
  } // namespace unordered
47
62
 
48
63
  using boost::unordered::concurrent_flat_map;
@@ -1,7 +1,7 @@
1
1
  /* Fast open-addressing concurrent hashset.
2
2
  *
3
3
  * Copyright 2023 Christian Mazakas.
4
- * Copyright 2023 Joaquin M Lopez Munoz.
4
+ * Copyright 2023-2024 Joaquin M Lopez Munoz.
5
5
  * Distributed under the Boost Software License, Version 1.0.
6
6
  * (See accompanying file LICENSE_1_0.txt or copy at
7
7
  * http://www.boost.org/LICENSE_1_0.txt)
@@ -72,6 +72,10 @@ namespace boost {
72
72
  typename boost::allocator_const_pointer<allocator_type>::type;
73
73
  static constexpr size_type bulk_visit_size = table_type::bulk_visit_size;
74
74
 
75
+ #if defined(BOOST_UNORDERED_ENABLE_STATS)
76
+ using stats = typename table_type::stats;
77
+ #endif
78
+
75
79
  concurrent_flat_set()
76
80
  : concurrent_flat_set(detail::foa::default_bucket_count)
77
81
  {
@@ -582,6 +586,14 @@ namespace boost {
582
586
  void rehash(size_type n) { table_.rehash(n); }
583
587
  void reserve(size_type n) { table_.reserve(n); }
584
588
 
589
+ #if defined(BOOST_UNORDERED_ENABLE_STATS)
590
+ /// Stats
591
+ ///
592
+ stats get_stats() const { return table_.get_stats(); }
593
+
594
+ void reset_stats() noexcept { table_.reset_stats(); }
595
+ #endif
596
+
585
597
  /// Observers
586
598
  ///
587
599
  allocator_type get_allocator() const noexcept
@@ -2,6 +2,7 @@
2
2
  *
3
3
  * Copyright 2023 Christian Mazakas.
4
4
  * Copyright 2023 Joaquin M Lopez Munoz.
5
+ * Copyright 2024 Braden Ganetsky.
5
6
  * Distributed under the Boost Software License, Version 1.0.
6
7
  * (See accompanying file LICENSE_1_0.txt or copy at
7
8
  * http://www.boost.org/LICENSE_1_0.txt)
@@ -12,11 +13,16 @@
12
13
  #ifndef BOOST_UNORDERED_CONCURRENT_FLAT_SET_FWD_HPP
13
14
  #define BOOST_UNORDERED_CONCURRENT_FLAT_SET_FWD_HPP
14
15
 
16
+ #include <boost/config.hpp>
15
17
  #include <boost/container_hash/hash_fwd.hpp>
16
18
 
17
19
  #include <functional>
18
20
  #include <memory>
19
21
 
22
+ #ifndef BOOST_NO_CXX17_HDR_MEMORY_RESOURCE
23
+ #include <memory_resource>
24
+ #endif
25
+
20
26
  namespace boost {
21
27
  namespace unordered {
22
28
 
@@ -44,6 +50,15 @@ namespace boost {
44
50
  typename concurrent_flat_set<K, H, P, A>::size_type erase_if(
45
51
  concurrent_flat_set<K, H, P, A>& c, Predicate pred);
46
52
 
53
+ #ifndef BOOST_NO_CXX17_HDR_MEMORY_RESOURCE
54
+ namespace pmr {
55
+ template <class Key, class Hash = boost::hash<Key>,
56
+ class Pred = std::equal_to<Key> >
57
+ using concurrent_flat_set = boost::unordered::concurrent_flat_set<Key,
58
+ Hash, Pred, std::pmr::polymorphic_allocator<Key> >;
59
+ } // namespace pmr
60
+ #endif
61
+
47
62
  } // namespace unordered
48
63
 
49
64
  using boost::unordered::concurrent_flat_set;
@@ -659,12 +659,7 @@ namespace boost {
659
659
  std::swap(buckets, other.buckets);
660
660
  std::swap(groups, other.groups);
661
661
 
662
- bool b = boost::allocator_propagate_on_container_swap<
663
- allocator_type>::type::value;
664
- if (b) {
665
- boost::core::invoke_swap(
666
- get_node_allocator(), other.get_node_allocator());
667
- }
662
+ swap_allocator_if_pocs(other);
668
663
  }
669
664
 
670
665
  node_allocator_type const& get_node_allocator() const
@@ -876,6 +871,27 @@ namespace boost {
876
871
  pbg->prev->next = pbg->next;
877
872
  pbg->prev = pbg->next = group_pointer();
878
873
  }
874
+
875
+ void swap_allocator_if_pocs(grouped_bucket_array& other)
876
+ {
877
+ using allocator_pocs =
878
+ typename boost::allocator_propagate_on_container_swap<
879
+ allocator_type>::type;
880
+ swap_allocator_if_pocs(
881
+ other, std::integral_constant<bool, allocator_pocs::value>());
882
+ }
883
+
884
+ void swap_allocator_if_pocs(
885
+ grouped_bucket_array& other, std::true_type /* propagate */)
886
+ {
887
+ boost::core::invoke_swap(
888
+ get_node_allocator(), other.get_node_allocator());
889
+ }
890
+
891
+ void swap_allocator_if_pocs(
892
+ grouped_bucket_array&, std::false_type /* don't propagate */)
893
+ {
894
+ }
879
895
  };
880
896
  } // namespace detail
881
897
  } // namespace unordered
@@ -469,6 +469,10 @@ public:
469
469
  using size_type=typename super::size_type;
470
470
  static constexpr std::size_t bulk_visit_size=16;
471
471
 
472
+ #if defined(BOOST_UNORDERED_ENABLE_STATS)
473
+ using stats=typename super::stats;
474
+ #endif
475
+
472
476
  private:
473
477
  template<typename Value,typename T>
474
478
  using enable_if_is_value_type=typename std::enable_if<
@@ -510,6 +514,7 @@ public:
510
514
  x.arrays=ah.release();
511
515
  x.size_ctrl.ml=x.initial_max_load();
512
516
  x.size_ctrl.size=0;
517
+ BOOST_UNORDERED_SWAP_STATS(this->cstats,x.cstats);
513
518
  }
514
519
 
515
520
  concurrent_table(compatible_nonconcurrent_table&& x):
@@ -965,6 +970,13 @@ public:
965
970
  super::reserve(n);
966
971
  }
967
972
 
973
+ #if defined(BOOST_UNORDERED_ENABLE_STATS)
974
+ /* already thread safe */
975
+
976
+ using super::get_stats;
977
+ using super::reset_stats;
978
+ #endif
979
+
968
980
  template<typename Predicate>
969
981
  friend std::size_t erase_if(concurrent_table& x,Predicate&& pr)
970
982
  {
@@ -1186,6 +1198,7 @@ private:
1186
1198
  GroupAccessMode access_mode,
1187
1199
  const Key& x,std::size_t pos0,std::size_t hash,F&& f)const
1188
1200
  {
1201
+ BOOST_UNORDERED_STATS_COUNTER(num_cmps);
1189
1202
  prober pb(pos0);
1190
1203
  do{
1191
1204
  auto pos=pb.get();
@@ -1197,19 +1210,27 @@ private:
1197
1210
  auto lck=access(access_mode,pos);
1198
1211
  do{
1199
1212
  auto n=unchecked_countr_zero(mask);
1200
- if(BOOST_LIKELY(
1201
- pg->is_occupied(n)&&bool(this->pred()(x,this->key_from(p[n]))))){
1202
- f(pg,n,p+n);
1203
- return 1;
1213
+ if(BOOST_LIKELY(pg->is_occupied(n))){
1214
+ BOOST_UNORDERED_INCREMENT_STATS_COUNTER(num_cmps);
1215
+ if(BOOST_LIKELY(bool(this->pred()(x,this->key_from(p[n]))))){
1216
+ f(pg,n,p+n);
1217
+ BOOST_UNORDERED_ADD_STATS(
1218
+ this->cstats.successful_lookup,(pb.length(),num_cmps));
1219
+ return 1;
1220
+ }
1204
1221
  }
1205
1222
  mask&=mask-1;
1206
1223
  }while(mask);
1207
1224
  }
1208
1225
  if(BOOST_LIKELY(pg->is_not_overflowed(hash))){
1226
+ BOOST_UNORDERED_ADD_STATS(
1227
+ this->cstats.unsuccessful_lookup,(pb.length(),num_cmps));
1209
1228
  return 0;
1210
1229
  }
1211
1230
  }
1212
1231
  while(BOOST_LIKELY(pb.next(this->arrays.groups_size_mask)));
1232
+ BOOST_UNORDERED_ADD_STATS(
1233
+ this->cstats.unsuccessful_lookup,(pb.length(),num_cmps));
1213
1234
  return 0;
1214
1235
  }
1215
1236
 
@@ -1244,6 +1265,7 @@ private:
1244
1265
 
1245
1266
  it=first;
1246
1267
  for(auto i=m;i--;++it){
1268
+ BOOST_UNORDERED_STATS_COUNTER(num_cmps);
1247
1269
  auto pos=positions[i];
1248
1270
  prober pb(pos);
1249
1271
  auto pg=this->arrays.groups()+pos;
@@ -1256,12 +1278,15 @@ private:
1256
1278
  auto lck=access(access_mode,pos);
1257
1279
  do{
1258
1280
  auto n=unchecked_countr_zero(mask);
1259
- if(BOOST_LIKELY(
1260
- pg->is_occupied(n)&&
1261
- bool(this->pred()(*it,this->key_from(p[n]))))){
1262
- f(cast_for(access_mode,type_policy::value_from(p[n])));
1263
- ++res;
1264
- goto next_key;
1281
+ if(BOOST_LIKELY(pg->is_occupied(n))){
1282
+ BOOST_UNORDERED_INCREMENT_STATS_COUNTER(num_cmps);
1283
+ if(bool(this->pred()(*it,this->key_from(p[n])))){
1284
+ f(cast_for(access_mode,type_policy::value_from(p[n])));
1285
+ ++res;
1286
+ BOOST_UNORDERED_ADD_STATS(
1287
+ this->cstats.successful_lookup,(pb.length(),num_cmps));
1288
+ goto next_key;
1289
+ }
1265
1290
  }
1266
1291
  mask&=mask-1;
1267
1292
  }while(mask);
@@ -1270,6 +1295,8 @@ private:
1270
1295
  do{
1271
1296
  if(BOOST_LIKELY(pg->is_not_overflowed(hashes[i]))||
1272
1297
  BOOST_UNLIKELY(!pb.next(this->arrays.groups_size_mask))){
1298
+ BOOST_UNORDERED_ADD_STATS(
1299
+ this->cstats.unsuccessful_lookup,(pb.length(),num_cmps));
1273
1300
  goto next_key;
1274
1301
  }
1275
1302
  pos=pb.get();
@@ -1490,6 +1517,7 @@ private:
1490
1517
  this->construct_element(p,std::forward<Args>(args)...);
1491
1518
  rslot.commit();
1492
1519
  rsize.commit();
1520
+ BOOST_UNORDERED_ADD_STATS(this->cstats.insertion,(pb.length()));
1493
1521
  return 1;
1494
1522
  }
1495
1523
  pg->mark_overflow(hash);