passenger 6.2.1 → 6.2.2

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.
Files changed (270) hide show
  1. checksums.yaml +4 -4
  2. data/CHANGELOG +37 -15
  3. data/build/cxx_tests.rb +2 -0
  4. data/build/support/cxx_dependency_map.rb +3 -63
  5. data/src/agent/Core/Config.h +1 -1
  6. data/src/agent/Core/Controller/Config.h +1 -1
  7. data/src/agent/Shared/ApiServerUtils.h +1 -1
  8. data/src/agent/Watchdog/Config.h +1 -1
  9. data/src/apache2_module/Hooks.cpp +13 -0
  10. data/src/apache2_module/Utils.h +14 -0
  11. data/src/cxx_supportlib/Constants.h +1 -1
  12. data/src/cxx_supportlib/FileTools/FileManip.cpp +27 -3
  13. data/src/cxx_supportlib/InstanceDirectory.h +30 -3
  14. data/src/cxx_supportlib/ServerKit/Errors.h +1 -1
  15. data/src/cxx_supportlib/ServerKit/HttpHeaderParser.h +1 -1
  16. data/src/cxx_supportlib/ServerKit/HttpHeaderParserState.h +1 -1
  17. data/src/cxx_supportlib/ServerKit/HttpRequest.h +1 -1
  18. data/src/cxx_supportlib/ServerKit/llerrors.h +3 -3
  19. data/src/cxx_supportlib/ServerKit/llversion.h +1 -1
  20. data/src/cxx_supportlib/{ServerKit/llhttp_api.c → vendor-copy/llhttp/api.c} +30 -23
  21. data/src/cxx_supportlib/{ServerKit → vendor-copy/llhttp}/llhttp.c +1756 -1645
  22. data/src/cxx_supportlib/{ServerKit → vendor-copy/llhttp}/llhttp.h +35 -13
  23. data/src/cxx_supportlib/vendor-modified/boost/algorithm/string/classification.hpp +19 -0
  24. data/src/cxx_supportlib/vendor-modified/boost/algorithm/string/formatter.hpp +1 -1
  25. data/src/cxx_supportlib/vendor-modified/boost/algorithm/string/trim_all.hpp +0 -2
  26. data/src/cxx_supportlib/vendor-modified/boost/assert.hpp +20 -13
  27. data/src/cxx_supportlib/vendor-modified/boost/atomic/detail/core_arch_ops_gcc_x86.hpp +2 -2
  28. data/src/cxx_supportlib/vendor-modified/boost/atomic/thread_pause.hpp +4 -0
  29. data/src/cxx_supportlib/vendor-modified/boost/bind/mem_fn.hpp +1 -1
  30. data/src/cxx_supportlib/vendor-modified/boost/circular_buffer/debug.hpp +4 -0
  31. data/src/cxx_supportlib/vendor-modified/boost/config/assert_cxx03.hpp +1 -1
  32. data/src/cxx_supportlib/vendor-modified/boost/config/assert_cxx11.hpp +1 -1
  33. data/src/cxx_supportlib/vendor-modified/boost/config/assert_cxx14.hpp +1 -1
  34. data/src/cxx_supportlib/vendor-modified/boost/config/assert_cxx17.hpp +1 -1
  35. data/src/cxx_supportlib/vendor-modified/boost/config/assert_cxx20.hpp +1 -1
  36. data/src/cxx_supportlib/vendor-modified/boost/config/assert_cxx23.hpp +1 -1
  37. data/src/cxx_supportlib/vendor-modified/boost/config/auto_link.hpp +6 -1
  38. data/src/cxx_supportlib/vendor-modified/boost/config/compiler/clang_version.hpp +10 -1
  39. data/src/cxx_supportlib/vendor-modified/boost/config/compiler/visualc.hpp +5 -3
  40. data/src/cxx_supportlib/vendor-modified/boost/config/detail/cxx_composite.hpp +1 -1
  41. data/src/cxx_supportlib/vendor-modified/boost/config/workaround.hpp +5 -0
  42. data/src/cxx_supportlib/vendor-modified/boost/container/adaptive_pool.hpp +57 -53
  43. data/src/cxx_supportlib/vendor-modified/boost/container/allocator.hpp +10 -10
  44. data/src/cxx_supportlib/vendor-modified/boost/container/allocator_traits.hpp +34 -2
  45. data/src/cxx_supportlib/vendor-modified/boost/container/container_fwd.hpp +14 -2
  46. data/src/cxx_supportlib/vendor-modified/boost/container/deque.hpp +176 -2287
  47. data/src/cxx_supportlib/vendor-modified/boost/container/detail/adaptive_node_pool.hpp +13 -9
  48. data/src/cxx_supportlib/vendor-modified/boost/container/detail/adaptive_node_pool_impl.hpp +186 -70
  49. data/src/cxx_supportlib/vendor-modified/boost/container/detail/algorithm.hpp +2 -2
  50. data/src/cxx_supportlib/vendor-modified/boost/container/detail/aligned_allocation.hpp +149 -0
  51. data/src/cxx_supportlib/vendor-modified/boost/container/detail/alloc_helpers.hpp +35 -0
  52. data/src/cxx_supportlib/vendor-modified/boost/container/detail/alloc_lib.h +1 -0
  53. data/src/cxx_supportlib/vendor-modified/boost/container/detail/bit_utilities.hpp +133 -0
  54. data/src/cxx_supportlib/vendor-modified/boost/container/detail/compare_functors.hpp +18 -3
  55. data/src/cxx_supportlib/vendor-modified/boost/container/detail/config_begin.hpp +5 -0
  56. data/src/cxx_supportlib/vendor-modified/boost/container/detail/config_end.hpp +4 -0
  57. data/src/cxx_supportlib/vendor-modified/boost/container/detail/container_rebind.hpp +1 -1
  58. data/src/cxx_supportlib/vendor-modified/boost/container/detail/copy_move_algo.hpp +20 -10
  59. data/src/cxx_supportlib/vendor-modified/boost/container/detail/deque_impl.hpp +2744 -0
  60. data/src/cxx_supportlib/vendor-modified/boost/container/detail/dispatch_uses_allocator.hpp +202 -104
  61. data/src/cxx_supportlib/vendor-modified/boost/container/detail/dlmalloc.hpp +5 -4
  62. data/src/cxx_supportlib/vendor-modified/boost/container/detail/flat_tree.hpp +161 -85
  63. data/src/cxx_supportlib/vendor-modified/boost/container/detail/is_constructible.hpp +180 -0
  64. data/src/cxx_supportlib/vendor-modified/boost/container/detail/iterators.hpp +3 -2
  65. data/src/cxx_supportlib/vendor-modified/boost/container/detail/math_functions.hpp +12 -0
  66. data/src/cxx_supportlib/vendor-modified/boost/container/detail/mpl.hpp +16 -0
  67. data/src/cxx_supportlib/vendor-modified/boost/container/detail/mutex.hpp +1 -1
  68. data/src/cxx_supportlib/vendor-modified/boost/container/detail/next_capacity.hpp +9 -1
  69. data/src/cxx_supportlib/vendor-modified/boost/container/detail/node_pool.hpp +18 -14
  70. data/src/cxx_supportlib/vendor-modified/boost/container/detail/node_pool_impl.hpp +256 -41
  71. data/src/cxx_supportlib/vendor-modified/boost/container/detail/operator_new_helpers.hpp +75 -24
  72. data/src/cxx_supportlib/vendor-modified/boost/container/detail/pair.hpp +1 -56
  73. data/src/cxx_supportlib/vendor-modified/boost/container/detail/placement_new.hpp +16 -3
  74. data/src/cxx_supportlib/vendor-modified/boost/container/detail/pool_common_alloc.hpp +1 -7
  75. data/src/cxx_supportlib/vendor-modified/boost/container/detail/range_utils.hpp +196 -0
  76. data/src/cxx_supportlib/vendor-modified/boost/container/detail/std_fwd.hpp +33 -1
  77. data/src/cxx_supportlib/vendor-modified/boost/container/detail/tree.hpp +124 -69
  78. data/src/cxx_supportlib/vendor-modified/boost/container/detail/workaround.hpp +109 -7
  79. data/src/cxx_supportlib/vendor-modified/boost/container/devector.hpp +168 -162
  80. data/src/cxx_supportlib/vendor-modified/boost/container/experimental/nest.hpp +2978 -0
  81. data/src/cxx_supportlib/vendor-modified/boost/container/experimental/pmr/nest.hpp +45 -0
  82. data/src/cxx_supportlib/vendor-modified/boost/container/experimental/segmented_all_of.hpp +43 -0
  83. data/src/cxx_supportlib/vendor-modified/boost/container/experimental/segmented_any_of.hpp +42 -0
  84. data/src/cxx_supportlib/vendor-modified/boost/container/experimental/segmented_copy.hpp +229 -0
  85. data/src/cxx_supportlib/vendor-modified/boost/container/experimental/segmented_copy_if.hpp +270 -0
  86. data/src/cxx_supportlib/vendor-modified/boost/container/experimental/segmented_copy_n.hpp +308 -0
  87. data/src/cxx_supportlib/vendor-modified/boost/container/experimental/segmented_count.hpp +101 -0
  88. data/src/cxx_supportlib/vendor-modified/boost/container/experimental/segmented_count_if.hpp +100 -0
  89. data/src/cxx_supportlib/vendor-modified/boost/container/experimental/segmented_equal.hpp +268 -0
  90. data/src/cxx_supportlib/vendor-modified/boost/container/experimental/segmented_fill.hpp +101 -0
  91. data/src/cxx_supportlib/vendor-modified/boost/container/experimental/segmented_fill_n.hpp +171 -0
  92. data/src/cxx_supportlib/vendor-modified/boost/container/experimental/segmented_find.hpp +110 -0
  93. data/src/cxx_supportlib/vendor-modified/boost/container/experimental/segmented_find_if.hpp +110 -0
  94. data/src/cxx_supportlib/vendor-modified/boost/container/experimental/segmented_find_if_not.hpp +43 -0
  95. data/src/cxx_supportlib/vendor-modified/boost/container/experimental/segmented_find_last.hpp +179 -0
  96. data/src/cxx_supportlib/vendor-modified/boost/container/experimental/segmented_find_last_if.hpp +179 -0
  97. data/src/cxx_supportlib/vendor-modified/boost/container/experimental/segmented_find_last_if_not.hpp +43 -0
  98. data/src/cxx_supportlib/vendor-modified/boost/container/experimental/segmented_for_each.hpp +92 -0
  99. data/src/cxx_supportlib/vendor-modified/boost/container/experimental/segmented_generate.hpp +90 -0
  100. data/src/cxx_supportlib/vendor-modified/boost/container/experimental/segmented_generate_n.hpp +162 -0
  101. data/src/cxx_supportlib/vendor-modified/boost/container/experimental/segmented_is_partitioned.hpp +46 -0
  102. data/src/cxx_supportlib/vendor-modified/boost/container/experimental/segmented_is_sorted.hpp +49 -0
  103. data/src/cxx_supportlib/vendor-modified/boost/container/experimental/segmented_is_sorted_until.hpp +169 -0
  104. data/src/cxx_supportlib/vendor-modified/boost/container/experimental/segmented_iterator_traits.hpp +382 -0
  105. data/src/cxx_supportlib/vendor-modified/boost/container/experimental/segmented_merge.hpp +428 -0
  106. data/src/cxx_supportlib/vendor-modified/boost/container/experimental/segmented_mismatch.hpp +350 -0
  107. data/src/cxx_supportlib/vendor-modified/boost/container/experimental/segmented_none_of.hpp +98 -0
  108. data/src/cxx_supportlib/vendor-modified/boost/container/experimental/segmented_partition.hpp +296 -0
  109. data/src/cxx_supportlib/vendor-modified/boost/container/experimental/segmented_partition_copy.hpp +105 -0
  110. data/src/cxx_supportlib/vendor-modified/boost/container/experimental/segmented_partition_point.hpp +116 -0
  111. data/src/cxx_supportlib/vendor-modified/boost/container/experimental/segmented_remove.hpp +57 -0
  112. data/src/cxx_supportlib/vendor-modified/boost/container/experimental/segmented_remove_copy.hpp +207 -0
  113. data/src/cxx_supportlib/vendor-modified/boost/container/experimental/segmented_remove_copy_if.hpp +223 -0
  114. data/src/cxx_supportlib/vendor-modified/boost/container/experimental/segmented_remove_if.hpp +57 -0
  115. data/src/cxx_supportlib/vendor-modified/boost/container/experimental/segmented_replace.hpp +90 -0
  116. data/src/cxx_supportlib/vendor-modified/boost/container/experimental/segmented_replace_if.hpp +90 -0
  117. data/src/cxx_supportlib/vendor-modified/boost/container/experimental/segmented_reverse.hpp +245 -0
  118. data/src/cxx_supportlib/vendor-modified/boost/container/experimental/segmented_reverse_copy.hpp +229 -0
  119. data/src/cxx_supportlib/vendor-modified/boost/container/experimental/segmented_search.hpp +211 -0
  120. data/src/cxx_supportlib/vendor-modified/boost/container/experimental/segmented_search_n.hpp +476 -0
  121. data/src/cxx_supportlib/vendor-modified/boost/container/experimental/segmented_set_difference.hpp +300 -0
  122. data/src/cxx_supportlib/vendor-modified/boost/container/experimental/segmented_set_intersection.hpp +287 -0
  123. data/src/cxx_supportlib/vendor-modified/boost/container/experimental/segmented_set_symmetric_difference.hpp +306 -0
  124. data/src/cxx_supportlib/vendor-modified/boost/container/experimental/segmented_set_union.hpp +294 -0
  125. data/src/cxx_supportlib/vendor-modified/boost/container/experimental/segmented_stable_partition.hpp +153 -0
  126. data/src/cxx_supportlib/vendor-modified/boost/container/experimental/segmented_swap_ranges.hpp +92 -0
  127. data/src/cxx_supportlib/vendor-modified/boost/container/experimental/segmented_transform.hpp +93 -0
  128. data/src/cxx_supportlib/vendor-modified/boost/container/experimental/wrapped_iterator.hpp +142 -0
  129. data/src/cxx_supportlib/vendor-modified/boost/container/flat_map.hpp +642 -417
  130. data/src/cxx_supportlib/vendor-modified/boost/container/flat_set.hpp +141 -30
  131. data/src/cxx_supportlib/vendor-modified/boost/container/hub.hpp +2426 -0
  132. data/src/cxx_supportlib/vendor-modified/boost/container/list.hpp +65 -57
  133. data/src/cxx_supportlib/vendor-modified/boost/container/map.hpp +247 -68
  134. data/src/cxx_supportlib/vendor-modified/boost/container/new_allocator.hpp +7 -0
  135. data/src/cxx_supportlib/vendor-modified/boost/container/node_allocator.hpp +39 -33
  136. data/src/cxx_supportlib/vendor-modified/boost/container/options.hpp +156 -23
  137. data/src/cxx_supportlib/vendor-modified/boost/container/pmr/global_resource.hpp +3 -3
  138. data/src/cxx_supportlib/vendor-modified/boost/container/pmr/hub.hpp +43 -0
  139. data/src/cxx_supportlib/vendor-modified/boost/container/pmr/memory_resource.hpp +5 -3
  140. data/src/cxx_supportlib/vendor-modified/boost/container/pmr/monotonic_buffer_resource.hpp +1 -0
  141. data/src/cxx_supportlib/vendor-modified/boost/container/pmr/polymorphic_allocator.hpp +1 -1
  142. data/src/cxx_supportlib/vendor-modified/boost/container/pmr/resource_adaptor.hpp +4 -0
  143. data/src/cxx_supportlib/vendor-modified/boost/container/pmr/segtor.hpp +45 -0
  144. data/src/cxx_supportlib/vendor-modified/boost/container/scoped_allocator.hpp +5 -4
  145. data/src/cxx_supportlib/vendor-modified/boost/container/segtor.hpp +905 -0
  146. data/src/cxx_supportlib/vendor-modified/boost/container/set.hpp +148 -35
  147. data/src/cxx_supportlib/vendor-modified/boost/container/slist.hpp +59 -52
  148. data/src/cxx_supportlib/vendor-modified/boost/container/small_vector.hpp +632 -5
  149. data/src/cxx_supportlib/vendor-modified/boost/container/stable_vector.hpp +66 -60
  150. data/src/cxx_supportlib/vendor-modified/boost/container/static_vector.hpp +46 -1
  151. data/src/cxx_supportlib/vendor-modified/boost/container/string.hpp +612 -317
  152. data/src/cxx_supportlib/vendor-modified/boost/container/uses_allocator.hpp +54 -111
  153. data/src/cxx_supportlib/vendor-modified/boost/container/uses_allocator_construction.hpp +100 -0
  154. data/src/cxx_supportlib/vendor-modified/boost/container/uses_allocator_fwd.hpp +1 -3
  155. data/src/cxx_supportlib/vendor-modified/boost/container/vector.hpp +233 -116
  156. data/src/cxx_supportlib/vendor-modified/boost/container_hash/hash.hpp +5 -1
  157. data/src/cxx_supportlib/vendor-modified/boost/core/lightweight_test.hpp +17 -10
  158. data/src/cxx_supportlib/vendor-modified/boost/date_time/period.hpp +1 -3
  159. data/src/cxx_supportlib/vendor-modified/boost/describe/detail/config.hpp +16 -0
  160. data/src/cxx_supportlib/vendor-modified/boost/exception/detail/encoder.hpp +114 -0
  161. data/src/cxx_supportlib/vendor-modified/boost/exception/detail/error_info_impl.hpp +4 -0
  162. data/src/cxx_supportlib/vendor-modified/boost/exception/detail/requires_cxx11.hpp +1 -1
  163. data/src/cxx_supportlib/vendor-modified/boost/exception/detail/type_info.hpp +211 -1
  164. data/src/cxx_supportlib/vendor-modified/boost/exception/diagnostic_information.hpp +59 -0
  165. data/src/cxx_supportlib/vendor-modified/boost/exception/exception.hpp +6 -0
  166. data/src/cxx_supportlib/vendor-modified/boost/exception/info.hpp +34 -0
  167. data/src/cxx_supportlib/vendor-modified/boost/intrusive/avltree.hpp +0 -1
  168. data/src/cxx_supportlib/vendor-modified/boost/intrusive/bstree.hpp +12 -3
  169. data/src/cxx_supportlib/vendor-modified/boost/intrusive/derivation_value_traits.hpp +1 -1
  170. data/src/cxx_supportlib/vendor-modified/boost/intrusive/detail/ebo_functor_holder.hpp +29 -174
  171. data/src/cxx_supportlib/vendor-modified/boost/intrusive/detail/generic_hook.hpp +18 -2
  172. data/src/cxx_supportlib/vendor-modified/boost/intrusive/detail/key_nodeptr_comp.hpp +0 -1
  173. data/src/cxx_supportlib/vendor-modified/boost/intrusive/detail/workaround.hpp +4 -5
  174. data/src/cxx_supportlib/vendor-modified/boost/intrusive/hashtable.hpp +20 -11
  175. data/src/cxx_supportlib/vendor-modified/boost/intrusive/list.hpp +42 -14
  176. data/src/cxx_supportlib/vendor-modified/boost/intrusive/slist.hpp +58 -22
  177. data/src/cxx_supportlib/vendor-modified/boost/intrusive/unordered_set.hpp +3 -1
  178. data/src/cxx_supportlib/vendor-modified/boost/iterator/advance.hpp +5 -1
  179. data/src/cxx_supportlib/vendor-modified/boost/iterator/distance.hpp +8 -2
  180. data/src/cxx_supportlib/vendor-modified/boost/iterator/is_iterator.hpp +9 -0
  181. data/src/cxx_supportlib/vendor-modified/boost/lexical_cast/bad_lexical_cast.hpp +11 -1
  182. data/src/cxx_supportlib/vendor-modified/boost/lexical_cast/detail/buffer_view.hpp +9 -1
  183. data/src/cxx_supportlib/vendor-modified/boost/lexical_cast/detail/config.hpp +22 -0
  184. data/src/cxx_supportlib/vendor-modified/boost/lexical_cast/detail/converter_lexical.hpp +15 -7
  185. data/src/cxx_supportlib/vendor-modified/boost/lexical_cast/detail/converter_lexical_streams.hpp +23 -11
  186. data/src/cxx_supportlib/vendor-modified/boost/lexical_cast/detail/converter_numeric.hpp +11 -1
  187. data/src/cxx_supportlib/vendor-modified/boost/lexical_cast/detail/inf_nan.hpp +9 -1
  188. data/src/cxx_supportlib/vendor-modified/boost/lexical_cast/detail/is_character.hpp +11 -2
  189. data/src/cxx_supportlib/vendor-modified/boost/lexical_cast/detail/lcast_basic_unlockedbuf.hpp +10 -1
  190. data/src/cxx_supportlib/vendor-modified/boost/lexical_cast/detail/lcast_char_constants.hpp +8 -1
  191. data/src/cxx_supportlib/vendor-modified/boost/{detail → lexical_cast/detail}/lcast_precision.hpp +13 -1
  192. data/src/cxx_supportlib/vendor-modified/boost/lexical_cast/detail/lcast_unsigned_converters.hpp +11 -1
  193. data/src/cxx_supportlib/vendor-modified/boost/lexical_cast/detail/widest_char.hpp +10 -2
  194. data/src/cxx_supportlib/vendor-modified/boost/lexical_cast/try_lexical_convert.hpp +15 -2
  195. data/src/cxx_supportlib/vendor-modified/boost/lexical_cast.hpp +11 -1
  196. data/src/cxx_supportlib/vendor-modified/boost/libs/thread/src/pthread/once_atomic.cpp +1 -1
  197. data/src/cxx_supportlib/vendor-modified/boost/libs/thread/src/pthread/thread.cpp +48 -46
  198. data/src/cxx_supportlib/vendor-modified/boost/move/detail/meta_utils.hpp +23 -0
  199. data/src/cxx_supportlib/vendor-modified/boost/move/detail/move_helpers.hpp +24 -24
  200. data/src/cxx_supportlib/vendor-modified/boost/move/detail/nsec_clock.hpp +12 -4
  201. data/src/cxx_supportlib/vendor-modified/boost/move/detail/type_traits.hpp +76 -0
  202. data/src/cxx_supportlib/vendor-modified/boost/move/detail/workaround.hpp +1 -1
  203. data/src/cxx_supportlib/vendor-modified/boost/move/traits.hpp +11 -0
  204. data/src/cxx_supportlib/vendor-modified/boost/mp11/algorithm.hpp +58 -37
  205. data/src/cxx_supportlib/vendor-modified/boost/mp11/detail/mp_copy_if.hpp +1 -2
  206. data/src/cxx_supportlib/vendor-modified/boost/mp11/detail/mp_map_find.hpp +17 -9
  207. data/src/cxx_supportlib/vendor-modified/boost/mp11/detail/mp_remove_if.hpp +1 -2
  208. data/src/cxx_supportlib/vendor-modified/boost/mp11/integer_sequence.hpp +6 -0
  209. data/src/cxx_supportlib/vendor-modified/boost/mp11/version.hpp +1 -1
  210. data/src/cxx_supportlib/vendor-modified/boost/none_t.hpp +6 -1
  211. data/src/cxx_supportlib/vendor-modified/boost/optional/detail/optional_common_defs.hpp +188 -0
  212. data/src/cxx_supportlib/vendor-modified/boost/optional/detail/optional_factory_support.hpp +0 -6
  213. data/src/cxx_supportlib/vendor-modified/boost/optional/detail/optional_hash.hpp +1 -1
  214. data/src/cxx_supportlib/vendor-modified/boost/optional/detail/optional_nonmember_interface.hpp +117 -0
  215. data/src/cxx_supportlib/vendor-modified/boost/optional/detail/optional_reference_spec.hpp +108 -83
  216. data/src/cxx_supportlib/vendor-modified/boost/optional/detail/optional_relops.hpp +39 -39
  217. data/src/cxx_supportlib/vendor-modified/boost/optional/detail/optional_select_implementation.hpp +37 -0
  218. data/src/cxx_supportlib/vendor-modified/boost/optional/detail/optional_swap.hpp +1 -1
  219. data/src/cxx_supportlib/vendor-modified/boost/optional/detail/optional_trivially_copyable_base.hpp +8 -8
  220. data/src/cxx_supportlib/vendor-modified/boost/optional/detail/union_optional.hpp +724 -0
  221. data/src/cxx_supportlib/vendor-modified/boost/optional/optional.hpp +93 -220
  222. data/src/cxx_supportlib/vendor-modified/boost/optional/optional_fwd.hpp +14 -4
  223. data/src/cxx_supportlib/vendor-modified/boost/optional/optional_io.hpp +1 -1
  224. data/src/cxx_supportlib/vendor-modified/boost/random/binomial_distribution.hpp +1 -1
  225. data/src/cxx_supportlib/vendor-modified/boost/random/uniform_int_distribution.hpp +1 -1
  226. data/src/cxx_supportlib/vendor-modified/boost/rational.hpp +1 -1
  227. data/src/cxx_supportlib/vendor-modified/boost/static_assert.hpp +4 -6
  228. data/src/cxx_supportlib/vendor-modified/boost/system/api_config.hpp +1 -1
  229. data/src/cxx_supportlib/vendor-modified/boost/system/detail/config.hpp +16 -0
  230. data/src/cxx_supportlib/vendor-modified/boost/system/detail/error_category.hpp +13 -13
  231. data/src/cxx_supportlib/vendor-modified/boost/system/detail/error_category_impl.hpp +5 -5
  232. data/src/cxx_supportlib/vendor-modified/boost/thread/concurrent_queues/detail/sync_deque_base.hpp +3 -2
  233. data/src/cxx_supportlib/vendor-modified/boost/thread/concurrent_queues/detail/sync_queue_base.hpp +3 -2
  234. data/src/cxx_supportlib/vendor-modified/boost/thread/detail/thread.hpp +2 -1
  235. data/src/cxx_supportlib/vendor-modified/boost/thread/experimental/parallel/v2/task_region.hpp +1 -1
  236. data/src/cxx_supportlib/vendor-modified/boost/thread/future.hpp +30 -28
  237. data/src/cxx_supportlib/vendor-modified/boost/thread/pthread/once.hpp +6 -3
  238. data/src/cxx_supportlib/vendor-modified/boost/thread/pthread/once_atomic.hpp +5 -1
  239. data/src/cxx_supportlib/vendor-modified/boost/thread/pthread/pthread_helpers.hpp +1 -0
  240. data/src/cxx_supportlib/vendor-modified/boost/thread/pthread/shared_mutex.hpp +16 -16
  241. data/src/cxx_supportlib/vendor-modified/boost/thread/v2/shared_mutex.hpp +26 -26
  242. data/src/cxx_supportlib/vendor-modified/boost/unordered/concurrent_flat_map.hpp +196 -6
  243. data/src/cxx_supportlib/vendor-modified/boost/unordered/concurrent_flat_set.hpp +191 -6
  244. data/src/cxx_supportlib/vendor-modified/boost/unordered/concurrent_node_map.hpp +196 -5
  245. data/src/cxx_supportlib/vendor-modified/boost/unordered/concurrent_node_set.hpp +192 -5
  246. data/src/cxx_supportlib/vendor-modified/boost/unordered/detail/foa/concurrent_table.hpp +3 -3
  247. data/src/cxx_supportlib/vendor-modified/boost/unordered/detail/foa/core.hpp +2 -2
  248. data/src/cxx_supportlib/vendor-modified/boost/unordered/detail/foa/table.hpp +3 -3
  249. data/src/cxx_supportlib/vendor-modified/boost/unordered/detail/implementation.hpp +52 -16
  250. data/src/cxx_supportlib/vendor-modified/boost/unordered/detail/ranges_support.hpp +104 -0
  251. data/src/cxx_supportlib/vendor-modified/boost/unordered/detail/type_traits.hpp +1 -14
  252. data/src/cxx_supportlib/vendor-modified/boost/unordered/detail/unordered_printers.hpp +10 -4
  253. data/src/cxx_supportlib/vendor-modified/boost/unordered/unordered_flat_map.hpp +121 -3
  254. data/src/cxx_supportlib/vendor-modified/boost/unordered/unordered_flat_set.hpp +118 -3
  255. data/src/cxx_supportlib/vendor-modified/boost/unordered/unordered_map.hpp +338 -1
  256. data/src/cxx_supportlib/vendor-modified/boost/unordered/unordered_node_map.hpp +121 -3
  257. data/src/cxx_supportlib/vendor-modified/boost/unordered/unordered_node_set.hpp +118 -3
  258. data/src/cxx_supportlib/vendor-modified/boost/unordered/unordered_set.hpp +333 -1
  259. data/src/cxx_supportlib/vendor-modified/boost/version.hpp +2 -2
  260. data/src/cxx_supportlib/vendor-modified/jsoncpp/json-forwards.h +276 -143
  261. data/src/cxx_supportlib/vendor-modified/jsoncpp/json.h +1262 -771
  262. data/src/cxx_supportlib/vendor-modified/jsoncpp/jsoncpp.cpp +1704 -1586
  263. data/src/nginx_module/ContentHandler.c +35 -0
  264. data/src/ruby_supportlib/phusion_passenger/common_library.rb +6 -6
  265. data/src/ruby_supportlib/phusion_passenger/utils/json.rb +25 -2
  266. data/src/ruby_supportlib/phusion_passenger/vendor/daemon_controller.rb +12 -1
  267. data/src/ruby_supportlib/phusion_passenger.rb +1 -1
  268. metadata +73 -8
  269. data/src/cxx_supportlib/vendor-modified/boost/optional/detail/optional_utility.hpp +0 -41
  270. /data/src/cxx_supportlib/{ServerKit/llhttp_http.c → vendor-copy/llhttp/http.c} +0 -0
@@ -47,6 +47,7 @@ template< std::size_t NodeSize
47
47
  , std::size_t NodesPerBlock
48
48
  , std::size_t MaxFreeBlocks
49
49
  , std::size_t OverheadPercent
50
+ , std::size_t NodeAlign
50
51
  >
51
52
  class private_adaptive_node_pool
52
53
  : public private_adaptive_node_pool_impl_ct
@@ -55,6 +56,7 @@ class private_adaptive_node_pool
55
56
  , NodeSize
56
57
  , NodesPerBlock
57
58
  , OverheadPercent
59
+ , NodeAlign
58
60
  , unsigned(OverheadPercent == 0)*::boost::container::adaptive_pool_flag::align_only
59
61
  | ::boost::container::adaptive_pool_flag::size_ordered
60
62
  | ::boost::container::adaptive_pool_flag::address_ordered
@@ -66,6 +68,7 @@ class private_adaptive_node_pool
66
68
  , NodeSize
67
69
  , NodesPerBlock
68
70
  , OverheadPercent
71
+ , NodeAlign
69
72
  , unsigned(OverheadPercent == 0)*::boost::container::adaptive_pool_flag::align_only
70
73
  | ::boost::container::adaptive_pool_flag::size_ordered
71
74
  | ::boost::container::adaptive_pool_flag::address_ordered
@@ -92,20 +95,21 @@ template< std::size_t NodeSize
92
95
  , std::size_t NodesPerBlock
93
96
  , std::size_t MaxFreeBlocks
94
97
  , std::size_t OverheadPercent
98
+ , std::size_t NodeAlign = 0
95
99
  >
96
100
  class shared_adaptive_node_pool
97
101
  : public private_adaptive_node_pool
98
- <NodeSize, NodesPerBlock, MaxFreeBlocks, OverheadPercent>
102
+ <NodeSize, NodesPerBlock, MaxFreeBlocks, OverheadPercent, NodeAlign>
99
103
  {
100
104
  private:
101
105
  typedef private_adaptive_node_pool
102
- <NodeSize, NodesPerBlock, MaxFreeBlocks, OverheadPercent> private_node_allocator_t;
106
+ <NodeSize, NodesPerBlock, MaxFreeBlocks, OverheadPercent, NodeAlign> private_adaptive_node_pool_t;
103
107
  public:
104
- typedef typename private_node_allocator_t::multiallocation_chain multiallocation_chain;
108
+ typedef typename private_adaptive_node_pool_t::multiallocation_chain multiallocation_chain;
105
109
 
106
110
  //!Constructor. Never throws
107
111
  shared_adaptive_node_pool()
108
- : private_node_allocator_t(){}
112
+ : private_adaptive_node_pool_t(){}
109
113
 
110
114
  //!Destructor. Deallocates all allocated blocks. Never throws
111
115
  ~shared_adaptive_node_pool()
@@ -117,7 +121,7 @@ class shared_adaptive_node_pool
117
121
  //-----------------------
118
122
  scoped_lock<default_mutex> guard(mutex_);
119
123
  //-----------------------
120
- return private_node_allocator_t::allocate_node();
124
+ return private_adaptive_node_pool_t::allocate_node();
121
125
  }
122
126
 
123
127
  //!Deallocates an array pointed by ptr. Never throws
@@ -126,7 +130,7 @@ class shared_adaptive_node_pool
126
130
  //-----------------------
127
131
  scoped_lock<default_mutex> guard(mutex_);
128
132
  //-----------------------
129
- private_node_allocator_t::deallocate_node(ptr);
133
+ private_adaptive_node_pool_t::deallocate_node(ptr);
130
134
  }
131
135
 
132
136
  //!Allocates a singly linked list of n nodes ending in null pointer.
@@ -136,7 +140,7 @@ class shared_adaptive_node_pool
136
140
  //-----------------------
137
141
  scoped_lock<default_mutex> guard(mutex_);
138
142
  //-----------------------
139
- return private_node_allocator_t::allocate_nodes(n, chain);
143
+ return private_adaptive_node_pool_t::allocate_nodes(n, chain);
140
144
  }
141
145
 
142
146
  void deallocate_nodes(multiallocation_chain &chain)
@@ -144,7 +148,7 @@ class shared_adaptive_node_pool
144
148
  //-----------------------
145
149
  scoped_lock<default_mutex> guard(mutex_);
146
150
  //-----------------------
147
- private_node_allocator_t::deallocate_nodes(chain);
151
+ private_adaptive_node_pool_t::deallocate_nodes(chain);
148
152
  }
149
153
 
150
154
  //!Deallocates all the free blocks of memory. Never throws
@@ -153,7 +157,7 @@ class shared_adaptive_node_pool
153
157
  //-----------------------
154
158
  scoped_lock<default_mutex> guard(mutex_);
155
159
  //-----------------------
156
- private_node_allocator_t::deallocate_free_blocks();
160
+ private_adaptive_node_pool_t::deallocate_free_blocks();
157
161
  }
158
162
 
159
163
  private:
@@ -35,6 +35,8 @@
35
35
  #include <boost/move/detail/to_raw_pointer.hpp>
36
36
  #include <boost/move/detail/force_ptr.hpp>
37
37
  #include <boost/container/detail/type_traits.hpp>
38
+ #include <boost/container/detail/node_pool_impl.hpp>
39
+
38
40
  // intrusive
39
41
  #include <boost/intrusive/pointer_traits.hpp>
40
42
  #include <boost/intrusive/set.hpp>
@@ -375,6 +377,7 @@ inline void candidate_power_of_2_rt ( std::size_t initial_alignment
375
377
  , std::size_t &num_subblocks
376
378
  , std::size_t &real_num_node)
377
379
  {
380
+
378
381
  bool overhead_satisfied = false;
379
382
  std::size_t num_b_subblock = 0;
380
383
  std::size_t total_nodes = 0;
@@ -453,9 +456,27 @@ class private_adaptive_node_pool_impl_common
453
456
  typedef typename adaptive_pool_types_t::hdr_offset_holder hdr_offset_holder;
454
457
  typedef private_adaptive_node_pool_impl_common this_type;
455
458
 
456
- BOOST_STATIC_CONSTEXPR size_type MaxAlign = alignment_of<void_pointer>::value;
457
- BOOST_STATIC_CONSTEXPR size_type HdrSize = ((sizeof(block_info_t)-1)/MaxAlign+1)*MaxAlign;
458
- BOOST_STATIC_CONSTEXPR size_type HdrOffsetSize = ((sizeof(hdr_offset_holder)-1)/MaxAlign+1)*MaxAlign;
459
+ //BOOST_STATIC_CONSTEXPR size_type MaxAlign = alignment_of<void_pointer>::value;
460
+ //BOOST_STATIC_CONSTEXPR size_type HdrSize = ((sizeof(block_info_t)-1)/MaxAlign+1)*MaxAlign;
461
+ //BOOST_STATIC_CONSTEXPR size_type HdrOffsetSize = ((sizeof(hdr_offset_holder)-1)/MaxAlign+1)*MaxAlign;
462
+
463
+ static size_type get_hdr_size(size_type real_node_align)
464
+ { return ((sizeof(block_info_t)-1)/real_node_align+1)*real_node_align; }
465
+
466
+ static size_type get_hdr_off_size(size_type real_node_align)
467
+ { return ((sizeof(hdr_offset_holder)-1)/real_node_align+1)*real_node_align; }
468
+
469
+ template<size_type RealNodeAlign>
470
+ struct get_hdr_size_ct
471
+ {
472
+ BOOST_STATIC_CONSTEXPR size_type value = ((sizeof(block_info_t) - 1)/RealNodeAlign + 1)*RealNodeAlign;
473
+ };
474
+
475
+ template<size_type RealNodeAlign>
476
+ struct get_hdr_off_size_ct
477
+ {
478
+ BOOST_STATIC_CONSTEXPR size_type value = ((sizeof(hdr_offset_holder) - 1)/RealNodeAlign + 1)*RealNodeAlign;
479
+ };
459
480
 
460
481
  segment_mngr_base_ptr_t mp_segment_mngr_base; //Segment manager
461
482
  block_container_t m_block_container; //Intrusive block list
@@ -544,6 +565,7 @@ class private_adaptive_node_pool_impl_common
544
565
  }
545
566
  }
546
567
  }
568
+ (void)total_free_blocks;
547
569
  BOOST_ASSERT(total_free_blocks == m_totally_free_blocks);
548
570
  BOOST_ASSERT(total_free_nodes >= m_totally_free_blocks*real_num_node);
549
571
  }
@@ -644,6 +666,7 @@ class private_adaptive_node_pool_impl_common
644
666
  , const size_type max_free_blocks
645
667
  , const size_type real_block_alignment, const size_type real_node_size
646
668
  , const size_type real_num_node, const size_type num_subblocks
669
+ , const size_type real_node_align
647
670
  , AlignOnlyTrue)
648
671
  {
649
672
  (void)num_subblocks;
@@ -660,11 +683,11 @@ class private_adaptive_node_pool_impl_common
660
683
  if(!mem_address){
661
684
  //In case of error, free memory deallocating all nodes (the new ones allocated
662
685
  //in this function plus previously stored nodes in chain).
663
- this->priv_deallocate_nodes(chain, max_free_blocks, real_num_node, num_subblocks, real_block_alignment);
686
+ this->priv_deallocate_nodes(chain, max_free_blocks, real_num_node, num_subblocks, real_block_alignment, real_node_align);
664
687
  throw_bad_alloc();
665
688
  }
666
- block_info_t &c_info = *new(mem_address, boost_container_new_t())block_info_t();
667
- mem_address += HdrSize;
689
+ block_info_t &c_info = *new(mem_address, boost_container_new_t()) block_info_t();
690
+ mem_address += get_hdr_size(real_node_align);
668
691
  this->priv_fill_chain_remaining_to_block(chain, target_elem_in_chain, c_info, mem_address, real_num_node, real_node_size);
669
692
  const size_type free_nodes = c_info.free_nodes.size();
670
693
  if(free_nodes){
@@ -680,15 +703,18 @@ class private_adaptive_node_pool_impl_common
680
703
  , const size_type max_free_blocks
681
704
  , const size_type real_block_alignment, const size_type real_node_size
682
705
  , const size_type real_num_node, const size_type num_subblocks
706
+ , const size_type real_node_align
683
707
  , AlignOnlyFalse)
684
708
  {
685
709
  BOOST_ASSERT(m_block_container.empty());
686
710
  BOOST_ASSERT(min_elements > 0);
687
711
  const size_type n = (min_elements - 1)/real_num_node + 1;
688
712
  const size_type real_block_size = real_block_alignment*num_subblocks - PayloadPerAllocation;
689
- const size_type elements_per_subblock_mid = (real_block_alignment - HdrOffsetSize)/real_node_size;
690
- const size_type elements_per_subblock_end = (real_block_alignment - HdrOffsetSize - PayloadPerAllocation) / real_node_size;
691
- const size_type hdr_subblock_elements = (real_block_alignment - HdrSize - PayloadPerAllocation)/real_node_size;
713
+ const size_type hdr_size = get_hdr_size(real_node_align);
714
+ const size_type hdr_off_size = get_hdr_off_size(real_node_align);
715
+ const size_type elements_per_subblock_mid = (real_block_alignment - hdr_off_size)/real_node_size;
716
+ const size_type elements_per_subblock_end = (real_block_alignment - hdr_off_size - PayloadPerAllocation) / real_node_size;
717
+ const size_type hdr_subblock_elements = (real_block_alignment - hdr_size - PayloadPerAllocation)/real_node_size;
692
718
  const size_type target_elem_in_chain = chain.size() + min_elements;
693
719
 
694
720
  for(size_type i = 0; i != n; ++i){
@@ -699,12 +725,12 @@ class private_adaptive_node_pool_impl_common
699
725
  if(!mem_address){
700
726
  //In case of error, free memory deallocating all nodes (the new ones allocated
701
727
  //in this function plus previously stored nodes in chain).
702
- this->priv_deallocate_nodes(chain, max_free_blocks, real_num_node, num_subblocks, real_block_alignment);
728
+ this->priv_deallocate_nodes(chain, max_free_blocks, real_num_node, num_subblocks, real_block_alignment, real_node_align);
703
729
  throw_bad_alloc();
704
730
  }
705
731
  //First initialize header information on the last subblock
706
732
  char *hdr_addr = mem_address + real_block_alignment*(num_subblocks-1);
707
- block_info_t &c_info = *new(hdr_addr, boost_container_new_t())block_info_t();
733
+ block_info_t &c_info = *new(hdr_addr, boost_container_new_t()) block_info_t();
708
734
  //Some structural checks
709
735
  BOOST_ASSERT(static_cast<void*>(&static_cast<hdr_offset_holder&>(c_info).hdr_offset) ==
710
736
  static_cast<void*>(&c_info)); (void)c_info;
@@ -715,10 +741,10 @@ class private_adaptive_node_pool_impl_common
715
741
  new(mem_address, boost_container_new_t()) hdr_offset_holder(size_type(hdr_addr - mem_address));
716
742
  const size_type elements_per_subblock = (subblock != (maxsubblock - 1)) ? elements_per_subblock_mid : elements_per_subblock_end;
717
743
  this->priv_fill_chain_remaining_to_block
718
- (chain, target_elem_in_chain, c_info, mem_address + HdrOffsetSize, elements_per_subblock, real_node_size);
744
+ (chain, target_elem_in_chain, c_info, mem_address + hdr_off_size, elements_per_subblock, real_node_size);
719
745
  }
720
746
  this->priv_fill_chain_remaining_to_block
721
- (chain, target_elem_in_chain, c_info, hdr_addr + HdrSize, hdr_subblock_elements, real_node_size);
747
+ (chain, target_elem_in_chain, c_info, hdr_addr + hdr_size, hdr_subblock_elements, real_node_size);
722
748
  m_totally_free_blocks += static_cast<size_type>(c_info.free_nodes.size() == real_num_node);
723
749
  if (c_info.free_nodes.size())
724
750
  m_block_container.push_front(c_info);
@@ -727,7 +753,7 @@ class private_adaptive_node_pool_impl_common
727
753
 
728
754
  //!Allocates array of count elements. Can throw
729
755
  void *priv_allocate_node( const size_type max_free_blocks, const size_type real_block_alignment, const size_type real_node_size
730
- , const size_type real_num_node, const size_type num_subblocks)
756
+ , const size_type real_num_node, const size_type num_subblocks, const size_type real_node_align)
731
757
  {
732
758
  this->priv_invariants(real_num_node, num_subblocks, real_block_alignment);
733
759
  //If there are no free nodes we allocate a new block
@@ -747,7 +773,7 @@ class private_adaptive_node_pool_impl_common
747
773
  else{
748
774
  multiallocation_chain chain;
749
775
  this->priv_append_from_new_blocks
750
- (1, chain, max_free_blocks, real_block_alignment, real_node_size, real_num_node, num_subblocks, IsAlignOnly());
776
+ (1, chain, max_free_blocks, real_block_alignment, real_node_size, real_num_node, num_subblocks, real_node_align, IsAlignOnly());
751
777
  void *node = boost::movelib::to_raw_pointer(chain.pop_front());
752
778
  this->priv_invariants(real_num_node, num_subblocks, real_block_alignment);
753
779
  return node;
@@ -756,7 +782,7 @@ class private_adaptive_node_pool_impl_common
756
782
 
757
783
  void priv_allocate_nodes( const size_type n, multiallocation_chain &chain
758
784
  , const size_type max_free_blocks, const size_type real_block_alignment, const size_type real_node_size
759
- , const size_type real_num_node, const size_type num_subblocks)
785
+ , const size_type real_num_node, const size_type num_subblocks, const size_type real_node_align)
760
786
  {
761
787
  size_type i = 0;
762
788
  BOOST_CONTAINER_TRY{
@@ -765,7 +791,7 @@ class private_adaptive_node_pool_impl_common
765
791
  //If there are no free nodes we allocate all needed blocks
766
792
  if (m_block_container.empty()){
767
793
  this->priv_append_from_new_blocks
768
- (n - i, chain, max_free_blocks, real_block_alignment, real_node_size, real_num_node, num_subblocks, IsAlignOnly());
794
+ (n - i, chain, max_free_blocks, real_block_alignment, real_node_size, real_num_node, num_subblocks, real_node_align, IsAlignOnly());
769
795
  BOOST_ASSERT(m_block_container.empty() || (++m_block_container.cbegin() == m_block_container.cend()));
770
796
  BOOST_ASSERT(chain.size() == n);
771
797
  break;
@@ -800,7 +826,7 @@ class private_adaptive_node_pool_impl_common
800
826
  }
801
827
  }
802
828
  BOOST_CONTAINER_CATCH(...){
803
- this->priv_deallocate_nodes(chain, max_free_blocks, real_num_node, num_subblocks, real_block_alignment);
829
+ this->priv_deallocate_nodes(chain, max_free_blocks, real_num_node, num_subblocks, real_block_alignment, real_node_align);
804
830
  this->priv_invariants(real_num_node, num_subblocks, real_block_alignment);
805
831
  BOOST_CONTAINER_RETHROW
806
832
  }
@@ -811,7 +837,8 @@ class private_adaptive_node_pool_impl_common
811
837
  //!Deallocates an array pointed by ptr. Never throws
812
838
  void priv_deallocate_node( void *pElem
813
839
  , const size_type max_free_blocks, const size_type real_num_node
814
- , const size_type num_subblocks, const size_type real_block_alignment)
840
+ , const size_type num_subblocks, const size_type real_block_alignment
841
+ , const size_type /*real_node_align*/)
815
842
  {
816
843
  this->priv_invariants(real_num_node, num_subblocks, real_block_alignment);
817
844
  block_info_t &block_info = *this->priv_block_from_node(pElem, real_block_alignment);
@@ -829,7 +856,8 @@ class private_adaptive_node_pool_impl_common
829
856
 
830
857
  void priv_deallocate_nodes( multiallocation_chain &nodes
831
858
  , const size_type max_free_blocks, const size_type real_num_node
832
- , const size_type num_subblocks, const size_type real_block_alignment)
859
+ , const size_type num_subblocks, const size_type real_block_alignment
860
+ , const size_type /*real_node_align*/)
833
861
  {
834
862
  this->priv_invariants(real_num_node, num_subblocks, real_block_alignment);
835
863
  //To take advantage of node locality, wait until two
@@ -978,10 +1006,12 @@ template< class SizeType
978
1006
  , std::size_t NodesPerBlock
979
1007
  , std::size_t HdrOffsetSize
980
1008
  , std::size_t OverheadPercent
1009
+ , std::size_t NodeAlign
981
1010
  , bool AlignOnly>
982
1011
  struct calculate_alignment_ct
983
1012
  {
984
- BOOST_STATIC_CONSTEXPR std::size_t alignment = upper_power_of_2_ct<SizeType, HdrSize + RealNodeSize*NodesPerBlock>::value;
1013
+ BOOST_STATIC_CONSTEXPR std::size_t initial_alignment = upper_power_of_2_ct<SizeType, HdrSize + RealNodeSize*NodesPerBlock>::value;
1014
+ BOOST_STATIC_CONSTEXPR std::size_t alignment = NodeAlign > initial_alignment ? NodeAlign : initial_alignment;
985
1015
  BOOST_STATIC_CONSTEXPR std::size_t num_subblocks = 0;
986
1016
  BOOST_STATIC_CONSTEXPR std::size_t real_num_node = (alignment - PayloadPerAllocation - HdrSize)/RealNodeSize;
987
1017
  };
@@ -992,7 +1022,9 @@ template< class SizeType
992
1022
  , std::size_t RealNodeSize
993
1023
  , std::size_t NodesPerBlock
994
1024
  , std::size_t HdrOffsetSize
995
- , std::size_t OverheadPercent>
1025
+ , std::size_t OverheadPercent
1026
+ , std::size_t NodeAlign
1027
+ >
996
1028
  struct calculate_alignment_ct
997
1029
  < SizeType
998
1030
  , HdrSize
@@ -1001,10 +1033,14 @@ struct calculate_alignment_ct
1001
1033
  , NodesPerBlock
1002
1034
  , HdrOffsetSize
1003
1035
  , OverheadPercent
1036
+ , NodeAlign
1004
1037
  , false>
1005
1038
  {
1039
+ BOOST_STATIC_CONSTEXPR std::size_t proposed_alignment = upper_power_of_2_ct<SizeType, HdrSize + PayloadPerAllocation + RealNodeSize>::value;
1040
+ BOOST_STATIC_CONSTEXPR std::size_t initial_alignment = NodeAlign > proposed_alignment ? NodeAlign : proposed_alignment;
1041
+
1006
1042
  typedef typename candidate_power_of_2_ct
1007
- < upper_power_of_2_ct<SizeType, HdrSize + PayloadPerAllocation + RealNodeSize>::value
1043
+ < initial_alignment
1008
1044
  , RealNodeSize
1009
1045
  , PayloadPerAllocation
1010
1046
  , NodesPerBlock
@@ -1029,6 +1065,7 @@ template< class SegmentManagerBase
1029
1065
  , std::size_t NodeSize
1030
1066
  , std::size_t NodesPerBlock
1031
1067
  , std::size_t OverheadPercent
1068
+ , std::size_t InitialNodeAlign
1032
1069
  , unsigned int Flags>
1033
1070
  class private_adaptive_node_pool_impl_ct
1034
1071
  : public private_adaptive_node_pool_impl_common<SegmentManagerBase, Flags>
@@ -1052,15 +1089,17 @@ class private_adaptive_node_pool_impl_ct
1052
1089
  BOOST_STATIC_CONSTEXPR bool AlignOnly = base_t::AlignOnly;
1053
1090
 
1054
1091
  private:
1055
- BOOST_STATIC_CONSTEXPR size_type MaxAlign = base_t::MaxAlign;
1056
- BOOST_STATIC_CONSTEXPR size_type HdrSize = base_t::HdrSize;
1057
- BOOST_STATIC_CONSTEXPR size_type HdrOffsetSize = base_t::HdrOffsetSize;
1092
+ BOOST_STATIC_CONSTEXPR size_type VoidPtrAlign = alignment_of<void_pointer>::value;
1093
+ BOOST_STATIC_CONSTEXPR size_type RealNodeAlign = InitialNodeAlign > VoidPtrAlign ? InitialNodeAlign : VoidPtrAlign;
1058
1094
 
1059
- BOOST_STATIC_CONSTEXPR size_type RealNodeSize = lcm_ct<NodeSize, alignment_of<void_pointer>::value>::value;
1095
+ BOOST_STATIC_CONSTEXPR size_type RealNodePtrAlign = lcm_ct <NodeSize, VoidPtrAlign>::value;
1096
+ BOOST_STATIC_CONSTEXPR size_type RealNodeSize = lcm_ct< RealNodePtrAlign, RealNodeAlign>::value;
1097
+ BOOST_STATIC_CONSTEXPR size_type HdrSize = base_t::template get_hdr_size_ct<RealNodeAlign>::value;
1098
+ BOOST_STATIC_CONSTEXPR size_type HdrOffsetSize = base_t::template get_hdr_off_size_ct<RealNodeAlign>::value;
1060
1099
 
1061
1100
  typedef calculate_alignment_ct
1062
1101
  < size_type, HdrSize, PayloadPerAllocation
1063
- , RealNodeSize, NodesPerBlock, HdrOffsetSize, OverheadPercent, AlignOnly> data_t;
1102
+ , RealNodeSize, NodesPerBlock, HdrOffsetSize, OverheadPercent, RealNodeAlign, AlignOnly> data_t;
1064
1103
 
1065
1104
  //Round the size to a power of two value.
1066
1105
  //This is the total memory size (including payload) that we want to
@@ -1088,7 +1127,7 @@ class private_adaptive_node_pool_impl_ct
1088
1127
  void *allocate_node()
1089
1128
  {
1090
1129
  return this->priv_allocate_node
1091
- (MaxFreeBlocks, data_t::alignment, RealNodeSize, RealNumNode, NumSubBlocks);
1130
+ (MaxFreeBlocks, data_t::alignment, RealNodeSize, RealNumNode, NumSubBlocks, RealNodeAlign);
1092
1131
  }
1093
1132
 
1094
1133
  //!Allocates n nodes.
@@ -1096,19 +1135,19 @@ class private_adaptive_node_pool_impl_ct
1096
1135
  void allocate_nodes(const size_type n, multiallocation_chain &chain)
1097
1136
  {
1098
1137
  this->priv_allocate_nodes
1099
- (n, chain, MaxFreeBlocks, data_t::alignment, RealNodeSize, RealNumNode, NumSubBlocks);
1138
+ (n, chain, MaxFreeBlocks, data_t::alignment, RealNodeSize, RealNumNode, NumSubBlocks, RealNodeAlign);
1100
1139
  }
1101
1140
 
1102
1141
  //!Deallocates an array pointed by ptr. Never throws
1103
1142
  void deallocate_node(void *pElem)
1104
1143
  {
1105
- this->priv_deallocate_node(pElem, MaxFreeBlocks, RealNumNode, NumSubBlocks, RealBlockAlignment);
1144
+ this->priv_deallocate_node(pElem, MaxFreeBlocks, RealNumNode, NumSubBlocks, RealBlockAlignment, RealNodeAlign);
1106
1145
  }
1107
1146
 
1108
1147
  //!Deallocates a linked list of nodes. Never throws
1109
1148
  void deallocate_nodes(multiallocation_chain &nodes)
1110
1149
  {
1111
- this->priv_deallocate_nodes(nodes, MaxFreeBlocks, RealNumNode, NumSubBlocks, data_t::alignment);
1150
+ this->priv_deallocate_nodes(nodes, MaxFreeBlocks, RealNumNode, NumSubBlocks, data_t::alignment, RealNodeAlign);
1112
1151
  }
1113
1152
 
1114
1153
  void deallocate_free_blocks()
@@ -1129,20 +1168,76 @@ struct private_adaptive_node_pool_impl_rt_data
1129
1168
  {
1130
1169
  typedef SizeType size_type;
1131
1170
 
1132
- private_adaptive_node_pool_impl_rt_data(size_type max_free_blocks, size_type real_node_size)
1133
- : m_max_free_blocks(max_free_blocks), m_real_node_size(real_node_size)
1134
- , m_real_block_alignment(), m_num_subblocks(), m_real_num_node()
1171
+ BOOST_STATIC_CONSTEXPR size_type PtrAlign = alignment_of<void*>::value;
1172
+ BOOST_STATIC_CONSTEXPR size_type PtrAlignBits
1173
+ = boost::container::dtl::log2_pow2<PtrAlign>::value;
1174
+
1175
+ typedef packed_3n_bits_ref<PtrAlignBits, size_type> packed_bits_t;
1176
+
1177
+ private_adaptive_node_pool_impl_rt_data(size_type max_free_blocks)
1178
+ : m_max_free_blocks(max_free_blocks)
1179
+ , m_packed_low()
1180
+ , m_real_block_alignment()
1181
+ , m_packed_high1()
1182
+ , m_packed_high2()
1135
1183
  {}
1136
1184
 
1137
- const size_type m_max_free_blocks;
1138
- const size_type m_real_node_size;
1139
- //Round the size to a power of two value.
1140
- //This is the total memory size (including payload) that we want to
1141
- //allocate from the general-purpose allocator
1142
- size_type m_real_block_alignment;
1143
- size_type m_num_subblocks;
1144
- //This is the real number of nodes per block
1145
- size_type m_real_num_node;
1185
+ void set_node_alignment(size_type alignment)
1186
+ {
1187
+ const size_type aligned_multiplier = alignment/PtrAlign;
1188
+ const size_type aligned_shift = log2_ceil<size_type>(aligned_multiplier);
1189
+ return packed_bits().store(aligned_shift);
1190
+ }
1191
+
1192
+ size_type get_node_alignment() const
1193
+ { return PtrAlign << packed_bits().load(); }
1194
+
1195
+ size_type get_max_free_blocks() const
1196
+ { return m_max_free_blocks; }
1197
+
1198
+ size_type get_real_block_alignment() const
1199
+ { return m_real_block_alignment; }
1200
+
1201
+ size_type get_real_node_size() const
1202
+ { return packed_bits().low_unpacked(); }
1203
+
1204
+ size_type get_num_subblocks() const
1205
+ { return packed_bits().high1_unpacked(); }
1206
+
1207
+ size_type get_real_num_node() const
1208
+ { return packed_bits().high2_unpacked(); }
1209
+
1210
+ void set_real_block_alignment(size_type v)
1211
+ { m_real_block_alignment = v; }
1212
+
1213
+ void set_real_node_size(size_type v)
1214
+ { packed_bits().set_low_unpacked(v); }
1215
+
1216
+ void set_num_subblocks(size_type v)
1217
+ { packed_bits().set_high1_unpacked(v); }
1218
+
1219
+ void set_real_num_node(size_type v)
1220
+ { packed_bits().set_high2_unpacked(v); }
1221
+
1222
+ private:
1223
+ packed_bits_t packed_bits()
1224
+ {
1225
+ return packed_bits_t(m_packed_low, m_packed_high1, m_packed_high2);
1226
+ }
1227
+
1228
+ const packed_bits_t packed_bits() const
1229
+ {
1230
+ return packed_bits_t(const_cast<size_type&>(m_packed_low),
1231
+ const_cast<size_type&>(m_packed_high1),
1232
+ const_cast<size_type&>(m_packed_high2));
1233
+ }
1234
+
1235
+ //Maintain info from original members before bit-packing, to avoid breaking ABI
1236
+ const size_type m_max_free_blocks; //No changes
1237
+ size_type m_packed_low; // stores "m_real_node_size" in low N bits
1238
+ size_type m_real_block_alignment; //No changes
1239
+ size_type m_packed_high1; // stores "m_num_subblocks"in high N bits
1240
+ size_type m_packed_high2; // stores "m_real_num_node" in high N bits
1146
1241
  };
1147
1242
 
1148
1243
 
@@ -1171,8 +1266,11 @@ class private_adaptive_node_pool_impl_rt
1171
1266
  //align_only
1172
1267
  BOOST_STATIC_CONSTEXPR bool AlignOnly = impl_t::AlignOnly;
1173
1268
 
1174
- BOOST_STATIC_CONSTEXPR size_type HdrSize = impl_t::HdrSize;
1175
- BOOST_STATIC_CONSTEXPR size_type HdrOffsetSize = impl_t::HdrOffsetSize;
1269
+ //BOOST_STATIC_CONSTEXPR size_type HdrSize = impl_t::HdrSize;
1270
+ //BOOST_STATIC_CONSTEXPR size_type HdrOffsetSize = impl_t::HdrOffsetSize;
1271
+
1272
+ using impl_t::get_hdr_size;
1273
+ using impl_t::get_hdr_off_size;
1176
1274
 
1177
1275
  public:
1178
1276
 
@@ -1186,40 +1284,59 @@ class private_adaptive_node_pool_impl_rt
1186
1284
  , size_type nodes_per_block
1187
1285
  , size_type max_free_blocks
1188
1286
  , unsigned char overhead_percent
1287
+ , size_type node_align
1189
1288
  )
1190
- : data_t(max_free_blocks, lcm(node_size, size_type(alignment_of<void_pointer>::value)))
1289
+ : data_t(max_free_blocks)
1191
1290
  , impl_t(segment_mngr_base)
1192
1291
  {
1292
+ if (node_align < alignment_of<void_pointer>::value)
1293
+ node_align = alignment_of<void_pointer>::value;
1294
+ node_size = lcm(node_size, node_align);
1295
+ this->data_t::set_real_node_size(node_size);
1296
+ this->data_t::set_node_alignment(node_align);
1297
+
1298
+ const size_type hdr_size = get_hdr_size(node_align);
1193
1299
  if(AlignOnly){
1194
- this->m_real_block_alignment = upper_power_of_2(HdrSize + this->m_real_node_size*nodes_per_block);
1195
- this->m_real_num_node = (this->m_real_block_alignment - PayloadPerAllocation - HdrSize)/this->m_real_node_size;
1300
+ this->data_t::set_real_block_alignment(upper_power_of_2(hdr_size + this->get_real_node_size() * nodes_per_block));
1301
+ this->data_t::set_real_num_node((this->get_real_block_alignment() - PayloadPerAllocation - hdr_size)/this->get_real_node_size());
1196
1302
  }
1197
1303
  else{
1198
- candidate_power_of_2_rt ( upper_power_of_2(HdrSize + PayloadPerAllocation + this->m_real_node_size)
1199
- , this->m_real_node_size
1304
+ size_type real_block_alignment = 0;
1305
+ size_type num_subblocks = 0;
1306
+ size_type real_num_node = 0;
1307
+ const size_type hdr_off_size = get_hdr_off_size(node_align);
1308
+ size_type initial_alignment = upper_power_of_2(hdr_size + PayloadPerAllocation + this->get_real_node_size());
1309
+ if (initial_alignment < node_align)
1310
+ initial_alignment = node_align;
1311
+ candidate_power_of_2_rt ( initial_alignment
1312
+ , this->get_real_node_size()
1200
1313
  , PayloadPerAllocation
1201
1314
  , nodes_per_block
1202
- , HdrSize
1203
- , HdrOffsetSize
1315
+ , hdr_size
1316
+ , hdr_off_size
1204
1317
  , overhead_percent
1205
- , this->m_real_block_alignment
1206
- , this->m_num_subblocks
1207
- , this->m_real_num_node);
1318
+ , real_block_alignment
1319
+ , num_subblocks
1320
+ , real_num_node);
1321
+ this->data_t::set_real_block_alignment(real_block_alignment);
1322
+ this->data_t::set_num_subblocks(num_subblocks);
1323
+ this->data_t::set_real_num_node(real_num_node);
1208
1324
  }
1209
1325
  }
1210
1326
 
1211
1327
  //!Destructor. Deallocates all allocated blocks. Never throws
1212
1328
  ~private_adaptive_node_pool_impl_rt()
1213
- { this->priv_clear(this->m_num_subblocks, this->m_real_block_alignment, this->m_real_num_node); }
1329
+ { this->impl_t::priv_clear(this->get_num_subblocks(), this->get_real_block_alignment(), this->get_real_num_node()); }
1214
1330
 
1215
1331
  size_type get_real_num_node() const
1216
- { return this->m_real_num_node; }
1332
+ { return data_t::get_real_num_node(); }
1217
1333
 
1218
1334
  //!Allocates array of count elements. Can throw
1219
1335
  void *allocate_node()
1220
1336
  {
1221
- return this->priv_allocate_node
1222
- (this->m_max_free_blocks, this->m_real_block_alignment, this->m_real_node_size, this->m_real_num_node, this->m_num_subblocks);
1337
+ return this->impl_t::priv_allocate_node
1338
+ ( this->get_max_free_blocks(), this->get_real_block_alignment()
1339
+ , this->get_real_node_size(), this->get_real_num_node(), this->get_num_subblocks(), this->get_node_alignment());
1223
1340
  }
1224
1341
 
1225
1342
  //!Allocates n nodes.
@@ -1227,30 +1344,29 @@ class private_adaptive_node_pool_impl_rt
1227
1344
  void allocate_nodes(const size_type n, multiallocation_chain &chain)
1228
1345
  {
1229
1346
 
1230
- this->priv_allocate_nodes
1231
- (n, chain, this->m_max_free_blocks, this->m_real_block_alignment, this->m_real_node_size, this->m_real_num_node, this->m_num_subblocks);
1347
+ this->impl_t::priv_allocate_nodes
1348
+ ( n, chain, this->get_max_free_blocks(), this->get_real_block_alignment(), this->get_real_node_size()
1349
+ , this->get_real_num_node(), this->get_num_subblocks(), this->get_node_alignment());
1232
1350
  }
1233
1351
 
1234
1352
  //!Deallocates an array pointed by ptr. Never throws
1235
1353
  void deallocate_node(void *pElem)
1236
1354
  {
1237
- this->priv_deallocate_node(pElem, this->m_max_free_blocks, this->m_real_num_node, this->m_num_subblocks, this->m_real_block_alignment);
1355
+ this->impl_t::priv_deallocate_node( pElem, this->get_max_free_blocks(), this->get_real_num_node()
1356
+ , this->get_num_subblocks(), this->get_real_block_alignment(), this->get_node_alignment());
1238
1357
  }
1239
1358
 
1240
1359
  //!Deallocates a linked list of nodes. Never throws
1241
1360
  void deallocate_nodes(multiallocation_chain &nodes)
1242
1361
  {
1243
- this->priv_deallocate_nodes(nodes, this->m_max_free_blocks, this->m_real_num_node, this->m_num_subblocks, this->m_real_block_alignment);
1362
+ this->impl_t::priv_deallocate_nodes( nodes, this->get_max_free_blocks(), this->get_real_num_node()
1363
+ , this->get_num_subblocks(), this->get_real_block_alignment(), this->get_node_alignment());
1244
1364
  }
1245
1365
 
1246
1366
  void deallocate_free_blocks()
1247
- { this->priv_deallocate_free_blocks(0, this->m_real_num_node, this->m_num_subblocks, this->m_real_block_alignment); }
1248
-
1249
- //Deprecated, use deallocate_free_blocks
1250
- void deallocate_free_chunks()
1251
- { this->priv_deallocate_free_blocks(0, this->m_real_num_node, this->m_num_subblocks, this->m_real_block_alignment); }
1367
+ { this->impl_t::priv_deallocate_free_blocks( 0, this->get_real_num_node(), this->get_num_subblocks()
1368
+ , this->get_real_block_alignment()); }
1252
1369
  };
1253
-
1254
1370
  } //namespace dtl {
1255
1371
  } //namespace container {
1256
1372
  } //namespace boost {
@@ -194,7 +194,7 @@ InpIt find(InpIt first, InpIt last, const U& value)
194
194
  template<class FwdIt, class U>
195
195
  FwdIt remove(FwdIt first, FwdIt last, const U& value)
196
196
  {
197
- first = find(first, last, value);
197
+ first = (find)(first, last, value);
198
198
  if (first != last)
199
199
  for (FwdIt i = first; ++i != last;)
200
200
  if (!(*i == value))
@@ -205,7 +205,7 @@ FwdIt remove(FwdIt first, FwdIt last, const U& value)
205
205
  template<class FwdIt, class Pred>
206
206
  FwdIt remove_if(FwdIt first, FwdIt last, Pred p)
207
207
  {
208
- first = find_if(first, last, p);
208
+ first = (find_if)(first, last, p);
209
209
  if (first != last)
210
210
  for (FwdIt i = first; ++i != last;)
211
211
  if (!p(*i))