passenger 4.0.60 → 5.0.0.beta1

Sign up to get free protection for your applications and to get access to all the features.

Potentially problematic release.


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

Files changed (1301) hide show
  1. checksums.yaml +8 -8
  2. checksums.yaml.gz.asc +7 -7
  3. data.tar.gz.asc +7 -7
  4. data/.editorconfig +5 -0
  5. data/.travis.yml +3 -2
  6. data/CHANGELOG +31 -53
  7. data/CONTRIBUTING.md +4 -4
  8. data/CONTRIBUTORS +0 -1
  9. data/Gemfile +18 -0
  10. data/Gemfile.lock +41 -0
  11. data/Rakefile +16 -0
  12. data/bin/passenger +2 -2
  13. data/bin/passenger-install-apache2-module +12 -12
  14. data/bin/passenger-install-nginx-module +9 -14
  15. data/bin/passenger-status +125 -87
  16. data/build/agents.rb +112 -140
  17. data/build/apache2.rb +4 -9
  18. data/build/basics.rb +5 -3
  19. data/build/common_library.rb +1 -0
  20. data/build/cxx_tests.rb +69 -47
  21. data/build/debian.rb +4 -2
  22. data/build/documentation.rb +1 -0
  23. data/build/integration_tests.rb +28 -43
  24. data/build/misc.rb +0 -18
  25. data/build/nginx.rb +2 -6
  26. data/build/packaging.rb +33 -22
  27. data/build/preprocessor.rb +2 -4
  28. data/build/ruby_tests.rb +7 -26
  29. data/build/test_basics.rb +24 -25
  30. data/debian.template/control.template +2 -2
  31. data/debian.template/locations.ini.template +2 -3
  32. data/debian.template/passenger.install.template +2 -2
  33. data/debian.template/rules.template +1 -1
  34. data/dev/ci/run_jenkins.sh +0 -1
  35. data/dev/ci/run_rpm_tests.sh +3 -0
  36. data/dev/ci/run_travis.sh +63 -17
  37. data/dev/copy_boost_headers +22 -6
  38. data/dev/ruby_server.rb +244 -0
  39. data/dev/vagrant/provision.sh +3 -1
  40. data/doc/DebuggingAndStressTesting.md +3 -3
  41. data/doc/Design and Architecture.txt +5 -6
  42. data/doc/Packaging.txt.md +35 -6
  43. data/doc/ServerOptimizationGuide.txt.md +339 -0
  44. data/doc/Users guide Apache.idmap.txt +177 -187
  45. data/doc/Users guide Apache.txt +143 -219
  46. data/doc/Users guide Nginx.idmap.txt +166 -166
  47. data/doc/Users guide Nginx.txt +265 -223
  48. data/doc/Users guide Standalone.txt +3 -3
  49. data/doc/templates/markdown.html.erb +37 -6
  50. data/doc/users_guide_snippets/environment_variables.txt +1 -1
  51. data/doc/users_guide_snippets/support_information.txt +1 -1
  52. data/doc/users_guide_snippets/tips.txt +2 -2
  53. data/ext/apache2/Configuration.cpp +23 -81
  54. data/ext/apache2/Configuration.hpp +18 -92
  55. data/ext/apache2/ConfigurationCommands.cpp +64 -15
  56. data/ext/apache2/ConfigurationCommands.cpp.erb +8 -4
  57. data/ext/apache2/ConfigurationFields.hpp +12 -0
  58. data/ext/apache2/ConfigurationSetters.cpp +73 -1
  59. data/ext/apache2/ConfigurationSetters.cpp.erb +3 -2
  60. data/ext/apache2/CreateDirConfig.cpp +6 -0
  61. data/ext/apache2/DirectoryMapper.h +11 -6
  62. data/ext/apache2/Hooks.cpp +291 -408
  63. data/ext/apache2/MergeDirConfig.cpp +42 -0
  64. data/ext/apache2/SetHeaders.cpp +61 -16
  65. data/ext/apache2/SetHeaders.cpp.erb +9 -7
  66. data/ext/boost/container/allocator_traits.hpp +400 -0
  67. data/ext/boost/container/deque.hpp +2012 -0
  68. data/ext/boost/container/detail/adaptive_node_pool_impl.hpp +874 -0
  69. data/ext/boost/container/detail/advanced_insert_int.hpp +369 -0
  70. data/ext/boost/container/detail/algorithms.hpp +84 -0
  71. data/ext/boost/container/detail/allocation_type.hpp +54 -0
  72. data/ext/boost/container/detail/allocator_version_traits.hpp +163 -0
  73. data/ext/boost/container/detail/config_begin.hpp +49 -0
  74. data/ext/boost/container/detail/config_end.hpp +17 -0
  75. data/ext/boost/container/detail/destroyers.hpp +365 -0
  76. data/ext/boost/container/detail/flat_tree.hpp +1055 -0
  77. data/ext/boost/container/detail/function_detector.hpp +88 -0
  78. data/ext/boost/container/detail/iterators.hpp +611 -0
  79. data/ext/boost/container/detail/math_functions.hpp +113 -0
  80. data/ext/boost/container/detail/memory_util.hpp +83 -0
  81. data/ext/boost/container/detail/mpl.hpp +160 -0
  82. data/ext/boost/container/detail/multiallocation_chain.hpp +286 -0
  83. data/ext/boost/container/detail/node_alloc_holder.hpp +386 -0
  84. data/ext/boost/container/detail/node_pool_impl.hpp +365 -0
  85. data/ext/boost/container/detail/pair.hpp +354 -0
  86. data/ext/boost/container/detail/pool_common.hpp +52 -0
  87. data/ext/boost/container/detail/preprocessor.hpp +232 -0
  88. data/ext/boost/container/detail/transform_iterator.hpp +176 -0
  89. data/ext/boost/container/detail/tree.hpp +1134 -0
  90. data/ext/boost/container/detail/type_traits.hpp +210 -0
  91. data/ext/boost/container/detail/utilities.hpp +1141 -0
  92. data/ext/boost/container/detail/value_init.hpp +45 -0
  93. data/ext/boost/container/detail/variadic_templates_tools.hpp +153 -0
  94. data/ext/boost/container/detail/version_type.hpp +92 -0
  95. data/ext/boost/container/detail/workaround.hpp +44 -0
  96. data/ext/boost/container/flat_map.hpp +1674 -0
  97. data/ext/boost/container/flat_set.hpp +1408 -0
  98. data/ext/boost/container/list.hpp +1475 -0
  99. data/ext/boost/container/map.hpp +1508 -0
  100. data/ext/boost/container/scoped_allocator.hpp +1503 -0
  101. data/ext/boost/container/scoped_allocator_fwd.hpp +83 -0
  102. data/ext/boost/container/set.hpp +1280 -0
  103. data/ext/boost/container/slist.hpp +1706 -0
  104. data/ext/boost/container/stable_vector.hpp +1869 -0
  105. data/ext/boost/container/static_vector.hpp +1053 -0
  106. data/ext/boost/container/string.hpp +2856 -0
  107. data/ext/boost/container/throw_exception.hpp +110 -0
  108. data/ext/boost/container/vector.hpp +2671 -0
  109. data/ext/boost/detail/is_xxx.hpp +61 -0
  110. data/ext/boost/intrusive/any_hook.hpp +344 -0
  111. data/ext/boost/intrusive/avl_set.hpp +2528 -0
  112. data/ext/boost/intrusive/avl_set_hook.hpp +297 -0
  113. data/ext/boost/intrusive/avltree.hpp +1786 -0
  114. data/ext/boost/intrusive/avltree_algorithms.hpp +968 -0
  115. data/ext/boost/intrusive/bs_set_hook.hpp +296 -0
  116. data/ext/boost/intrusive/circular_list_algorithms.hpp +413 -0
  117. data/ext/boost/intrusive/circular_slist_algorithms.hpp +404 -0
  118. data/ext/boost/intrusive/derivation_value_traits.hpp +70 -0
  119. data/ext/boost/intrusive/detail/any_node_and_algorithms.hpp +297 -0
  120. data/ext/boost/intrusive/detail/assert.hpp +41 -0
  121. data/ext/boost/intrusive/detail/avltree_node.hpp +197 -0
  122. data/ext/boost/intrusive/detail/clear_on_destructor_base.hpp +36 -0
  123. data/ext/boost/intrusive/detail/common_slist_algorithms.hpp +102 -0
  124. data/ext/boost/intrusive/detail/config_begin.hpp +52 -0
  125. data/ext/boost/intrusive/detail/config_end.hpp +15 -0
  126. data/ext/boost/intrusive/detail/ebo_functor_holder.hpp +95 -0
  127. data/ext/boost/intrusive/detail/function_detector.hpp +88 -0
  128. data/ext/boost/intrusive/detail/generic_hook.hpp +209 -0
  129. data/ext/boost/intrusive/detail/has_member_function_callable_with.hpp +357 -0
  130. data/ext/boost/intrusive/detail/hashtable_node.hpp +249 -0
  131. data/ext/boost/intrusive/detail/is_stateful_value_traits.hpp +77 -0
  132. data/ext/boost/intrusive/detail/list_node.hpp +196 -0
  133. data/ext/boost/intrusive/detail/memory_util.hpp +288 -0
  134. data/ext/boost/intrusive/detail/mpl.hpp +383 -0
  135. data/ext/boost/intrusive/detail/parent_from_member.hpp +97 -0
  136. data/ext/boost/intrusive/detail/preprocessor.hpp +52 -0
  137. data/ext/boost/intrusive/detail/rbtree_node.hpp +201 -0
  138. data/ext/boost/intrusive/detail/slist_node.hpp +166 -0
  139. data/ext/boost/intrusive/detail/transform_iterator.hpp +173 -0
  140. data/ext/boost/intrusive/detail/tree_algorithms.hpp +1742 -0
  141. data/ext/boost/intrusive/detail/tree_node.hpp +199 -0
  142. data/ext/boost/intrusive/detail/utilities.hpp +858 -0
  143. data/ext/boost/intrusive/detail/workaround.hpp +22 -0
  144. data/ext/boost/intrusive/hashtable.hpp +3110 -0
  145. data/ext/boost/intrusive/intrusive_fwd.hpp +542 -0
  146. data/ext/boost/intrusive/linear_slist_algorithms.hpp +327 -0
  147. data/ext/boost/intrusive/link_mode.hpp +46 -0
  148. data/ext/boost/intrusive/list.hpp +1525 -0
  149. data/ext/boost/intrusive/list_hook.hpp +290 -0
  150. data/ext/boost/intrusive/member_value_traits.hpp +70 -0
  151. data/ext/boost/intrusive/options.hpp +810 -0
  152. data/ext/boost/intrusive/parent_from_member.hpp +42 -0
  153. data/ext/boost/intrusive/pointer_plus_bits.hpp +86 -0
  154. data/ext/boost/intrusive/pointer_traits.hpp +265 -0
  155. data/ext/boost/intrusive/priority_compare.hpp +39 -0
  156. data/ext/boost/intrusive/rbtree.hpp +1785 -0
  157. data/ext/boost/intrusive/rbtree_algorithms.hpp +934 -0
  158. data/ext/boost/intrusive/set.hpp +2554 -0
  159. data/ext/boost/intrusive/set_hook.hpp +300 -0
  160. data/ext/boost/intrusive/sg_set.hpp +2601 -0
  161. data/ext/boost/intrusive/sgtree.hpp +2009 -0
  162. data/ext/boost/intrusive/sgtree_algorithms.hpp +807 -0
  163. data/ext/boost/intrusive/slist.hpp +2219 -0
  164. data/ext/boost/intrusive/slist_hook.hpp +294 -0
  165. data/ext/boost/intrusive/splay_set.hpp +2575 -0
  166. data/ext/boost/intrusive/splay_set_hook.hpp +292 -0
  167. data/ext/boost/intrusive/splaytree.hpp +1784 -0
  168. data/ext/boost/intrusive/splaytree_algorithms.hpp +1008 -0
  169. data/ext/boost/intrusive/treap.hpp +1882 -0
  170. data/ext/boost/intrusive/treap_algorithms.hpp +919 -0
  171. data/ext/boost/intrusive/treap_set.hpp +2751 -0
  172. data/ext/boost/intrusive/trivial_value_traits.hpp +46 -0
  173. data/ext/boost/intrusive/unordered_set.hpp +2115 -0
  174. data/ext/boost/intrusive/unordered_set_hook.hpp +434 -0
  175. data/ext/boost/intrusive_ptr.hpp +18 -0
  176. data/ext/boost/math/common_factor_ct.hpp +180 -0
  177. data/ext/boost/math_fwd.hpp +108 -0
  178. data/ext/boost/move/detail/move_helpers.hpp +175 -0
  179. data/ext/boost/parameter.hpp +21 -0
  180. data/ext/boost/parameter/aux_/arg_list.hpp +459 -0
  181. data/ext/boost/parameter/aux_/cast.hpp +143 -0
  182. data/ext/boost/parameter/aux_/default.hpp +69 -0
  183. data/ext/boost/parameter/aux_/is_maybe.hpp +26 -0
  184. data/ext/boost/parameter/aux_/maybe.hpp +120 -0
  185. data/ext/boost/parameter/aux_/overloads.hpp +88 -0
  186. data/ext/boost/parameter/aux_/parameter_requirements.hpp +25 -0
  187. data/ext/boost/parameter/aux_/parenthesized_type.hpp +119 -0
  188. data/ext/boost/parameter/aux_/preprocessor/flatten.hpp +115 -0
  189. data/ext/boost/parameter/aux_/preprocessor/for_each.hpp +103 -0
  190. data/ext/boost/parameter/aux_/python/invoker.hpp +132 -0
  191. data/ext/boost/parameter/aux_/python/invoker_iterate.hpp +93 -0
  192. data/ext/boost/parameter/aux_/result_of0.hpp +36 -0
  193. data/ext/boost/parameter/aux_/set.hpp +67 -0
  194. data/ext/boost/parameter/aux_/tag.hpp +38 -0
  195. data/ext/boost/parameter/aux_/tagged_argument.hpp +188 -0
  196. data/ext/boost/parameter/aux_/template_keyword.hpp +47 -0
  197. data/ext/boost/parameter/aux_/unwrap_cv_reference.hpp +97 -0
  198. data/ext/boost/parameter/aux_/void.hpp +29 -0
  199. data/ext/boost/parameter/aux_/yesno.hpp +26 -0
  200. data/ext/boost/parameter/binding.hpp +106 -0
  201. data/ext/boost/parameter/config.hpp +14 -0
  202. data/ext/boost/parameter/keyword.hpp +152 -0
  203. data/ext/boost/parameter/macros.hpp +99 -0
  204. data/ext/boost/parameter/match.hpp +55 -0
  205. data/ext/boost/parameter/name.hpp +156 -0
  206. data/ext/boost/parameter/parameters.hpp +931 -0
  207. data/ext/boost/parameter/preprocessor.hpp +1178 -0
  208. data/ext/boost/parameter/python.hpp +735 -0
  209. data/ext/boost/parameter/value_type.hpp +108 -0
  210. data/ext/boost/pool/detail/for.m4 +107 -0
  211. data/ext/boost/pool/detail/guard.hpp +69 -0
  212. data/ext/boost/pool/detail/mutex.hpp +42 -0
  213. data/ext/boost/pool/detail/pool_construct.bat +24 -0
  214. data/ext/boost/pool/detail/pool_construct.ipp +852 -0
  215. data/ext/boost/pool/detail/pool_construct.m4 +84 -0
  216. data/ext/boost/pool/detail/pool_construct.sh +12 -0
  217. data/ext/boost/pool/detail/pool_construct_simple.bat +25 -0
  218. data/ext/boost/pool/detail/pool_construct_simple.ipp +43 -0
  219. data/ext/boost/pool/detail/pool_construct_simple.m4 +72 -0
  220. data/ext/boost/pool/detail/pool_construct_simple.sh +12 -0
  221. data/ext/boost/pool/object_pool.hpp +287 -0
  222. data/ext/boost/pool/pool.hpp +1024 -0
  223. data/ext/boost/pool/pool_alloc.hpp +488 -0
  224. data/ext/boost/pool/poolfwd.hpp +82 -0
  225. data/ext/boost/pool/simple_segregated_storage.hpp +377 -0
  226. data/ext/boost/pool/singleton_pool.hpp +251 -0
  227. data/ext/boost/preprocessor/arithmetic.hpp +25 -0
  228. data/ext/boost/preprocessor/arithmetic/detail/div_base.hpp +61 -0
  229. data/ext/boost/preprocessor/arithmetic/div.hpp +39 -0
  230. data/ext/boost/preprocessor/arithmetic/mod.hpp +39 -0
  231. data/ext/boost/preprocessor/arithmetic/mul.hpp +53 -0
  232. data/ext/boost/preprocessor/array.hpp +32 -0
  233. data/ext/boost/preprocessor/array/enum.hpp +33 -0
  234. data/ext/boost/preprocessor/array/insert.hpp +55 -0
  235. data/ext/boost/preprocessor/array/pop_back.hpp +37 -0
  236. data/ext/boost/preprocessor/array/pop_front.hpp +38 -0
  237. data/ext/boost/preprocessor/array/push_back.hpp +33 -0
  238. data/ext/boost/preprocessor/array/push_front.hpp +33 -0
  239. data/ext/boost/preprocessor/array/remove.hpp +54 -0
  240. data/ext/boost/preprocessor/array/replace.hpp +49 -0
  241. data/ext/boost/preprocessor/array/reverse.hpp +29 -0
  242. data/ext/boost/preprocessor/array/to_list.hpp +33 -0
  243. data/ext/boost/preprocessor/array/to_seq.hpp +33 -0
  244. data/ext/boost/preprocessor/array/to_tuple.hpp +22 -0
  245. data/ext/boost/preprocessor/assert_msg.hpp +17 -0
  246. data/ext/boost/preprocessor/comma.hpp +17 -0
  247. data/ext/boost/preprocessor/comparison.hpp +24 -0
  248. data/ext/boost/preprocessor/comparison/equal.hpp +34 -0
  249. data/ext/boost/preprocessor/comparison/greater.hpp +38 -0
  250. data/ext/boost/preprocessor/comparison/greater_equal.hpp +38 -0
  251. data/ext/boost/preprocessor/comparison/less.hpp +46 -0
  252. data/ext/boost/preprocessor/comparison/less_equal.hpp +39 -0
  253. data/ext/boost/preprocessor/comparison/not_equal.hpp +814 -0
  254. data/ext/boost/preprocessor/config/limits.hpp +30 -0
  255. data/ext/boost/preprocessor/control.hpp +22 -0
  256. data/ext/boost/preprocessor/control/deduce_d.hpp +22 -0
  257. data/ext/boost/preprocessor/control/detail/dmc/while.hpp +536 -0
  258. data/ext/boost/preprocessor/control/detail/edg/while.hpp +534 -0
  259. data/ext/boost/preprocessor/control/detail/msvc/while.hpp +277 -0
  260. data/ext/boost/preprocessor/control/expr_if.hpp +30 -0
  261. data/ext/boost/preprocessor/debug.hpp +18 -0
  262. data/ext/boost/preprocessor/debug/assert.hpp +44 -0
  263. data/ext/boost/preprocessor/debug/line.hpp +35 -0
  264. data/ext/boost/preprocessor/detail/dmc/auto_rec.hpp +286 -0
  265. data/ext/boost/preprocessor/detail/is_nullary.hpp +30 -0
  266. data/ext/boost/preprocessor/detail/is_unary.hpp +30 -0
  267. data/ext/boost/preprocessor/detail/null.hpp +17 -0
  268. data/ext/boost/preprocessor/detail/split.hpp +35 -0
  269. data/ext/boost/preprocessor/enum_params_with_defaults.hpp +17 -0
  270. data/ext/boost/preprocessor/enum_shifted.hpp +17 -0
  271. data/ext/boost/preprocessor/expand.hpp +17 -0
  272. data/ext/boost/preprocessor/expr_if.hpp +17 -0
  273. data/ext/boost/preprocessor/facilities.hpp +23 -0
  274. data/ext/boost/preprocessor/facilities/apply.hpp +34 -0
  275. data/ext/boost/preprocessor/facilities/expand.hpp +28 -0
  276. data/ext/boost/preprocessor/facilities/is_1.hpp +23 -0
  277. data/ext/boost/preprocessor/facilities/is_empty.hpp +43 -0
  278. data/ext/boost/preprocessor/facilities/is_empty_or_1.hpp +30 -0
  279. data/ext/boost/preprocessor/for.hpp +17 -0
  280. data/ext/boost/preprocessor/if.hpp +17 -0
  281. data/ext/boost/preprocessor/iteration.hpp +19 -0
  282. data/ext/boost/preprocessor/iteration/detail/bounds/lower3.hpp +99 -0
  283. data/ext/boost/preprocessor/iteration/detail/bounds/lower4.hpp +99 -0
  284. data/ext/boost/preprocessor/iteration/detail/bounds/lower5.hpp +99 -0
  285. data/ext/boost/preprocessor/iteration/detail/bounds/upper3.hpp +99 -0
  286. data/ext/boost/preprocessor/iteration/detail/bounds/upper4.hpp +99 -0
  287. data/ext/boost/preprocessor/iteration/detail/bounds/upper5.hpp +99 -0
  288. data/ext/boost/preprocessor/iteration/detail/finish.hpp +99 -0
  289. data/ext/boost/preprocessor/iteration/detail/iter/forward3.hpp +1338 -0
  290. data/ext/boost/preprocessor/iteration/detail/iter/forward4.hpp +1338 -0
  291. data/ext/boost/preprocessor/iteration/detail/iter/forward5.hpp +1338 -0
  292. data/ext/boost/preprocessor/iteration/detail/iter/reverse2.hpp +1296 -0
  293. data/ext/boost/preprocessor/iteration/detail/iter/reverse3.hpp +1296 -0
  294. data/ext/boost/preprocessor/iteration/detail/iter/reverse4.hpp +1296 -0
  295. data/ext/boost/preprocessor/iteration/detail/iter/reverse5.hpp +1296 -0
  296. data/ext/boost/preprocessor/iteration/detail/local.hpp +812 -0
  297. data/ext/boost/preprocessor/iteration/detail/rlocal.hpp +782 -0
  298. data/ext/boost/preprocessor/iteration/detail/self.hpp +21 -0
  299. data/ext/boost/preprocessor/iteration/detail/start.hpp +99 -0
  300. data/ext/boost/preprocessor/iteration/local.hpp +26 -0
  301. data/ext/boost/preprocessor/iteration/self.hpp +19 -0
  302. data/ext/boost/preprocessor/library.hpp +36 -0
  303. data/ext/boost/preprocessor/limits.hpp +17 -0
  304. data/ext/boost/preprocessor/list.hpp +37 -0
  305. data/ext/boost/preprocessor/list/at.hpp +39 -0
  306. data/ext/boost/preprocessor/list/cat.hpp +42 -0
  307. data/ext/boost/preprocessor/list/detail/dmc/fold_left.hpp +279 -0
  308. data/ext/boost/preprocessor/list/detail/edg/fold_left.hpp +536 -0
  309. data/ext/boost/preprocessor/list/detail/edg/fold_right.hpp +794 -0
  310. data/ext/boost/preprocessor/list/enum.hpp +41 -0
  311. data/ext/boost/preprocessor/list/filter.hpp +54 -0
  312. data/ext/boost/preprocessor/list/first_n.hpp +58 -0
  313. data/ext/boost/preprocessor/list/for_each.hpp +49 -0
  314. data/ext/boost/preprocessor/list/for_each_product.hpp +141 -0
  315. data/ext/boost/preprocessor/list/rest_n.hpp +55 -0
  316. data/ext/boost/preprocessor/list/size.hpp +58 -0
  317. data/ext/boost/preprocessor/list/to_array.hpp +123 -0
  318. data/ext/boost/preprocessor/list/to_seq.hpp +32 -0
  319. data/ext/boost/preprocessor/list/to_tuple.hpp +38 -0
  320. data/ext/boost/preprocessor/logical.hpp +29 -0
  321. data/ext/boost/preprocessor/logical/bitnor.hpp +38 -0
  322. data/ext/boost/preprocessor/logical/bitor.hpp +38 -0
  323. data/ext/boost/preprocessor/logical/bitxor.hpp +38 -0
  324. data/ext/boost/preprocessor/logical/nor.hpp +30 -0
  325. data/ext/boost/preprocessor/logical/not.hpp +30 -0
  326. data/ext/boost/preprocessor/logical/or.hpp +30 -0
  327. data/ext/boost/preprocessor/logical/xor.hpp +30 -0
  328. data/ext/boost/preprocessor/max.hpp +17 -0
  329. data/ext/boost/preprocessor/min.hpp +17 -0
  330. data/ext/boost/preprocessor/punctuation.hpp +20 -0
  331. data/ext/boost/preprocessor/punctuation/paren_if.hpp +38 -0
  332. data/ext/boost/preprocessor/repeat_3rd.hpp +17 -0
  333. data/ext/boost/preprocessor/repeat_from_to.hpp +17 -0
  334. data/ext/boost/preprocessor/repeat_from_to_2nd.hpp +17 -0
  335. data/ext/boost/preprocessor/repeat_from_to_3rd.hpp +17 -0
  336. data/ext/boost/preprocessor/repetition.hpp +32 -0
  337. data/ext/boost/preprocessor/repetition/deduce_r.hpp +22 -0
  338. data/ext/boost/preprocessor/repetition/deduce_z.hpp +22 -0
  339. data/ext/boost/preprocessor/repetition/detail/dmc/for.hpp +536 -0
  340. data/ext/boost/preprocessor/repetition/detail/edg/for.hpp +534 -0
  341. data/ext/boost/preprocessor/repetition/detail/msvc/for.hpp +277 -0
  342. data/ext/boost/preprocessor/repetition/enum_params_with_defaults.hpp +24 -0
  343. data/ext/boost/preprocessor/repetition/enum_shifted.hpp +68 -0
  344. data/ext/boost/preprocessor/repetition/enum_shifted_binary_params.hpp +51 -0
  345. data/ext/boost/preprocessor/repetition/enum_trailing.hpp +63 -0
  346. data/ext/boost/preprocessor/repetition/enum_trailing_binary_params.hpp +53 -0
  347. data/ext/boost/preprocessor/selection.hpp +18 -0
  348. data/ext/boost/preprocessor/selection/max.hpp +39 -0
  349. data/ext/boost/preprocessor/selection/min.hpp +39 -0
  350. data/ext/boost/preprocessor/seq.hpp +43 -0
  351. data/ext/boost/preprocessor/seq/cat.hpp +49 -0
  352. data/ext/boost/preprocessor/seq/detail/binary_transform.hpp +40 -0
  353. data/ext/boost/preprocessor/seq/detail/split.hpp +284 -0
  354. data/ext/boost/preprocessor/seq/filter.hpp +54 -0
  355. data/ext/boost/preprocessor/seq/first_n.hpp +30 -0
  356. data/ext/boost/preprocessor/seq/fold_left.hpp +1070 -0
  357. data/ext/boost/preprocessor/seq/fold_right.hpp +288 -0
  358. data/ext/boost/preprocessor/seq/for_each.hpp +60 -0
  359. data/ext/boost/preprocessor/seq/for_each_product.hpp +126 -0
  360. data/ext/boost/preprocessor/seq/insert.hpp +28 -0
  361. data/ext/boost/preprocessor/seq/pop_back.hpp +29 -0
  362. data/ext/boost/preprocessor/seq/pop_front.hpp +27 -0
  363. data/ext/boost/preprocessor/seq/push_back.hpp +19 -0
  364. data/ext/boost/preprocessor/seq/push_front.hpp +19 -0
  365. data/ext/boost/preprocessor/seq/remove.hpp +29 -0
  366. data/ext/boost/preprocessor/seq/replace.hpp +29 -0
  367. data/ext/boost/preprocessor/seq/rest_n.hpp +30 -0
  368. data/ext/boost/preprocessor/seq/reverse.hpp +39 -0
  369. data/ext/boost/preprocessor/seq/subseq.hpp +28 -0
  370. data/ext/boost/preprocessor/seq/to_array.hpp +28 -0
  371. data/ext/boost/preprocessor/seq/to_list.hpp +29 -0
  372. data/ext/boost/preprocessor/seq/to_tuple.hpp +27 -0
  373. data/ext/boost/preprocessor/seq/transform.hpp +48 -0
  374. data/ext/boost/preprocessor/slot.hpp +17 -0
  375. data/ext/boost/preprocessor/slot/counter.hpp +25 -0
  376. data/ext/boost/preprocessor/slot/detail/counter.hpp +269 -0
  377. data/ext/boost/preprocessor/slot/detail/slot1.hpp +267 -0
  378. data/ext/boost/preprocessor/slot/detail/slot2.hpp +267 -0
  379. data/ext/boost/preprocessor/slot/detail/slot3.hpp +267 -0
  380. data/ext/boost/preprocessor/slot/detail/slot4.hpp +267 -0
  381. data/ext/boost/preprocessor/slot/detail/slot5.hpp +267 -0
  382. data/ext/boost/preprocessor/tuple.hpp +28 -0
  383. data/ext/boost/preprocessor/tuple/enum.hpp +22 -0
  384. data/ext/boost/preprocessor/tuple/reverse.hpp +114 -0
  385. data/ext/boost/preprocessor/tuple/size.hpp +28 -0
  386. data/ext/boost/preprocessor/tuple/to_array.hpp +37 -0
  387. data/ext/boost/preprocessor/tuple/to_seq.hpp +114 -0
  388. data/ext/boost/preprocessor/variadic.hpp +23 -0
  389. data/ext/boost/preprocessor/variadic/to_array.hpp +32 -0
  390. data/ext/boost/preprocessor/variadic/to_list.hpp +25 -0
  391. data/ext/boost/preprocessor/variadic/to_seq.hpp +25 -0
  392. data/ext/boost/preprocessor/variadic/to_tuple.hpp +24 -0
  393. data/ext/boost/preprocessor/while.hpp +17 -0
  394. data/ext/boost/preprocessor/wstringize.hpp +29 -0
  395. data/ext/boost/smart_ptr/intrusive_ptr.hpp +324 -0
  396. data/ext/common/AccountsDatabase.h +3 -4
  397. data/ext/common/AgentsStarter.cpp +12 -15
  398. data/ext/common/AgentsStarter.h +54 -120
  399. data/ext/common/ApplicationPool2/AppTypes.cpp +12 -5
  400. data/ext/common/ApplicationPool2/AppTypes.h +21 -14
  401. data/ext/common/ApplicationPool2/Common.h +36 -19
  402. data/ext/common/ApplicationPool2/DirectSpawner.h +15 -16
  403. data/ext/common/ApplicationPool2/DummySpawner.h +9 -8
  404. data/ext/common/ApplicationPool2/ErrorRenderer.h +1 -1
  405. data/ext/common/ApplicationPool2/Group.h +304 -171
  406. data/ext/common/ApplicationPool2/Implementation.cpp +234 -125
  407. data/ext/common/ApplicationPool2/Options.h +50 -62
  408. data/ext/common/ApplicationPool2/Pool.h +285 -189
  409. data/ext/common/ApplicationPool2/Process.h +126 -115
  410. data/ext/common/ApplicationPool2/Session.h +70 -30
  411. data/ext/common/ApplicationPool2/SmartSpawner.h +19 -18
  412. data/ext/common/ApplicationPool2/Socket.h +57 -43
  413. data/ext/common/ApplicationPool2/SpawnObject.h +83 -0
  414. data/ext/common/ApplicationPool2/Spawner.h +59 -38
  415. data/ext/common/ApplicationPool2/SpawnerFactory.h +8 -14
  416. data/ext/common/ApplicationPool2/SuperGroup.h +69 -40
  417. data/ext/common/BackgroundEventLoop.cpp +48 -1
  418. data/ext/common/BackgroundEventLoop.h +3 -1
  419. data/ext/common/Constants.h +30 -8
  420. data/ext/common/DataStructures/HashedStaticString.h +103 -0
  421. data/ext/common/DataStructures/LString.h +396 -0
  422. data/ext/common/DataStructures/StringKeyTable.h +588 -0
  423. data/ext/common/EventedMessageServer.h +1 -0
  424. data/ext/common/FileDescriptor.h +5 -0
  425. data/ext/common/InstanceDirectory.h +240 -0
  426. data/ext/common/Logging.cpp +38 -13
  427. data/ext/common/Logging.h +53 -22
  428. data/ext/common/MemoryKit/mbuf.cpp +413 -0
  429. data/ext/common/MemoryKit/mbuf.h +266 -0
  430. data/ext/common/MemoryKit/palloc.cpp +337 -0
  431. data/ext/common/MemoryKit/palloc.h +121 -0
  432. data/ext/common/ResourceLocator.h +62 -6
  433. data/ext/common/SafeLibev.h +4 -4
  434. data/ext/common/ServerKit/AcceptLoadBalancer.h +275 -0
  435. data/ext/common/ServerKit/Channel.h +747 -0
  436. data/ext/common/ServerKit/Client.h +166 -0
  437. data/ext/common/ServerKit/ClientRef.h +130 -0
  438. data/ext/common/ServerKit/Context.h +129 -0
  439. data/ext/common/ServerKit/Errors.h +103 -0
  440. data/ext/common/ServerKit/FdSinkChannel.h +206 -0
  441. data/ext/common/ServerKit/FdSourceChannel.h +230 -0
  442. data/ext/common/ServerKit/FileBufferedChannel.h +1399 -0
  443. data/ext/common/ServerKit/FileBufferedFdSinkChannel.h +228 -0
  444. data/ext/common/ServerKit/HeaderTable.h +472 -0
  445. data/ext/common/ServerKit/Hooks.h +79 -0
  446. data/ext/common/ServerKit/HttpChunkedBodyParser.h +289 -0
  447. data/ext/common/ServerKit/HttpChunkedBodyParserState.h +70 -0
  448. data/ext/common/ServerKit/HttpClient.h +94 -0
  449. data/ext/common/ServerKit/HttpHeaderParser.h +477 -0
  450. data/ext/common/ServerKit/HttpHeaderParserState.h +60 -0
  451. data/ext/common/ServerKit/HttpRequest.h +276 -0
  452. data/ext/common/ServerKit/HttpRequestRef.h +130 -0
  453. data/ext/common/ServerKit/HttpServer.h +1152 -0
  454. data/ext/common/ServerKit/Implementation.cpp +47 -0
  455. data/ext/common/ServerKit/Server.h +1040 -0
  456. data/ext/common/ServerKit/http_parser.cpp +2259 -0
  457. data/ext/common/ServerKit/http_parser.h +330 -0
  458. data/ext/common/StaticString.h +8 -0
  459. data/ext/common/Utils.cpp +14 -12
  460. data/ext/common/Utils.h +9 -103
  461. data/ext/common/Utils/BufferedIO.h +1 -0
  462. data/ext/common/Utils/CachedFileStat.hpp +1 -7
  463. data/ext/common/Utils/DateParsing.h +379 -0
  464. data/ext/common/Utils/FileChangeChecker.h +3 -9
  465. data/ext/common/Utils/Hasher.cpp +52 -0
  466. data/ext/common/Utils/Hasher.h +58 -0
  467. data/ext/common/Utils/IOUtils.cpp +62 -62
  468. data/ext/common/Utils/JsonUtils.h +21 -0
  469. data/ext/common/Utils/OptionParsing.h +75 -0
  470. data/ext/common/Utils/StrIntUtils.cpp +112 -19
  471. data/ext/common/Utils/StrIntUtils.h +52 -12
  472. data/ext/common/Utils/StrIntUtilsNoStrictAliasing.cpp +174 -0
  473. data/ext/common/Utils/VariantMap.h +18 -7
  474. data/ext/common/Utils/modp_b64.cpp +290 -0
  475. data/ext/common/Utils/modp_b64.h +241 -0
  476. data/ext/common/Utils/modp_b64_data.h +479 -0
  477. data/ext/common/Utils/sysqueue.h +811 -0
  478. data/ext/common/agents/Base.cpp +71 -98
  479. data/ext/common/agents/Base.h +11 -3
  480. data/ext/common/agents/HelperAgent/AdminServer.h +690 -0
  481. data/ext/common/agents/HelperAgent/Main.cpp +899 -487
  482. data/ext/common/agents/HelperAgent/OptionParser.h +311 -0
  483. data/ext/common/agents/HelperAgent/RequestHandler.h +315 -2548
  484. data/ext/common/agents/HelperAgent/RequestHandler/AppResponse.h +225 -0
  485. data/ext/common/agents/HelperAgent/RequestHandler/BufferBody.cpp +93 -0
  486. data/ext/common/agents/HelperAgent/RequestHandler/CheckoutSession.cpp +346 -0
  487. data/ext/common/agents/HelperAgent/RequestHandler/Client.h +54 -0
  488. data/ext/common/agents/HelperAgent/RequestHandler/ForwardResponse.cpp +846 -0
  489. data/ext/common/agents/HelperAgent/RequestHandler/Hooks.cpp +231 -0
  490. data/ext/common/agents/HelperAgent/RequestHandler/InitRequest.cpp +434 -0
  491. data/ext/common/agents/HelperAgent/RequestHandler/Request.h +149 -0
  492. data/ext/common/agents/HelperAgent/RequestHandler/SendRequest.cpp +887 -0
  493. data/ext/common/agents/HelperAgent/RequestHandler/TurboCaching.h +293 -0
  494. data/ext/common/agents/HelperAgent/RequestHandler/Utils.cpp +301 -0
  495. data/ext/common/agents/HelperAgent/ResponseCache.h +624 -0
  496. data/ext/common/agents/HelperAgent/SystemMetricsTool.cpp +21 -23
  497. data/ext/common/agents/LoggingAgent/AdminServer.h +369 -0
  498. data/ext/common/agents/LoggingAgent/LoggingServer.h +1 -0
  499. data/ext/common/agents/LoggingAgent/Main.cpp +422 -215
  500. data/ext/common/agents/LoggingAgent/OptionParser.h +167 -0
  501. data/ext/common/agents/LoggingAgent/RemoteSender.h +3 -3
  502. data/ext/common/agents/Main.cpp +107 -0
  503. data/ext/common/agents/SpawnPreparer/Main.cpp +207 -0
  504. data/ext/common/agents/TempDirToucher/Main.cpp +429 -0
  505. data/ext/common/agents/Watchdog/AdminServer.h +390 -0
  506. data/ext/common/agents/Watchdog/AgentWatcher.cpp +7 -5
  507. data/ext/common/agents/Watchdog/HelperAgentWatcher.cpp +18 -39
  508. data/ext/common/agents/Watchdog/InstanceDirToucher.cpp +116 -0
  509. data/ext/common/agents/Watchdog/LoggingAgentWatcher.cpp +13 -17
  510. data/ext/common/agents/Watchdog/Main.cpp +743 -202
  511. data/ext/libeio/eio.c +17 -0
  512. data/ext/libeio/eio.h +2 -0
  513. data/ext/nginx/CacheLocationConfig.c +177 -198
  514. data/ext/nginx/CacheLocationConfig.c.erb +35 -22
  515. data/ext/nginx/Configuration.c +402 -236
  516. data/ext/nginx/Configuration.h +12 -5
  517. data/ext/nginx/ConfigurationCommands.c +35 -15
  518. data/ext/nginx/ConfigurationCommands.c.erb +4 -4
  519. data/ext/nginx/ConfigurationFields.h +9 -5
  520. data/ext/nginx/ConfigurationFields.h.erb +3 -1
  521. data/ext/nginx/ContentHandler.c +393 -362
  522. data/ext/nginx/CreateLocationConfig.c +8 -4
  523. data/ext/nginx/CreateLocationConfig.c.erb +8 -3
  524. data/ext/nginx/MergeLocationConfig.c +36 -6
  525. data/ext/nginx/MergeLocationConfig.c.erb +42 -1
  526. data/ext/nginx/ngx_http_passenger_module.c +28 -15
  527. data/ext/oxt/detail/backtrace_disabled.hpp +2 -1
  528. data/ext/oxt/detail/backtrace_enabled.hpp +15 -2
  529. data/ext/oxt/implementation.cpp +92 -20
  530. data/ext/oxt/thread.hpp +5 -0
  531. data/ext/ruby/extconf.rb +3 -6
  532. data/ext/ruby/passenger_native_support.c +13 -40
  533. data/helper-scripts/download_binaries/extconf.rb +4 -4
  534. data/helper-scripts/meteor-loader.rb +12 -112
  535. data/helper-scripts/node-loader.js +3 -91
  536. data/helper-scripts/rack-loader.rb +13 -14
  537. data/helper-scripts/rack-preloader.rb +16 -17
  538. data/helper-scripts/wsgi-loader.py +11 -7
  539. data/lib/phusion_passenger.rb +100 -79
  540. data/lib/phusion_passenger/abstract_installer.rb +28 -3
  541. data/lib/phusion_passenger/admin_tools.rb +3 -3
  542. data/lib/phusion_passenger/admin_tools/instance.rb +207 -0
  543. data/lib/phusion_passenger/admin_tools/instance_registry.rb +98 -0
  544. data/lib/phusion_passenger/apache2/config_options.rb +72 -22
  545. data/lib/phusion_passenger/common_library.rb +79 -14
  546. data/lib/phusion_passenger/config/about_command.rb +17 -23
  547. data/lib/phusion_passenger/config/admin_command_command.rb +175 -0
  548. data/lib/phusion_passenger/config/agent_compiler.rb +170 -0
  549. data/lib/phusion_passenger/config/command.rb +1 -4
  550. data/lib/phusion_passenger/config/compile_agent_command.rb +102 -0
  551. data/lib/phusion_passenger/config/compile_nginx_engine_command.rb +112 -0
  552. data/lib/phusion_passenger/config/detach_process_command.rb +32 -10
  553. data/lib/phusion_passenger/config/download_agent_command.rb +285 -0
  554. data/lib/phusion_passenger/config/download_nginx_engine_command.rb +281 -0
  555. data/lib/phusion_passenger/config/install_agent_command.rb +174 -0
  556. data/lib/phusion_passenger/config/install_standalone_runtime_command.rb +231 -0
  557. data/lib/phusion_passenger/config/installation_utils.rb +241 -0
  558. data/lib/phusion_passenger/config/list_instances_command.rb +13 -25
  559. data/lib/phusion_passenger/config/main.rb +43 -14
  560. data/lib/phusion_passenger/config/nginx_engine_compiler.rb +337 -0
  561. data/lib/phusion_passenger/config/reopen_logs_command.rb +110 -0
  562. data/lib/phusion_passenger/config/restart_app_command.rb +61 -14
  563. data/lib/phusion_passenger/config/system_metrics_command.rb +2 -1
  564. data/lib/phusion_passenger/config/utils.rb +64 -39
  565. data/lib/phusion_passenger/config/validate_install_command.rb +2 -2
  566. data/lib/phusion_passenger/constants.rb +27 -6
  567. data/lib/phusion_passenger/debug_logging.rb +32 -15
  568. data/lib/phusion_passenger/loader_shared_helpers.rb +2 -5
  569. data/lib/phusion_passenger/message_client.rb +21 -22
  570. data/lib/phusion_passenger/native_support.rb +26 -31
  571. data/lib/phusion_passenger/nginx/config_options.rb +32 -19
  572. data/lib/phusion_passenger/packaging.rb +7 -3
  573. data/lib/phusion_passenger/platform_info/cxx_portability.rb +1 -2
  574. data/lib/phusion_passenger/platform_info/depcheck_specs/libs.rb +3 -4
  575. data/lib/phusion_passenger/platform_info/operating_system.rb +6 -6
  576. data/lib/phusion_passenger/preloader_shared_helpers.rb +2 -2
  577. data/lib/phusion_passenger/rack/out_of_band_gc.rb +2 -2
  578. data/lib/phusion_passenger/rack/thread_handler_extension.rb +168 -65
  579. data/lib/phusion_passenger/request_handler.rb +47 -82
  580. data/lib/phusion_passenger/request_handler/thread_handler.rb +46 -10
  581. data/lib/phusion_passenger/ruby_core_enhancements.rb +25 -77
  582. data/lib/phusion_passenger/ruby_core_io_enhancements.rb +108 -0
  583. data/lib/phusion_passenger/standalone/app_finder.rb +39 -59
  584. data/lib/phusion_passenger/standalone/command.rb +27 -275
  585. data/lib/phusion_passenger/standalone/command2.rb +292 -0
  586. data/lib/phusion_passenger/standalone/config_utils.rb +87 -0
  587. data/lib/phusion_passenger/standalone/control_utils.rb +88 -0
  588. data/lib/phusion_passenger/standalone/main.rb +69 -71
  589. data/lib/phusion_passenger/standalone/start2_command.rb +799 -0
  590. data/lib/phusion_passenger/standalone/start_command.rb +406 -467
  591. data/lib/phusion_passenger/standalone/start_command/builtin_engine.rb +167 -0
  592. data/lib/phusion_passenger/standalone/start_command/nginx_engine.rb +165 -0
  593. data/lib/phusion_passenger/standalone/status_command.rb +64 -23
  594. data/lib/phusion_passenger/standalone/stop_command.rb +69 -32
  595. data/lib/phusion_passenger/standalone/version_command.rb +1 -5
  596. data/lib/phusion_passenger/utils.rb +0 -4
  597. data/lib/phusion_passenger/utils/json.rb +70 -4
  598. data/lib/phusion_passenger/utils/progress_bar.rb +56 -0
  599. data/lib/phusion_passenger/utils/tee_input.rb +3 -3
  600. data/lib/phusion_passenger/utils/unseekable_socket.rb +30 -0
  601. data/packaging/rpm/nginx_spec/nginx.spec.template +4 -3
  602. data/packaging/rpm/passenger_spec/passenger.spec.template +6 -10
  603. data/packaging/rpm/setup-system +2 -1
  604. data/resources/oss-binaries.phusionpassenger.com.crt +208 -0
  605. data/resources/templates/config/agent_compiler/confirm_enable_optimizations.txt.erb +5 -0
  606. data/resources/templates/config/installation_utils/cannot_create_user_support_binaries_dir.txt.erb +15 -0
  607. data/resources/templates/config/installation_utils/download_tool_missing.txt.erb +7 -0
  608. data/resources/templates/config/installation_utils/passenger_not_installed_as_root.txt.erb +12 -0
  609. data/resources/templates/config/installation_utils/support_binaries_dir_not_writable_despite_running_as_root.txt.erb +13 -0
  610. data/resources/templates/config/installation_utils/unexpected_filesystem_problem.txt.erb +16 -0
  611. data/{packaging/debian/debian_specs/passenger/patches/series → resources/templates/config/installation_utils/user_support_binaries_dir_not_writable.txt.erb} +0 -0
  612. data/resources/templates/nginx/nginx_module_sources_not_available.txt.erb +2 -2
  613. data/resources/templates/standalone/config.erb +14 -16
  614. data/resources/templates/standalone/possible_solutions_for_download_and_extraction_problems.txt.erb +1 -1
  615. data/test/.rspec +1 -0
  616. data/test/cxx/ApplicationPool2/DirectSpawnerTest.cpp +20 -17
  617. data/test/cxx/ApplicationPool2/OptionsTest.cpp +0 -14
  618. data/test/cxx/ApplicationPool2/PoolTest.cpp +113 -90
  619. data/test/cxx/ApplicationPool2/ProcessTest.cpp +18 -27
  620. data/test/cxx/ApplicationPool2/SmartSpawnerTest.cpp +51 -53
  621. data/test/cxx/ApplicationPool2/SpawnerTestCases.cpp +55 -57
  622. data/test/cxx/BufferedIOTest.cpp +40 -40
  623. data/test/cxx/CxxTestMain.cpp +4 -22
  624. data/test/cxx/DataStructures/LStringTest.cpp +275 -0
  625. data/test/cxx/DataStructures/StringKeyTableTest.cpp +199 -0
  626. data/test/cxx/MemoryKit/MbufTest.cpp +213 -0
  627. data/test/cxx/MessageServerTest.cpp +62 -55
  628. data/test/cxx/RequestHandlerTest.cpp +26 -27
  629. data/test/cxx/ServerKit/ChannelTest.cpp +1467 -0
  630. data/test/cxx/ServerKit/FileBufferedChannelTest.cpp +817 -0
  631. data/test/cxx/ServerKit/HeaderTableTest.cpp +171 -0
  632. data/test/cxx/ServerKit/HttpServerTest.cpp +1503 -0
  633. data/test/cxx/ServerKit/ServerTest.cpp +408 -0
  634. data/test/cxx/TestSupport.cpp +51 -15
  635. data/test/cxx/TestSupport.h +31 -21
  636. data/test/cxx/UnionStationTest.cpp +121 -122
  637. data/test/cxx/UtilsTest.cpp +9 -33
  638. data/test/integration_tests/apache2_tests.rb +65 -27
  639. data/test/integration_tests/downloaded_binaries_tests.rb +30 -6
  640. data/test/integration_tests/native_packaging_spec.rb +32 -17
  641. data/test/integration_tests/nginx_tests.rb +28 -10
  642. data/test/integration_tests/shared/example_webapp_tests.rb +40 -27
  643. data/test/integration_tests/standalone_tests.rb +232 -169
  644. data/test/ruby/debug_logging_spec.rb +44 -40
  645. data/test/ruby/rails3.0/preloader_spec.rb +1 -1
  646. data/test/ruby/rails3.1/preloader_spec.rb +1 -1
  647. data/test/ruby/rails3.2/preloader_spec.rb +1 -1
  648. data/test/ruby/rails4.0/preloader_spec.rb +1 -1
  649. data/test/ruby/rails4.1/preloader_spec.rb +1 -1
  650. data/test/ruby/request_handler_spec.rb +62 -24
  651. data/test/ruby/shared/loader_sharedspec.rb +10 -9
  652. data/test/ruby/shared/rails/union_station_extensions_sharedspec.rb +23 -22
  653. data/test/ruby/spec_helper.rb +2 -11
  654. data/test/ruby/standalone/runtime_installer_spec.rb +15 -13
  655. data/test/ruby/union_station_spec.rb +45 -40
  656. data/test/ruby/utils/tee_input_spec.rb +5 -5
  657. data/test/ruby/utils_spec.rb +3 -39
  658. data/test/stub/apache2/httpd.conf.erb +5 -2
  659. data/test/stub/nginx/nginx.conf.erb +3 -1
  660. data/test/support/apache2_controller.rb +25 -25
  661. data/test/support/nginx_controller.rb +14 -14
  662. data/test/support/test_helper.rb +74 -75
  663. metadata +439 -643
  664. metadata.gz.asc +7 -7
  665. data/ext/common/MultiLibeio.cpp +0 -204
  666. data/ext/common/MultiLibeio.h +0 -67
  667. data/ext/common/ServerInstanceDir.h +0 -402
  668. data/ext/common/Utils/Base64.cpp +0 -143
  669. data/ext/common/Utils/Base64.h +0 -83
  670. data/ext/common/Utils/HttpHeaderBufferer.h +0 -184
  671. data/ext/common/Utils/PriorityQueue.h +0 -54
  672. data/ext/common/Utils/StreamBoyerMooreHorspool.h +0 -512
  673. data/ext/common/Utils/fib.c +0 -699
  674. data/ext/common/Utils/fib.h +0 -101
  675. data/ext/common/Utils/fibpriv.h +0 -67
  676. data/ext/common/agents/EnvPrinter.c +0 -16
  677. data/ext/common/agents/HelperAgent/AgentOptions.h +0 -109
  678. data/ext/common/agents/HelperAgent/FileBackedPipe.h +0 -732
  679. data/ext/common/agents/HelperAgent/RequestHandler.cpp +0 -294
  680. data/ext/common/agents/HelperAgent/ScgiRequestParser.h +0 -457
  681. data/ext/common/agents/LoggingAgent/AdminController.h +0 -96
  682. data/ext/common/agents/SpawnPreparer.cpp +0 -206
  683. data/ext/common/agents/TempDirToucher.c +0 -383
  684. data/ext/common/agents/Watchdog/ServerInstanceDirToucher.cpp +0 -116
  685. data/helper-scripts/classic-rails-loader.rb +0 -166
  686. data/helper-scripts/classic-rails-preloader.rb +0 -193
  687. data/lib/phusion_passenger/admin_tools/server_instance.rb +0 -339
  688. data/lib/phusion_passenger/classic_rails/cgi_fixed.rb +0 -68
  689. data/lib/phusion_passenger/classic_rails/thread_handler_extension.rb +0 -40
  690. data/lib/phusion_passenger/platform_info/openssl.rb +0 -61
  691. data/lib/phusion_passenger/standalone/config_file.rb +0 -119
  692. data/lib/phusion_passenger/standalone/help_command.rb +0 -57
  693. data/lib/phusion_passenger/standalone/runtime_installer.rb +0 -712
  694. data/lib/phusion_passenger/standalone/runtime_locator.rb +0 -170
  695. data/lib/phusion_passenger/standalone/utils.rb +0 -58
  696. data/lib/phusion_passenger/utils/tmpdir.rb +0 -69
  697. data/packaging/debian/LICENSE.md +0 -19
  698. data/packaging/debian/README.md +0 -320
  699. data/packaging/debian/Vagrantfile +0 -25
  700. data/packaging/debian/build +0 -210
  701. data/packaging/debian/debian_specs/nginx/changelog +0 -1989
  702. data/packaging/debian/debian_specs/nginx/compat.erb +0 -5
  703. data/packaging/debian/debian_specs/nginx/conf/fastcgi.conf +0 -25
  704. data/packaging/debian/debian_specs/nginx/conf/fastcgi_params +0 -24
  705. data/packaging/debian/debian_specs/nginx/conf/koi-utf +0 -109
  706. data/packaging/debian/debian_specs/nginx/conf/koi-win +0 -103
  707. data/packaging/debian/debian_specs/nginx/conf/mime.types +0 -89
  708. data/packaging/debian/debian_specs/nginx/conf/nginx.conf.erb +0 -97
  709. data/packaging/debian/debian_specs/nginx/conf/proxy_params +0 -4
  710. data/packaging/debian/debian_specs/nginx/conf/scgi_params +0 -16
  711. data/packaging/debian/debian_specs/nginx/conf/sites-available/default.erb +0 -93
  712. data/packaging/debian/debian_specs/nginx/conf/snippets/fastcgi-php.conf +0 -13
  713. data/packaging/debian/debian_specs/nginx/conf/snippets/snakeoil.conf +0 -5
  714. data/packaging/debian/debian_specs/nginx/conf/uwsgi_params +0 -16
  715. data/packaging/debian/debian_specs/nginx/conf/win-utf +0 -125
  716. data/packaging/debian/debian_specs/nginx/control.erb +0 -226
  717. data/packaging/debian/debian_specs/nginx/copyright +0 -196
  718. data/packaging/debian/debian_specs/nginx/debian-full.lintian-overrides +0 -1
  719. data/packaging/debian/debian_specs/nginx/gbp.conf +0 -2
  720. data/packaging/debian/debian_specs/nginx/help/docs/fcgiwrap +0 -14
  721. data/packaging/debian/debian_specs/nginx/help/docs/php +0 -119
  722. data/packaging/debian/debian_specs/nginx/help/docs/support-irc +0 -28
  723. data/packaging/debian/debian_specs/nginx/help/docs/upstream +0 -51
  724. data/packaging/debian/debian_specs/nginx/help/examples/drupal +0 -114
  725. data/packaging/debian/debian_specs/nginx/help/examples/http +0 -59
  726. data/packaging/debian/debian_specs/nginx/help/examples/mail +0 -30
  727. data/packaging/debian/debian_specs/nginx/help/examples/mailman +0 -59
  728. data/packaging/debian/debian_specs/nginx/help/examples/nginx.conf +0 -34
  729. data/packaging/debian/debian_specs/nginx/help/examples/nginx_modsite +0 -162
  730. data/packaging/debian/debian_specs/nginx/help/examples/virtual_hosts +0 -155
  731. data/packaging/debian/debian_specs/nginx/help/examples/wordpress +0 -74
  732. data/packaging/debian/debian_specs/nginx/helpers.rb +0 -41
  733. data/packaging/debian/debian_specs/nginx/index-debian.html.in +0 -32
  734. data/packaging/debian/debian_specs/nginx/index-ubuntu.html.in +0 -32
  735. data/packaging/debian/debian_specs/nginx/index.html.erb +0 -10
  736. data/packaging/debian/debian_specs/nginx/modules/README.Modules-versions +0 -65
  737. data/packaging/debian/debian_specs/nginx/modules/headers-more-nginx-module/README.markdown +0 -510
  738. data/packaging/debian/debian_specs/nginx/modules/headers-more-nginx-module/config +0 -5
  739. data/packaging/debian/debian_specs/nginx/modules/headers-more-nginx-module/doc/HttpHeadersMoreModule.wiki +0 -395
  740. data/packaging/debian/debian_specs/nginx/modules/headers-more-nginx-module/src/ddebug.h +0 -119
  741. data/packaging/debian/debian_specs/nginx/modules/headers-more-nginx-module/src/ngx_http_headers_more_filter_module.c +0 -348
  742. data/packaging/debian/debian_specs/nginx/modules/headers-more-nginx-module/src/ngx_http_headers_more_filter_module.h +0 -80
  743. data/packaging/debian/debian_specs/nginx/modules/headers-more-nginx-module/src/ngx_http_headers_more_headers_in.c +0 -826
  744. data/packaging/debian/debian_specs/nginx/modules/headers-more-nginx-module/src/ngx_http_headers_more_headers_in.h +0 -26
  745. data/packaging/debian/debian_specs/nginx/modules/headers-more-nginx-module/src/ngx_http_headers_more_headers_out.c +0 -716
  746. data/packaging/debian/debian_specs/nginx/modules/headers-more-nginx-module/src/ngx_http_headers_more_headers_out.h +0 -26
  747. data/packaging/debian/debian_specs/nginx/modules/headers-more-nginx-module/src/ngx_http_headers_more_util.c +0 -380
  748. data/packaging/debian/debian_specs/nginx/modules/headers-more-nginx-module/src/ngx_http_headers_more_util.h +0 -52
  749. data/packaging/debian/debian_specs/nginx/modules/headers-more-nginx-module/util/build.sh +0 -32
  750. data/packaging/debian/debian_specs/nginx/modules/headers-more-nginx-module/valgrind.suppress +0 -215
  751. data/packaging/debian/debian_specs/nginx/modules/nginx-auth-pam/ChangeLog +0 -35
  752. data/packaging/debian/debian_specs/nginx/modules/nginx-auth-pam/LICENSE +0 -25
  753. data/packaging/debian/debian_specs/nginx/modules/nginx-auth-pam/README.md +0 -93
  754. data/packaging/debian/debian_specs/nginx/modules/nginx-auth-pam/config +0 -4
  755. data/packaging/debian/debian_specs/nginx/modules/nginx-auth-pam/ngx_http_auth_pam_module.c +0 -462
  756. data/packaging/debian/debian_specs/nginx/modules/nginx-cache-purge/CHANGES +0 -66
  757. data/packaging/debian/debian_specs/nginx/modules/nginx-cache-purge/LICENSE +0 -26
  758. data/packaging/debian/debian_specs/nginx/modules/nginx-cache-purge/README.md +0 -171
  759. data/packaging/debian/debian_specs/nginx/modules/nginx-cache-purge/TODO.md +0 -7
  760. data/packaging/debian/debian_specs/nginx/modules/nginx-cache-purge/config +0 -21
  761. data/packaging/debian/debian_specs/nginx/modules/nginx-cache-purge/ngx_cache_purge_module.c +0 -1803
  762. data/packaging/debian/debian_specs/nginx/modules/nginx-dav-ext-module/README +0 -29
  763. data/packaging/debian/debian_specs/nginx/modules/nginx-dav-ext-module/config +0 -9
  764. data/packaging/debian/debian_specs/nginx/modules/nginx-dav-ext-module/ngx_http_dav_ext_module.c +0 -824
  765. data/packaging/debian/debian_specs/nginx/modules/nginx-development-kit/README +0 -139
  766. data/packaging/debian/debian_specs/nginx/modules/nginx-development-kit/README_AUTO_LIB +0 -395
  767. data/packaging/debian/debian_specs/nginx/modules/nginx-development-kit/TODO +0 -1
  768. data/packaging/debian/debian_specs/nginx/modules/nginx-development-kit/auto/actions/array +0 -10
  769. data/packaging/debian/debian_specs/nginx/modules/nginx-development-kit/auto/actions/palloc +0 -8
  770. data/packaging/debian/debian_specs/nginx/modules/nginx-development-kit/auto/build +0 -597
  771. data/packaging/debian/debian_specs/nginx/modules/nginx-development-kit/auto/data/action_replacements +0 -5
  772. data/packaging/debian/debian_specs/nginx/modules/nginx-development-kit/auto/data/action_types +0 -12
  773. data/packaging/debian/debian_specs/nginx/modules/nginx-development-kit/auto/data/conf_args +0 -22
  774. data/packaging/debian/debian_specs/nginx/modules/nginx-development-kit/auto/data/conf_locs +0 -25
  775. data/packaging/debian/debian_specs/nginx/modules/nginx-development-kit/auto/data/conf_macros +0 -35
  776. data/packaging/debian/debian_specs/nginx/modules/nginx-development-kit/auto/data/contexts +0 -22
  777. data/packaging/debian/debian_specs/nginx/modules/nginx-development-kit/auto/data/header_files +0 -3
  778. data/packaging/debian/debian_specs/nginx/modules/nginx-development-kit/auto/data/headers +0 -4
  779. data/packaging/debian/debian_specs/nginx/modules/nginx-development-kit/auto/data/module_dependencies +0 -5
  780. data/packaging/debian/debian_specs/nginx/modules/nginx-development-kit/auto/data/modules_optional +0 -15
  781. data/packaging/debian/debian_specs/nginx/modules/nginx-development-kit/auto/data/prefixes +0 -2
  782. data/packaging/debian/debian_specs/nginx/modules/nginx-development-kit/auto/src/array.h +0 -7
  783. data/packaging/debian/debian_specs/nginx/modules/nginx-development-kit/auto/src/conf_cmd_basic.h +0 -43
  784. data/packaging/debian/debian_specs/nginx/modules/nginx-development-kit/auto/src/conf_merge.h +0 -78
  785. data/packaging/debian/debian_specs/nginx/modules/nginx-development-kit/auto/src/palloc.h +0 -6
  786. data/packaging/debian/debian_specs/nginx/modules/nginx-development-kit/auto/text/autogen +0 -12
  787. data/packaging/debian/debian_specs/nginx/modules/nginx-development-kit/config +0 -49
  788. data/packaging/debian/debian_specs/nginx/modules/nginx-development-kit/docs/core/action_macros +0 -63
  789. data/packaging/debian/debian_specs/nginx/modules/nginx-development-kit/docs/core/conf_cmds +0 -62
  790. data/packaging/debian/debian_specs/nginx/modules/nginx-development-kit/docs/modules/set_var +0 -124
  791. data/packaging/debian/debian_specs/nginx/modules/nginx-development-kit/docs/patches/more_logging_info +0 -48
  792. data/packaging/debian/debian_specs/nginx/modules/nginx-development-kit/docs/upstream/list +0 -45
  793. data/packaging/debian/debian_specs/nginx/modules/nginx-development-kit/examples/README +0 -12
  794. data/packaging/debian/debian_specs/nginx/modules/nginx-development-kit/examples/http/set_var/config +0 -4
  795. data/packaging/debian/debian_specs/nginx/modules/nginx-development-kit/examples/http/set_var/ngx_http_set_var_examples_module.c +0 -136
  796. data/packaging/debian/debian_specs/nginx/modules/nginx-development-kit/ngx_auto_lib_core +0 -797
  797. data/packaging/debian/debian_specs/nginx/modules/nginx-development-kit/notes/CHANGES +0 -17
  798. data/packaging/debian/debian_specs/nginx/modules/nginx-development-kit/notes/LICENSE +0 -24
  799. data/packaging/debian/debian_specs/nginx/modules/nginx-development-kit/objs/ndk_array.h +0 -113
  800. data/packaging/debian/debian_specs/nginx/modules/nginx-development-kit/objs/ndk_conf_cmd_basic.h +0 -2203
  801. data/packaging/debian/debian_specs/nginx/modules/nginx-development-kit/objs/ndk_conf_cmd_extra.h +0 -5423
  802. data/packaging/debian/debian_specs/nginx/modules/nginx-development-kit/objs/ndk_conf_merge.h +0 -227
  803. data/packaging/debian/debian_specs/nginx/modules/nginx-development-kit/objs/ndk_config.c +0 -72
  804. data/packaging/debian/debian_specs/nginx/modules/nginx-development-kit/objs/ndk_config.h +0 -98
  805. data/packaging/debian/debian_specs/nginx/modules/nginx-development-kit/objs/ndk_includes.h +0 -66
  806. data/packaging/debian/debian_specs/nginx/modules/nginx-development-kit/objs/ndk_palloc.h +0 -112
  807. data/packaging/debian/debian_specs/nginx/modules/nginx-development-kit/patches/auto_config +0 -16
  808. data/packaging/debian/debian_specs/nginx/modules/nginx-development-kit/patches/expose_rewrite_functions +0 -291
  809. data/packaging/debian/debian_specs/nginx/modules/nginx-development-kit/patches/rewrite_phase_handler +0 -19
  810. data/packaging/debian/debian_specs/nginx/modules/nginx-development-kit/src/hash/md5.h +0 -117
  811. data/packaging/debian/debian_specs/nginx/modules/nginx-development-kit/src/hash/murmurhash2.c +0 -77
  812. data/packaging/debian/debian_specs/nginx/modules/nginx-development-kit/src/hash/sha.h +0 -200
  813. data/packaging/debian/debian_specs/nginx/modules/nginx-development-kit/src/ndk.c +0 -155
  814. data/packaging/debian/debian_specs/nginx/modules/nginx-development-kit/src/ndk.h +0 -58
  815. data/packaging/debian/debian_specs/nginx/modules/nginx-development-kit/src/ndk_buf.c +0 -43
  816. data/packaging/debian/debian_specs/nginx/modules/nginx-development-kit/src/ndk_buf.h +0 -5
  817. data/packaging/debian/debian_specs/nginx/modules/nginx-development-kit/src/ndk_complex_path.c +0 -129
  818. data/packaging/debian/debian_specs/nginx/modules/nginx-development-kit/src/ndk_complex_path.h +0 -30
  819. data/packaging/debian/debian_specs/nginx/modules/nginx-development-kit/src/ndk_complex_value.c +0 -192
  820. data/packaging/debian/debian_specs/nginx/modules/nginx-development-kit/src/ndk_complex_value.h +0 -21
  821. data/packaging/debian/debian_specs/nginx/modules/nginx-development-kit/src/ndk_conf_file.c +0 -396
  822. data/packaging/debian/debian_specs/nginx/modules/nginx-development-kit/src/ndk_conf_file.h +0 -44
  823. data/packaging/debian/debian_specs/nginx/modules/nginx-development-kit/src/ndk_debug.c +0 -72
  824. data/packaging/debian/debian_specs/nginx/modules/nginx-development-kit/src/ndk_debug.h +0 -171
  825. data/packaging/debian/debian_specs/nginx/modules/nginx-development-kit/src/ndk_encoding.c +0 -57
  826. data/packaging/debian/debian_specs/nginx/modules/nginx-development-kit/src/ndk_encoding.h +0 -12
  827. data/packaging/debian/debian_specs/nginx/modules/nginx-development-kit/src/ndk_hash.c +0 -82
  828. data/packaging/debian/debian_specs/nginx/modules/nginx-development-kit/src/ndk_hash.h +0 -45
  829. data/packaging/debian/debian_specs/nginx/modules/nginx-development-kit/src/ndk_http.c +0 -138
  830. data/packaging/debian/debian_specs/nginx/modules/nginx-development-kit/src/ndk_http.h +0 -3
  831. data/packaging/debian/debian_specs/nginx/modules/nginx-development-kit/src/ndk_http_headers.h +0 -35
  832. data/packaging/debian/debian_specs/nginx/modules/nginx-development-kit/src/ndk_log.c +0 -3
  833. data/packaging/debian/debian_specs/nginx/modules/nginx-development-kit/src/ndk_log.h +0 -165
  834. data/packaging/debian/debian_specs/nginx/modules/nginx-development-kit/src/ndk_parse.h +0 -67
  835. data/packaging/debian/debian_specs/nginx/modules/nginx-development-kit/src/ndk_path.c +0 -583
  836. data/packaging/debian/debian_specs/nginx/modules/nginx-development-kit/src/ndk_path.h +0 -22
  837. data/packaging/debian/debian_specs/nginx/modules/nginx-development-kit/src/ndk_process.c +0 -20
  838. data/packaging/debian/debian_specs/nginx/modules/nginx-development-kit/src/ndk_process.h +0 -12
  839. data/packaging/debian/debian_specs/nginx/modules/nginx-development-kit/src/ndk_regex.c +0 -215
  840. data/packaging/debian/debian_specs/nginx/modules/nginx-development-kit/src/ndk_regex.h +0 -7
  841. data/packaging/debian/debian_specs/nginx/modules/nginx-development-kit/src/ndk_rewrite.c +0 -103
  842. data/packaging/debian/debian_specs/nginx/modules/nginx-development-kit/src/ndk_rewrite.h +0 -26
  843. data/packaging/debian/debian_specs/nginx/modules/nginx-development-kit/src/ndk_set_var.c +0 -602
  844. data/packaging/debian/debian_specs/nginx/modules/nginx-development-kit/src/ndk_set_var.h +0 -44
  845. data/packaging/debian/debian_specs/nginx/modules/nginx-development-kit/src/ndk_string.c +0 -434
  846. data/packaging/debian/debian_specs/nginx/modules/nginx-development-kit/src/ndk_string.h +0 -37
  847. data/packaging/debian/debian_specs/nginx/modules/nginx-development-kit/src/ndk_string_util.h +0 -14
  848. data/packaging/debian/debian_specs/nginx/modules/nginx-development-kit/src/ndk_upstream_list.c +0 -205
  849. data/packaging/debian/debian_specs/nginx/modules/nginx-development-kit/src/ndk_upstream_list.h +0 -27
  850. data/packaging/debian/debian_specs/nginx/modules/nginx-development-kit/src/ndk_uri.c +0 -45
  851. data/packaging/debian/debian_specs/nginx/modules/nginx-development-kit/src/ndk_uri.h +0 -6
  852. data/packaging/debian/debian_specs/nginx/modules/nginx-echo/LICENSE +0 -25
  853. data/packaging/debian/debian_specs/nginx/modules/nginx-echo/README.markdown +0 -1850
  854. data/packaging/debian/debian_specs/nginx/modules/nginx-echo/config +0 -5
  855. data/packaging/debian/debian_specs/nginx/modules/nginx-echo/doc/HttpEchoModule.wiki +0 -1558
  856. data/packaging/debian/debian_specs/nginx/modules/nginx-echo/src/ddebug.h +0 -109
  857. data/packaging/debian/debian_specs/nginx/modules/nginx-echo/src/ngx_http_echo_echo.c +0 -344
  858. data/packaging/debian/debian_specs/nginx/modules/nginx-echo/src/ngx_http_echo_echo.h +0 -25
  859. data/packaging/debian/debian_specs/nginx/modules/nginx-echo/src/ngx_http_echo_filter.c +0 -282
  860. data/packaging/debian/debian_specs/nginx/modules/nginx-echo/src/ngx_http_echo_filter.h +0 -15
  861. data/packaging/debian/debian_specs/nginx/modules/nginx-echo/src/ngx_http_echo_foreach.c +0 -183
  862. data/packaging/debian/debian_specs/nginx/modules/nginx-echo/src/ngx_http_echo_foreach.h +0 -16
  863. data/packaging/debian/debian_specs/nginx/modules/nginx-echo/src/ngx_http_echo_handler.c +0 -429
  864. data/packaging/debian/debian_specs/nginx/modules/nginx-echo/src/ngx_http_echo_handler.h +0 -18
  865. data/packaging/debian/debian_specs/nginx/modules/nginx-echo/src/ngx_http_echo_location.c +0 -178
  866. data/packaging/debian/debian_specs/nginx/modules/nginx-echo/src/ngx_http_echo_location.h +0 -13
  867. data/packaging/debian/debian_specs/nginx/modules/nginx-echo/src/ngx_http_echo_module.c +0 -667
  868. data/packaging/debian/debian_specs/nginx/modules/nginx-echo/src/ngx_http_echo_module.h +0 -137
  869. data/packaging/debian/debian_specs/nginx/modules/nginx-echo/src/ngx_http_echo_request_info.c +0 -452
  870. data/packaging/debian/debian_specs/nginx/modules/nginx-echo/src/ngx_http_echo_request_info.h +0 -31
  871. data/packaging/debian/debian_specs/nginx/modules/nginx-echo/src/ngx_http_echo_sleep.c +0 -208
  872. data/packaging/debian/debian_specs/nginx/modules/nginx-echo/src/ngx_http_echo_sleep.h +0 -16
  873. data/packaging/debian/debian_specs/nginx/modules/nginx-echo/src/ngx_http_echo_subrequest.c +0 -788
  874. data/packaging/debian/debian_specs/nginx/modules/nginx-echo/src/ngx_http_echo_subrequest.h +0 -19
  875. data/packaging/debian/debian_specs/nginx/modules/nginx-echo/src/ngx_http_echo_timer.c +0 -96
  876. data/packaging/debian/debian_specs/nginx/modules/nginx-echo/src/ngx_http_echo_timer.h +0 -13
  877. data/packaging/debian/debian_specs/nginx/modules/nginx-echo/src/ngx_http_echo_util.c +0 -298
  878. data/packaging/debian/debian_specs/nginx/modules/nginx-echo/src/ngx_http_echo_util.h +0 -58
  879. data/packaging/debian/debian_specs/nginx/modules/nginx-echo/src/ngx_http_echo_var.c +0 -110
  880. data/packaging/debian/debian_specs/nginx/modules/nginx-echo/src/ngx_http_echo_var.h +0 -9
  881. data/packaging/debian/debian_specs/nginx/modules/nginx-echo/util/build.sh +0 -45
  882. data/packaging/debian/debian_specs/nginx/modules/nginx-echo/util/releng +0 -8
  883. data/packaging/debian/debian_specs/nginx/modules/nginx-echo/util/wiki2pod.pl +0 -131
  884. data/packaging/debian/debian_specs/nginx/modules/nginx-echo/valgrind.suppress +0 -38
  885. data/packaging/debian/debian_specs/nginx/modules/nginx-http-push/LICENCE +0 -24
  886. data/packaging/debian/debian_specs/nginx/modules/nginx-http-push/README +0 -206
  887. data/packaging/debian/debian_specs/nginx/modules/nginx-http-push/changelog.txt +0 -54
  888. data/packaging/debian/debian_specs/nginx/modules/nginx-http-push/config +0 -26
  889. data/packaging/debian/debian_specs/nginx/modules/nginx-http-push/protocol.txt +0 -191
  890. data/packaging/debian/debian_specs/nginx/modules/nginx-http-push/src/ngx_http_push_defs.c +0 -59
  891. data/packaging/debian/debian_specs/nginx/modules/nginx-http-push/src/ngx_http_push_defs.h +0 -73
  892. data/packaging/debian/debian_specs/nginx/modules/nginx-http-push/src/ngx_http_push_module.c +0 -783
  893. data/packaging/debian/debian_specs/nginx/modules/nginx-http-push/src/ngx_http_push_module.h +0 -31
  894. data/packaging/debian/debian_specs/nginx/modules/nginx-http-push/src/ngx_http_push_module_setup.c +0 -361
  895. data/packaging/debian/debian_specs/nginx/modules/nginx-http-push/src/ngx_http_push_types.h +0 -120
  896. data/packaging/debian/debian_specs/nginx/modules/nginx-http-push/src/store/memory/store.c +0 -1180
  897. data/packaging/debian/debian_specs/nginx/modules/nginx-http-push/src/store/memory/store.h +0 -1
  898. data/packaging/debian/debian_specs/nginx/modules/nginx-http-push/src/store/ngx_http_push_module_ipc.c +0 -146
  899. data/packaging/debian/debian_specs/nginx/modules/nginx-http-push/src/store/ngx_http_push_module_ipc.h +0 -5
  900. data/packaging/debian/debian_specs/nginx/modules/nginx-http-push/src/store/ngx_http_push_store.h +0 -51
  901. data/packaging/debian/debian_specs/nginx/modules/nginx-http-push/src/store/ngx_rwlock.c +0 -178
  902. data/packaging/debian/debian_specs/nginx/modules/nginx-http-push/src/store/ngx_rwlock.h +0 -5
  903. data/packaging/debian/debian_specs/nginx/modules/nginx-http-push/src/store/rbtree_util.c +0 -246
  904. data/packaging/debian/debian_specs/nginx/modules/nginx-http-push/src/store/rbtree_util.h +0 -9
  905. data/packaging/debian/debian_specs/nginx/modules/nginx-lua/Changes +0 -51
  906. data/packaging/debian/debian_specs/nginx/modules/nginx-lua/README.markdown +0 -6954
  907. data/packaging/debian/debian_specs/nginx/modules/nginx-lua/config +0 -363
  908. data/packaging/debian/debian_specs/nginx/modules/nginx-lua/doc/HttpLuaModule.wiki +0 -5898
  909. data/packaging/debian/debian_specs/nginx/modules/nginx-lua/dtrace/ngx_lua_provider.d +0 -61
  910. data/packaging/debian/debian_specs/nginx/modules/nginx-lua/misc/recv-until-pm/Makefile +0 -3
  911. data/packaging/debian/debian_specs/nginx/modules/nginx-lua/misc/recv-until-pm/lib/RecvUntil.pm +0 -138
  912. data/packaging/debian/debian_specs/nginx/modules/nginx-lua/misc/recv-until-pm/t/sanity.t +0 -140
  913. data/packaging/debian/debian_specs/nginx/modules/nginx-lua/src/api/ngx_http_lua_api.h +0 -52
  914. data/packaging/debian/debian_specs/nginx/modules/nginx-lua/src/ddebug.h +0 -82
  915. data/packaging/debian/debian_specs/nginx/modules/nginx-lua/src/ngx_http_lua_accessby.c +0 -377
  916. data/packaging/debian/debian_specs/nginx/modules/nginx-lua/src/ngx_http_lua_accessby.h +0 -22
  917. data/packaging/debian/debian_specs/nginx/modules/nginx-lua/src/ngx_http_lua_api.c +0 -77
  918. data/packaging/debian/debian_specs/nginx/modules/nginx-lua/src/ngx_http_lua_args.c +0 -537
  919. data/packaging/debian/debian_specs/nginx/modules/nginx-lua/src/ngx_http_lua_args.h +0 -20
  920. data/packaging/debian/debian_specs/nginx/modules/nginx-lua/src/ngx_http_lua_bodyfilterby.c +0 -632
  921. data/packaging/debian/debian_specs/nginx/modules/nginx-lua/src/ngx_http_lua_bodyfilterby.h +0 -31
  922. data/packaging/debian/debian_specs/nginx/modules/nginx-lua/src/ngx_http_lua_cache.c +0 -296
  923. data/packaging/debian/debian_specs/nginx/modules/nginx-lua/src/ngx_http_lua_cache.h +0 -24
  924. data/packaging/debian/debian_specs/nginx/modules/nginx-lua/src/ngx_http_lua_capturefilter.c +0 -175
  925. data/packaging/debian/debian_specs/nginx/modules/nginx-lua/src/ngx_http_lua_capturefilter.h +0 -20
  926. data/packaging/debian/debian_specs/nginx/modules/nginx-lua/src/ngx_http_lua_clfactory.c +0 -887
  927. data/packaging/debian/debian_specs/nginx/modules/nginx-lua/src/ngx_http_lua_clfactory.h +0 -22
  928. data/packaging/debian/debian_specs/nginx/modules/nginx-lua/src/ngx_http_lua_common.h +0 -478
  929. data/packaging/debian/debian_specs/nginx/modules/nginx-lua/src/ngx_http_lua_config.c +0 -67
  930. data/packaging/debian/debian_specs/nginx/modules/nginx-lua/src/ngx_http_lua_config.h +0 -19
  931. data/packaging/debian/debian_specs/nginx/modules/nginx-lua/src/ngx_http_lua_consts.c +0 -148
  932. data/packaging/debian/debian_specs/nginx/modules/nginx-lua/src/ngx_http_lua_consts.h +0 -20
  933. data/packaging/debian/debian_specs/nginx/modules/nginx-lua/src/ngx_http_lua_contentby.c +0 -369
  934. data/packaging/debian/debian_specs/nginx/modules/nginx-lua/src/ngx_http_lua_contentby.h +0 -26
  935. data/packaging/debian/debian_specs/nginx/modules/nginx-lua/src/ngx_http_lua_control.c +0 -483
  936. data/packaging/debian/debian_specs/nginx/modules/nginx-lua/src/ngx_http_lua_control.h +0 -20
  937. data/packaging/debian/debian_specs/nginx/modules/nginx-lua/src/ngx_http_lua_coroutine.c +0 -379
  938. data/packaging/debian/debian_specs/nginx/modules/nginx-lua/src/ngx_http_lua_coroutine.h +0 -23
  939. data/packaging/debian/debian_specs/nginx/modules/nginx-lua/src/ngx_http_lua_ctx.c +0 -216
  940. data/packaging/debian/debian_specs/nginx/modules/nginx-lua/src/ngx_http_lua_ctx.h +0 -23
  941. data/packaging/debian/debian_specs/nginx/modules/nginx-lua/src/ngx_http_lua_directive.c +0 -1081
  942. data/packaging/debian/debian_specs/nginx/modules/nginx-lua/src/ngx_http_lua_directive.h +0 -56
  943. data/packaging/debian/debian_specs/nginx/modules/nginx-lua/src/ngx_http_lua_exception.c +0 -58
  944. data/packaging/debian/debian_specs/nginx/modules/nginx-lua/src/ngx_http_lua_exception.h +0 -33
  945. data/packaging/debian/debian_specs/nginx/modules/nginx-lua/src/ngx_http_lua_headerfilterby.c +0 -302
  946. data/packaging/debian/debian_specs/nginx/modules/nginx-lua/src/ngx_http_lua_headerfilterby.h +0 -29
  947. data/packaging/debian/debian_specs/nginx/modules/nginx-lua/src/ngx_http_lua_headers.c +0 -1370
  948. data/packaging/debian/debian_specs/nginx/modules/nginx-lua/src/ngx_http_lua_headers.h +0 -22
  949. data/packaging/debian/debian_specs/nginx/modules/nginx-lua/src/ngx_http_lua_headers_in.c +0 -782
  950. data/packaging/debian/debian_specs/nginx/modules/nginx-lua/src/ngx_http_lua_headers_in.h +0 -22
  951. data/packaging/debian/debian_specs/nginx/modules/nginx-lua/src/ngx_http_lua_headers_out.c +0 -625
  952. data/packaging/debian/debian_specs/nginx/modules/nginx-lua/src/ngx_http_lua_headers_out.h +0 -23
  953. data/packaging/debian/debian_specs/nginx/modules/nginx-lua/src/ngx_http_lua_initby.c +0 -42
  954. data/packaging/debian/debian_specs/nginx/modules/nginx-lua/src/ngx_http_lua_initby.h +0 -23
  955. data/packaging/debian/debian_specs/nginx/modules/nginx-lua/src/ngx_http_lua_initworkerby.c +0 -320
  956. data/packaging/debian/debian_specs/nginx/modules/nginx-lua/src/ngx_http_lua_initworkerby.h +0 -25
  957. data/packaging/debian/debian_specs/nginx/modules/nginx-lua/src/ngx_http_lua_log.c +0 -300
  958. data/packaging/debian/debian_specs/nginx/modules/nginx-lua/src/ngx_http_lua_log.h +0 -20
  959. data/packaging/debian/debian_specs/nginx/modules/nginx-lua/src/ngx_http_lua_logby.c +0 -227
  960. data/packaging/debian/debian_specs/nginx/modules/nginx-lua/src/ngx_http_lua_logby.h +0 -22
  961. data/packaging/debian/debian_specs/nginx/modules/nginx-lua/src/ngx_http_lua_misc.c +0 -252
  962. data/packaging/debian/debian_specs/nginx/modules/nginx-lua/src/ngx_http_lua_misc.h +0 -20
  963. data/packaging/debian/debian_specs/nginx/modules/nginx-lua/src/ngx_http_lua_module.c +0 -924
  964. data/packaging/debian/debian_specs/nginx/modules/nginx-lua/src/ngx_http_lua_ndk.c +0 -184
  965. data/packaging/debian/debian_specs/nginx/modules/nginx-lua/src/ngx_http_lua_ndk.h +0 -21
  966. data/packaging/debian/debian_specs/nginx/modules/nginx-lua/src/ngx_http_lua_output.c +0 -794
  967. data/packaging/debian/debian_specs/nginx/modules/nginx-lua/src/ngx_http_lua_output.h +0 -28
  968. data/packaging/debian/debian_specs/nginx/modules/nginx-lua/src/ngx_http_lua_pcrefix.c +0 -106
  969. data/packaging/debian/debian_specs/nginx/modules/nginx-lua/src/ngx_http_lua_pcrefix.h +0 -23
  970. data/packaging/debian/debian_specs/nginx/modules/nginx-lua/src/ngx_http_lua_phase.c +0 -94
  971. data/packaging/debian/debian_specs/nginx/modules/nginx-lua/src/ngx_http_lua_phase.h +0 -13
  972. data/packaging/debian/debian_specs/nginx/modules/nginx-lua/src/ngx_http_lua_probe.h +0 -85
  973. data/packaging/debian/debian_specs/nginx/modules/nginx-lua/src/ngx_http_lua_regex.c +0 -2468
  974. data/packaging/debian/debian_specs/nginx/modules/nginx-lua/src/ngx_http_lua_regex.h +0 -22
  975. data/packaging/debian/debian_specs/nginx/modules/nginx-lua/src/ngx_http_lua_req_body.c +0 -1169
  976. data/packaging/debian/debian_specs/nginx/modules/nginx-lua/src/ngx_http_lua_req_body.h +0 -20
  977. data/packaging/debian/debian_specs/nginx/modules/nginx-lua/src/ngx_http_lua_req_method.c +0 -252
  978. data/packaging/debian/debian_specs/nginx/modules/nginx-lua/src/ngx_http_lua_req_method.h +0 -19
  979. data/packaging/debian/debian_specs/nginx/modules/nginx-lua/src/ngx_http_lua_rewriteby.c +0 -351
  980. data/packaging/debian/debian_specs/nginx/modules/nginx-lua/src/ngx_http_lua_rewriteby.h +0 -22
  981. data/packaging/debian/debian_specs/nginx/modules/nginx-lua/src/ngx_http_lua_script.c +0 -538
  982. data/packaging/debian/debian_specs/nginx/modules/nginx-lua/src/ngx_http_lua_script.h +0 -86
  983. data/packaging/debian/debian_specs/nginx/modules/nginx-lua/src/ngx_http_lua_setby.c +0 -216
  984. data/packaging/debian/debian_specs/nginx/modules/nginx-lua/src/ngx_http_lua_setby.h +0 -15
  985. data/packaging/debian/debian_specs/nginx/modules/nginx-lua/src/ngx_http_lua_shdict.c +0 -1844
  986. data/packaging/debian/debian_specs/nginx/modules/nginx-lua/src/ngx_http_lua_shdict.h +0 -52
  987. data/packaging/debian/debian_specs/nginx/modules/nginx-lua/src/ngx_http_lua_sleep.c +0 -191
  988. data/packaging/debian/debian_specs/nginx/modules/nginx-lua/src/ngx_http_lua_sleep.h +0 -20
  989. data/packaging/debian/debian_specs/nginx/modules/nginx-lua/src/ngx_http_lua_socket_tcp.c +0 -5314
  990. data/packaging/debian/debian_specs/nginx/modules/nginx-lua/src/ngx_http_lua_socket_tcp.h +0 -156
  991. data/packaging/debian/debian_specs/nginx/modules/nginx-lua/src/ngx_http_lua_socket_udp.c +0 -1624
  992. data/packaging/debian/debian_specs/nginx/modules/nginx-lua/src/ngx_http_lua_socket_udp.h +0 -56
  993. data/packaging/debian/debian_specs/nginx/modules/nginx-lua/src/ngx_http_lua_string.c +0 -704
  994. data/packaging/debian/debian_specs/nginx/modules/nginx-lua/src/ngx_http_lua_string.h +0 -20
  995. data/packaging/debian/debian_specs/nginx/modules/nginx-lua/src/ngx_http_lua_subrequest.c +0 -1741
  996. data/packaging/debian/debian_specs/nginx/modules/nginx-lua/src/ngx_http_lua_subrequest.h +0 -46
  997. data/packaging/debian/debian_specs/nginx/modules/nginx-lua/src/ngx_http_lua_time.c +0 -278
  998. data/packaging/debian/debian_specs/nginx/modules/nginx-lua/src/ngx_http_lua_time.h +0 -21
  999. data/packaging/debian/debian_specs/nginx/modules/nginx-lua/src/ngx_http_lua_timer.c +0 -661
  1000. data/packaging/debian/debian_specs/nginx/modules/nginx-lua/src/ngx_http_lua_timer.h +0 -20
  1001. data/packaging/debian/debian_specs/nginx/modules/nginx-lua/src/ngx_http_lua_uri.c +0 -110
  1002. data/packaging/debian/debian_specs/nginx/modules/nginx-lua/src/ngx_http_lua_uri.h +0 -20
  1003. data/packaging/debian/debian_specs/nginx/modules/nginx-lua/src/ngx_http_lua_uthread.c +0 -283
  1004. data/packaging/debian/debian_specs/nginx/modules/nginx-lua/src/ngx_http_lua_uthread.h +0 -36
  1005. data/packaging/debian/debian_specs/nginx/modules/nginx-lua/src/ngx_http_lua_util.c +0 -3972
  1006. data/packaging/debian/debian_specs/nginx/modules/nginx-lua/src/ngx_http_lua_util.h +0 -423
  1007. data/packaging/debian/debian_specs/nginx/modules/nginx-lua/src/ngx_http_lua_variable.c +0 -499
  1008. data/packaging/debian/debian_specs/nginx/modules/nginx-lua/src/ngx_http_lua_variable.h +0 -20
  1009. data/packaging/debian/debian_specs/nginx/modules/nginx-lua/src/ngx_http_lua_worker.c +0 -64
  1010. data/packaging/debian/debian_specs/nginx/modules/nginx-lua/src/ngx_http_lua_worker.h +0 -17
  1011. data/packaging/debian/debian_specs/nginx/modules/nginx-lua/tapset/ngx_lua.stp +0 -5
  1012. data/packaging/debian/debian_specs/nginx/modules/nginx-lua/util/build.sh +0 -39
  1013. data/packaging/debian/debian_specs/nginx/modules/nginx-lua/util/build2.sh +0 -55
  1014. data/packaging/debian/debian_specs/nginx/modules/nginx-lua/util/fix-comments +0 -27
  1015. data/packaging/debian/debian_specs/nginx/modules/nginx-lua/util/gdbinit +0 -415
  1016. data/packaging/debian/debian_specs/nginx/modules/nginx-lua/util/ngx-links +0 -62
  1017. data/packaging/debian/debian_specs/nginx/modules/nginx-lua/util/reindex +0 -64
  1018. data/packaging/debian/debian_specs/nginx/modules/nginx-lua/util/releng +0 -8
  1019. data/packaging/debian/debian_specs/nginx/modules/nginx-lua/util/retab +0 -8
  1020. data/packaging/debian/debian_specs/nginx/modules/nginx-lua/util/revim +0 -102
  1021. data/packaging/debian/debian_specs/nginx/modules/nginx-lua/util/run_test.sh +0 -10
  1022. data/packaging/debian/debian_specs/nginx/modules/nginx-lua/util/update-readme.sh +0 -4
  1023. data/packaging/debian/debian_specs/nginx/modules/nginx-lua/valgrind.suppress +0 -144
  1024. data/packaging/debian/debian_specs/nginx/modules/nginx-upload-progress/CHANGES +0 -107
  1025. data/packaging/debian/debian_specs/nginx/modules/nginx-upload-progress/LICENSE +0 -25
  1026. data/packaging/debian/debian_specs/nginx/modules/nginx-upload-progress/Makefile +0 -8
  1027. data/packaging/debian/debian_specs/nginx/modules/nginx-upload-progress/README +0 -329
  1028. data/packaging/debian/debian_specs/nginx/modules/nginx-upload-progress/config +0 -3
  1029. data/packaging/debian/debian_specs/nginx/modules/nginx-upload-progress/ngx_http_uploadprogress_module.c +0 -1774
  1030. data/packaging/debian/debian_specs/nginx/modules/nginx-upstream-fair/README +0 -53
  1031. data/packaging/debian/debian_specs/nginx/modules/nginx-upstream-fair/config +0 -3
  1032. data/packaging/debian/debian_specs/nginx/modules/nginx-upstream-fair/ngx_http_upstream_fair_module.c +0 -1356
  1033. data/packaging/debian/debian_specs/nginx/modules/ngx-fancyindex/CHANGELOG.md +0 -37
  1034. data/packaging/debian/debian_specs/nginx/modules/ngx-fancyindex/HACKING.md +0 -24
  1035. data/packaging/debian/debian_specs/nginx/modules/ngx-fancyindex/LICENSE +0 -20
  1036. data/packaging/debian/debian_specs/nginx/modules/ngx-fancyindex/README.rst +0 -182
  1037. data/packaging/debian/debian_specs/nginx/modules/ngx-fancyindex/config +0 -8
  1038. data/packaging/debian/debian_specs/nginx/modules/ngx-fancyindex/nginx-0.6-support.patch +0 -23
  1039. data/packaging/debian/debian_specs/nginx/modules/ngx-fancyindex/ngx_http_fancyindex_module.c +0 -1305
  1040. data/packaging/debian/debian_specs/nginx/modules/ngx-fancyindex/template.awk +0 -52
  1041. data/packaging/debian/debian_specs/nginx/modules/ngx-fancyindex/template.h +0 -103
  1042. data/packaging/debian/debian_specs/nginx/modules/ngx-fancyindex/template.html +0 -102
  1043. data/packaging/debian/debian_specs/nginx/modules/ngx_http_substitutions_filter_module/CHANGES +0 -37
  1044. data/packaging/debian/debian_specs/nginx/modules/ngx_http_substitutions_filter_module/README +0 -141
  1045. data/packaging/debian/debian_specs/nginx/modules/ngx_http_substitutions_filter_module/config +0 -3
  1046. data/packaging/debian/debian_specs/nginx/modules/ngx_http_substitutions_filter_module/doc/README.google_code_home_page.wiki +0 -120
  1047. data/packaging/debian/debian_specs/nginx/modules/ngx_http_substitutions_filter_module/doc/README.html +0 -199
  1048. data/packaging/debian/debian_specs/nginx/modules/ngx_http_substitutions_filter_module/doc/README.wiki +0 -123
  1049. data/packaging/debian/debian_specs/nginx/modules/ngx_http_substitutions_filter_module/ngx_http_subs_filter_module.c +0 -1298
  1050. data/packaging/debian/debian_specs/nginx/modules/ngx_http_substitutions_filter_module/test/README +0 -275
  1051. data/packaging/debian/debian_specs/nginx/modules/ngx_http_substitutions_filter_module/test/inc/Module/AutoInstall.pm +0 -820
  1052. data/packaging/debian/debian_specs/nginx/modules/ngx_http_substitutions_filter_module/test/inc/Module/Install.pm +0 -470
  1053. data/packaging/debian/debian_specs/nginx/modules/ngx_http_substitutions_filter_module/test/inc/Module/Install/AutoInstall.pm +0 -82
  1054. data/packaging/debian/debian_specs/nginx/modules/ngx_http_substitutions_filter_module/test/inc/Module/Install/Base.pm +0 -83
  1055. data/packaging/debian/debian_specs/nginx/modules/ngx_http_substitutions_filter_module/test/inc/Module/Install/Can.pm +0 -81
  1056. data/packaging/debian/debian_specs/nginx/modules/ngx_http_substitutions_filter_module/test/inc/Module/Install/Fetch.pm +0 -93
  1057. data/packaging/debian/debian_specs/nginx/modules/ngx_http_substitutions_filter_module/test/inc/Module/Install/Include.pm +0 -34
  1058. data/packaging/debian/debian_specs/nginx/modules/ngx_http_substitutions_filter_module/test/inc/Module/Install/Makefile.pm +0 -415
  1059. data/packaging/debian/debian_specs/nginx/modules/ngx_http_substitutions_filter_module/test/inc/Module/Install/Metadata.pm +0 -716
  1060. data/packaging/debian/debian_specs/nginx/modules/ngx_http_substitutions_filter_module/test/inc/Module/Install/TestBase.pm +0 -29
  1061. data/packaging/debian/debian_specs/nginx/modules/ngx_http_substitutions_filter_module/test/inc/Module/Install/Win32.pm +0 -64
  1062. data/packaging/debian/debian_specs/nginx/modules/ngx_http_substitutions_filter_module/test/inc/Module/Install/WriteAll.pm +0 -63
  1063. data/packaging/debian/debian_specs/nginx/modules/ngx_http_substitutions_filter_module/test/inc/Spiffy.pm +0 -539
  1064. data/packaging/debian/debian_specs/nginx/modules/ngx_http_substitutions_filter_module/test/inc/Test/Base.pm +0 -682
  1065. data/packaging/debian/debian_specs/nginx/modules/ngx_http_substitutions_filter_module/test/inc/Test/Base/Filter.pm +0 -341
  1066. data/packaging/debian/debian_specs/nginx/modules/ngx_http_substitutions_filter_module/test/inc/Test/Builder.pm +0 -1413
  1067. data/packaging/debian/debian_specs/nginx/modules/ngx_http_substitutions_filter_module/test/inc/Test/Builder/Module.pm +0 -81
  1068. data/packaging/debian/debian_specs/nginx/modules/ngx_http_substitutions_filter_module/test/inc/Test/More.pm +0 -735
  1069. data/packaging/debian/debian_specs/nginx/modules/ngx_http_substitutions_filter_module/test/lib/Test/Nginx.pm +0 -315
  1070. data/packaging/debian/debian_specs/nginx/modules/ngx_http_substitutions_filter_module/test/lib/Test/Nginx/LWP.pm +0 -524
  1071. data/packaging/debian/debian_specs/nginx/modules/ngx_http_substitutions_filter_module/test/lib/Test/Nginx/Socket.pm +0 -1749
  1072. data/packaging/debian/debian_specs/nginx/modules/ngx_http_substitutions_filter_module/test/lib/Test/Nginx/Util.pm +0 -874
  1073. data/packaging/debian/debian_specs/nginx/modules/ngx_http_substitutions_filter_module/test/t/subs.t +0 -136
  1074. data/packaging/debian/debian_specs/nginx/modules/ngx_http_substitutions_filter_module/test/t/subs_capture.t +0 -32
  1075. data/packaging/debian/debian_specs/nginx/modules/ngx_http_substitutions_filter_module/test/t/subs_fix_string.t +0 -32
  1076. data/packaging/debian/debian_specs/nginx/modules/ngx_http_substitutions_filter_module/test/t/subs_regex.t +0 -108
  1077. data/packaging/debian/debian_specs/nginx/modules/ngx_http_substitutions_filter_module/test/t/subs_types.t +0 -59
  1078. data/packaging/debian/debian_specs/nginx/modules/ngx_http_substitutions_filter_module/test/test.sh +0 -5
  1079. data/packaging/debian/debian_specs/nginx/modules/ngx_http_substitutions_filter_module/util/update-readme.sh +0 -7
  1080. data/packaging/debian/debian_specs/nginx/modules/ngx_http_substitutions_filter_module/util/wiki2google_code_homepage.pl +0 -29
  1081. data/packaging/debian/debian_specs/nginx/modules/ngx_http_substitutions_filter_module/util/wiki2pod.pl +0 -129
  1082. data/packaging/debian/debian_specs/nginx/nginx-common.NEWS +0 -135
  1083. data/packaging/debian/debian_specs/nginx/nginx-common.README.Debian +0 -45
  1084. data/packaging/debian/debian_specs/nginx/nginx-common.dirs.erb +0 -32
  1085. data/packaging/debian/debian_specs/nginx/nginx-common.install +0 -3
  1086. data/packaging/debian/debian_specs/nginx/nginx-common.lintian-overrides +0 -2
  1087. data/packaging/debian/debian_specs/nginx/nginx-common.manpages +0 -1
  1088. data/packaging/debian/debian_specs/nginx/nginx-common.nginx.default +0 -10
  1089. data/packaging/debian/debian_specs/nginx/nginx-common.nginx.init.erb +0 -214
  1090. data/packaging/debian/debian_specs/nginx/nginx-common.nginx.logrotate +0 -18
  1091. data/packaging/debian/debian_specs/nginx/nginx-common.nginx.service.erb +0 -37
  1092. data/packaging/debian/debian_specs/nginx/nginx-common.postinst.erb +0 -66
  1093. data/packaging/debian/debian_specs/nginx/nginx-common.postrm.erb +0 -46
  1094. data/packaging/debian/debian_specs/nginx/nginx-common.preinst +0 -47
  1095. data/packaging/debian/debian_specs/nginx/nginx-common.prerm.erb +0 -28
  1096. data/packaging/debian/debian_specs/nginx/nginx-doc.docs +0 -2
  1097. data/packaging/debian/debian_specs/nginx/nginx-doc.examples +0 -1
  1098. data/packaging/debian/debian_specs/nginx/nginx-extras.install.erb +0 -17
  1099. data/packaging/debian/debian_specs/nginx/nginx-extras.lintian-overrides +0 -1
  1100. data/packaging/debian/debian_specs/nginx/nginx-extras.postinst.erb +0 -44
  1101. data/packaging/debian/debian_specs/nginx/nginx-extras.prerm +0 -22
  1102. data/packaging/debian/debian_specs/nginx/nginx.1 +0 -47
  1103. data/packaging/debian/debian_specs/nginx/patches/perl-use-dpkg-buildflags.patch +0 -23
  1104. data/packaging/debian/debian_specs/nginx/patches/series +0 -1
  1105. data/packaging/debian/debian_specs/nginx/rules.erb +0 -185
  1106. data/packaging/debian/debian_specs/nginx/source/format +0 -1
  1107. data/packaging/debian/debian_specs/nginx/tests/control +0 -4
  1108. data/packaging/debian/debian_specs/nginx/ufw/nginx +0 -14
  1109. data/packaging/debian/debian_specs/nginx/upstream/signing-key.asc +0 -34
  1110. data/packaging/debian/debian_specs/nginx/watch +0 -3
  1111. data/packaging/debian/debian_specs/passenger/README.Debian +0 -12
  1112. data/packaging/debian/debian_specs/passenger/changelog +0 -316
  1113. data/packaging/debian/debian_specs/passenger/compat +0 -1
  1114. data/packaging/debian/debian_specs/passenger/control.erb +0 -123
  1115. data/packaging/debian/debian_specs/passenger/copyright +0 -385
  1116. data/packaging/debian/debian_specs/passenger/helpers.rb +0 -24
  1117. data/packaging/debian/debian_specs/passenger/libapache2-mod-passenger.install +0 -3
  1118. data/packaging/debian/debian_specs/passenger/libapache2-mod-passenger.postinst +0 -36
  1119. data/packaging/debian/debian_specs/passenger/libapache2-mod-passenger.prerm +0 -15
  1120. data/packaging/debian/debian_specs/passenger/locations.ini.erb +0 -14
  1121. data/packaging/debian/debian_specs/passenger/passenger-dev.install.erb +0 -3
  1122. data/packaging/debian/debian_specs/passenger/passenger-doc.install.erb +0 -2
  1123. data/packaging/debian/debian_specs/passenger/passenger.conf +0 -6
  1124. data/packaging/debian/debian_specs/passenger/passenger.docs +0 -4
  1125. data/packaging/debian/debian_specs/passenger/passenger.install.erb +0 -16
  1126. data/packaging/debian/debian_specs/passenger/passenger.load +0 -3
  1127. data/packaging/debian/debian_specs/passenger/passenger.manpages +0 -3
  1128. data/packaging/debian/debian_specs/passenger/passenger_free_ruby.c +0 -29
  1129. data/packaging/debian/debian_specs/passenger/passenger_ruby_utils.c +0 -54
  1130. data/packaging/debian/debian_specs/passenger/passenger_system_ruby.c.erb +0 -37
  1131. data/packaging/debian/debian_specs/passenger/rules.erb +0 -84
  1132. data/packaging/debian/debian_specs/passenger/source/format +0 -1
  1133. data/packaging/debian/debian_specs/passenger_enterprise/README.Debian +0 -12
  1134. data/packaging/debian/debian_specs/passenger_enterprise/changelog +0 -316
  1135. data/packaging/debian/debian_specs/passenger_enterprise/compat +0 -1
  1136. data/packaging/debian/debian_specs/passenger_enterprise/control.erb +0 -123
  1137. data/packaging/debian/debian_specs/passenger_enterprise/copyright +0 -385
  1138. data/packaging/debian/debian_specs/passenger_enterprise/helpers.rb +0 -2
  1139. data/packaging/debian/debian_specs/passenger_enterprise/libapache2-mod-passenger-enterprise.install +0 -3
  1140. data/packaging/debian/debian_specs/passenger_enterprise/libapache2-mod-passenger-enterprise.postinst +0 -36
  1141. data/packaging/debian/debian_specs/passenger_enterprise/libapache2-mod-passenger-enterprise.prerm +0 -15
  1142. data/packaging/debian/debian_specs/passenger_enterprise/locations.ini.erb +0 -14
  1143. data/packaging/debian/debian_specs/passenger_enterprise/passenger-enterprise-dev.install.erb +0 -3
  1144. data/packaging/debian/debian_specs/passenger_enterprise/passenger-enterprise-doc.install.erb +0 -2
  1145. data/packaging/debian/debian_specs/passenger_enterprise/passenger-enterprise.docs +0 -4
  1146. data/packaging/debian/debian_specs/passenger_enterprise/passenger-enterprise.install.erb +0 -14
  1147. data/packaging/debian/debian_specs/passenger_enterprise/passenger-enterprise.manpages +0 -3
  1148. data/packaging/debian/debian_specs/passenger_enterprise/passenger.conf +0 -6
  1149. data/packaging/debian/debian_specs/passenger_enterprise/passenger.load +0 -3
  1150. data/packaging/debian/debian_specs/passenger_enterprise/passenger_free_ruby.c.erb +0 -1
  1151. data/packaging/debian/debian_specs/passenger_enterprise/passenger_ruby_utils.c.erb +0 -1
  1152. data/packaging/debian/debian_specs/passenger_enterprise/passenger_system_ruby.c.erb +0 -1
  1153. data/packaging/debian/debian_specs/passenger_enterprise/patches/series +0 -0
  1154. data/packaging/debian/debian_specs/passenger_enterprise/rules.erb +0 -84
  1155. data/packaging/debian/debian_specs/passenger_enterprise/source/format +0 -1
  1156. data/packaging/debian/docker_images/Makefile +0 -38
  1157. data/packaging/debian/docker_images/buildbox/CONTAINER_VERSION.txt +0 -0
  1158. data/packaging/debian/docker_images/buildbox/Dockerfile +0 -3
  1159. data/packaging/debian/docker_images/buildbox/Gemfile +0 -9
  1160. data/packaging/debian/docker_images/buildbox/Gemfile.lock +0 -42
  1161. data/packaging/debian/docker_images/buildbox/install.sh +0 -85
  1162. data/packaging/debian/docker_images/buildbox/pbuilderrc +0 -4
  1163. data/packaging/debian/docker_images/buildbox/sudoers.conf +0 -6
  1164. data/packaging/debian/docker_images/setup-buildbox-docker-image +0 -7
  1165. data/packaging/debian/docker_images/setup-testbox-docker-image-debian-6 +0 -7
  1166. data/packaging/debian/docker_images/setup-testbox-docker-image-debian-7 +0 -7
  1167. data/packaging/debian/docker_images/setup-testbox-docker-image-debian-8 +0 -7
  1168. data/packaging/debian/docker_images/setup-testbox-docker-image-ubuntu-12.04 +0 -7
  1169. data/packaging/debian/docker_images/setup-testbox-docker-image-ubuntu-14.04 +0 -7
  1170. data/packaging/debian/docker_images/setup-testbox-docker-image-ubuntu-15.04 +0 -7
  1171. data/packaging/debian/docker_images/setup-testbox-docker-image-ubuntu-15.10 +0 -7
  1172. data/packaging/debian/docker_images/testbox-debian-6/Dockerfile +0 -3
  1173. data/packaging/debian/docker_images/testbox-debian-6/Gemfile +0 -2
  1174. data/packaging/debian/docker_images/testbox-debian-6/Gemfile.lock +0 -23
  1175. data/packaging/debian/docker_images/testbox-debian-6/argparse.py +0 -2374
  1176. data/packaging/debian/docker_images/testbox-debian-6/install.sh +0 -78
  1177. data/packaging/debian/docker_images/testbox-debian-7/Dockerfile +0 -3
  1178. data/packaging/debian/docker_images/testbox-debian-7/Gemfile +0 -2
  1179. data/packaging/debian/docker_images/testbox-debian-7/Gemfile.lock +0 -23
  1180. data/packaging/debian/docker_images/testbox-debian-7/install.sh +0 -71
  1181. data/packaging/debian/docker_images/testbox-debian-8/Dockerfile +0 -3
  1182. data/packaging/debian/docker_images/testbox-debian-8/Gemfile +0 -2
  1183. data/packaging/debian/docker_images/testbox-debian-8/Gemfile.lock +0 -23
  1184. data/packaging/debian/docker_images/testbox-debian-8/install.sh +0 -70
  1185. data/packaging/debian/docker_images/testbox-ubuntu-12.04/Dockerfile +0 -3
  1186. data/packaging/debian/docker_images/testbox-ubuntu-12.04/Gemfile +0 -2
  1187. data/packaging/debian/docker_images/testbox-ubuntu-12.04/Gemfile.lock +0 -23
  1188. data/packaging/debian/docker_images/testbox-ubuntu-12.04/install.sh +0 -69
  1189. data/packaging/debian/docker_images/testbox-ubuntu-14.04/Dockerfile +0 -3
  1190. data/packaging/debian/docker_images/testbox-ubuntu-14.04/Gemfile +0 -2
  1191. data/packaging/debian/docker_images/testbox-ubuntu-14.04/Gemfile.lock +0 -23
  1192. data/packaging/debian/docker_images/testbox-ubuntu-14.04/install.sh +0 -69
  1193. data/packaging/debian/docker_images/testbox-ubuntu-15.04/Dockerfile +0 -3
  1194. data/packaging/debian/docker_images/testbox-ubuntu-15.04/Gemfile +0 -2
  1195. data/packaging/debian/docker_images/testbox-ubuntu-15.04/Gemfile.lock +0 -23
  1196. data/packaging/debian/docker_images/testbox-ubuntu-15.04/install.sh +0 -69
  1197. data/packaging/debian/docker_images/testbox-ubuntu-15.10/Dockerfile +0 -3
  1198. data/packaging/debian/docker_images/testbox-ubuntu-15.10/Gemfile +0 -2
  1199. data/packaging/debian/docker_images/testbox-ubuntu-15.10/Gemfile.lock +0 -23
  1200. data/packaging/debian/docker_images/testbox-ubuntu-15.10/install.sh +0 -69
  1201. data/packaging/debian/internal/build/Rakefile +0 -235
  1202. data/packaging/debian/internal/build/build-passenger-orig-tarball.sh +0 -76
  1203. data/packaging/debian/internal/build/build-source-package.rb +0 -121
  1204. data/packaging/debian/internal/build/download-nginx-orig-tarball.sh +0 -17
  1205. data/packaging/debian/internal/build/rakefile_support.rb +0 -96
  1206. data/packaging/debian/internal/build/setup-environment-essentials.sh +0 -15
  1207. data/packaging/debian/internal/build/setup-environment.sh +0 -29
  1208. data/packaging/debian/internal/lib/distro_info.rb +0 -82
  1209. data/packaging/debian/internal/lib/distro_info.sh +0 -303
  1210. data/packaging/debian/internal/lib/distro_info.sh.erb +0 -65
  1211. data/packaging/debian/internal/lib/library.sh +0 -83
  1212. data/packaging/debian/internal/lib/preprocessor.rb +0 -173
  1213. data/packaging/debian/internal/lib/tracking.rb +0 -95
  1214. data/packaging/debian/internal/lib/tracking_category.rb +0 -45
  1215. data/packaging/debian/internal/lib/tracking_database.rb +0 -132
  1216. data/packaging/debian/internal/lib/tracking_task.rb +0 -148
  1217. data/packaging/debian/internal/lib/utils.rb +0 -78
  1218. data/packaging/debian/internal/publish/Rakefile +0 -97
  1219. data/packaging/debian/internal/publish/oss-binaries.phusionpassenger.com-fingerprint.txt +0 -1
  1220. data/packaging/debian/internal/publish/packagecloud_fingerprint.txt +0 -1
  1221. data/packaging/debian/internal/publish/passenger_website_fingerprint.txt +0 -1
  1222. data/packaging/debian/internal/publish/preinit.sh +0 -7
  1223. data/packaging/debian/internal/publish/rakefile_support.rb +0 -183
  1224. data/packaging/debian/internal/scripts/gpg_noninteractive/gpg +0 -11
  1225. data/packaging/debian/internal/scripts/initccache.sh +0 -35
  1226. data/packaging/debian/internal/scripts/inituidgid.sh +0 -19
  1227. data/packaging/debian/internal/scripts/my_init +0 -340
  1228. data/packaging/debian/internal/scripts/pin_certificates +0 -34
  1229. data/packaging/debian/internal/scripts/regen_distro_info_script.sh +0 -3
  1230. data/packaging/debian/internal/scripts/setup-vagrant.sh +0 -12
  1231. data/packaging/debian/internal/scripts/setuser +0 -31
  1232. data/packaging/debian/internal/shell/initpbuilder.sh +0 -3
  1233. data/packaging/debian/internal/shell/preinit.sh +0 -28
  1234. data/packaging/debian/internal/shell/sudoers.conf +0 -1
  1235. data/packaging/debian/internal/test/apache/apache-24.conf +0 -5
  1236. data/packaging/debian/internal/test/apache/apache-pre-24.conf +0 -4
  1237. data/packaging/debian/internal/test/apache/vhost.conf +0 -17
  1238. data/packaging/debian/internal/test/misc/config.json +0 -15
  1239. data/packaging/debian/internal/test/misc/hosts.conf +0 -4
  1240. data/packaging/debian/internal/test/misc/init.sh +0 -25
  1241. data/packaging/debian/internal/test/misc/nodejs_test_app.js +0 -6
  1242. data/packaging/debian/internal/test/misc/python_test_app.py +0 -3
  1243. data/packaging/debian/internal/test/misc/ruby_test_app.rb +0 -5
  1244. data/packaging/debian/internal/test/misc/test_support.rb +0 -61
  1245. data/packaging/debian/internal/test/nginx/vhost.conf +0 -23
  1246. data/packaging/debian/internal/test/system_web_server_test.rb +0 -126
  1247. data/packaging/debian/internal/test/test.sh +0 -141
  1248. data/packaging/debian/jenkins/publish/clear_caches.rb +0 -48
  1249. data/packaging/debian/jenkins/publish/publish.sh +0 -69
  1250. data/packaging/debian/jenkins/test/test.sh +0 -63
  1251. data/packaging/debian/passenger_apt_automation.sublime-project +0 -14
  1252. data/packaging/debian/publish +0 -172
  1253. data/packaging/debian/shell +0 -116
  1254. data/packaging/debian/test +0 -142
  1255. data/packaging/rpm/passenger_spec/rubygem-passenger-4.0.18-gcc47-include-sys_types.patch +0 -45
  1256. data/test/cxx/Base64Test.cpp +0 -50
  1257. data/test/cxx/FileBackedPipeTest.cpp +0 -626
  1258. data/test/cxx/HttpHeaderBuffererTest.cpp +0 -257
  1259. data/test/cxx/ScgiRequestParserTest.cpp +0 -423
  1260. data/test/cxx/ServerInstanceDirTest.cpp +0 -175
  1261. data/test/ruby/admin_tools_spec.rb +0 -360
  1262. data/test/ruby/classic_rails/loader_spec.rb +0 -46
  1263. data/test/ruby/classic_rails/preloader_spec.rb +0 -52
  1264. data/test/ruby/standalone/runtime_locator_spec.rb +0 -214
  1265. data/test/stub/rails2.3/Rakefile +0 -10
  1266. data/test/stub/rails2.3/app/controllers/application_controller.rb +0 -10
  1267. data/test/stub/rails2.3/app/controllers/bar_controller_1.rb +0 -5
  1268. data/test/stub/rails2.3/app/controllers/bar_controller_2.rb +0 -5
  1269. data/test/stub/rails2.3/app/controllers/foo_controller.rb +0 -21
  1270. data/test/stub/rails2.3/app/helpers/application_helper.rb +0 -3
  1271. data/test/stub/rails2.3/app/helpers/bar_helper.rb +0 -2
  1272. data/test/stub/rails2.3/app/helpers/foo_helper.rb +0 -2
  1273. data/test/stub/rails2.3/config/boot.rb +0 -110
  1274. data/test/stub/rails2.3/config/database.yml +0 -19
  1275. data/test/stub/rails2.3/config/environment.rb +0 -62
  1276. data/test/stub/rails2.3/config/environments/development.rb +0 -17
  1277. data/test/stub/rails2.3/config/environments/production.rb +0 -18
  1278. data/test/stub/rails2.3/config/environments/staging.rb +0 -18
  1279. data/test/stub/rails2.3/config/initializers/inflections.rb +0 -10
  1280. data/test/stub/rails2.3/config/initializers/mime_types.rb +0 -5
  1281. data/test/stub/rails2.3/config/routes.rb +0 -35
  1282. data/test/stub/rails2.3/log/.gitignore +0 -1
  1283. data/test/stub/rails2.3/public/.gitignore +0 -1
  1284. data/test/stub/rails2.3/script/about +0 -3
  1285. data/test/stub/rails2.3/script/console +0 -3
  1286. data/test/stub/rails2.3/script/dbconsole +0 -3
  1287. data/test/stub/rails2.3/script/destroy +0 -3
  1288. data/test/stub/rails2.3/script/generate +0 -3
  1289. data/test/stub/rails2.3/script/performance/benchmarker +0 -3
  1290. data/test/stub/rails2.3/script/performance/profiler +0 -3
  1291. data/test/stub/rails2.3/script/performance/request +0 -3
  1292. data/test/stub/rails2.3/script/plugin +0 -3
  1293. data/test/stub/rails2.3/script/process/inspector +0 -3
  1294. data/test/stub/rails2.3/script/process/reaper +0 -3
  1295. data/test/stub/rails2.3/script/process/spawner +0 -3
  1296. data/test/stub/rails2.3/script/runner +0 -3
  1297. data/test/stub/rails2.3/script/server +0 -3
  1298. data/test/stub/rails2.3/tmp/cache/.gitignore +0 -1
  1299. data/test/stub/rails2.3/tmp/pids/.gitignore +0 -1
  1300. data/test/stub/rails2.3/tmp/sessions/.gitignore +0 -1
  1301. data/test/stub/rails2.3/tmp/sockets/.gitignore +0 -1
@@ -1,6 +1,6 @@
1
1
  /*
2
2
  * Phusion Passenger - https://www.phusionpassenger.com/
3
- * Copyright (c) 2010-2013 Phusion
3
+ * Copyright (c) 2010-2014 Phusion
4
4
  *
5
5
  * "Phusion Passenger" is a trademark of Hongli Lai & Ninh Bui.
6
6
  *
@@ -104,6 +104,7 @@ private:
104
104
  result.push_back(&options.ruby);
105
105
  result.push_back(&options.python);
106
106
  result.push_back(&options.nodejs);
107
+ result.push_back(&options.environmentVariables);
107
108
  result.push_back(&options.loggingAgentAddress);
108
109
  result.push_back(&options.loggingAgentUsername);
109
110
  result.push_back(&options.loggingAgentPassword);
@@ -158,7 +159,7 @@ public:
158
159
  * application, this is the folder that contains 'app/', 'public/', 'config/',
159
160
  * etc. This must be a valid directory, but the path does not have to be absolute.
160
161
  */
161
- StaticString appRoot;
162
+ HashedStaticString appRoot;
162
163
 
163
164
  /**
164
165
  * A name used by ApplicationPool to uniquely identify an application.
@@ -168,7 +169,7 @@ public:
168
169
  *
169
170
  * If left empty, then the app root is used as the app group name.
170
171
  */
171
- StaticString appGroupName;
172
+ HashedStaticString appGroupName;
172
173
 
173
174
  /** The application's type, used for determining the command to invoke to
174
175
  * spawn an application process as well as determining the startup file's
@@ -267,9 +268,12 @@ public:
267
268
 
268
269
  /**
269
270
  * Environment variables which should be passed to the spawned application
270
- * process.
271
+ * process. This is a base64-encoded string of key-value pairs, with each
272
+ * element terminated by a NUL character. For example:
273
+ *
274
+ * base64("PATH\0/usr/bin\0RUBY\0/usr/bin/ruby\0")
271
275
  */
272
- vector< pair<StaticString, StaticString> > environmentVariables;
276
+ StaticString environmentVariables;
273
277
 
274
278
  /** Whether debugger support should be enabled. */
275
279
  bool debugger;
@@ -396,6 +400,11 @@ public:
396
400
  */
397
401
  unsigned long maxRequests;
398
402
 
403
+ /** If the current time (in microseconds) has already been queried, set it
404
+ * here. Pool will use this timestamp instead of querying it again.
405
+ */
406
+ unsigned long long currentTime;
407
+
399
408
  /** When true, Pool::get() and Pool::asyncGet() will create the necessary
400
409
  * SuperGroup and Group structures just as normally, and will even handle
401
410
  * restarting logic, but will not actually spawn any processes and will not
@@ -433,33 +442,35 @@ public:
433
442
  * Creates a new Options object with the default values filled in.
434
443
  * One must still set appRoot manually, after having used this constructor.
435
444
  */
436
- Options() {
437
- logLevel = DEFAULT_LOG_LEVEL;
438
- startTimeout = 90 * 1000;
439
- environment = P_STATIC_STRING("production");
440
- baseURI = P_STATIC_STRING("/");
441
- spawnMethod = P_STATIC_STRING("smart");
442
- defaultUser = P_STATIC_STRING("nobody");
443
- ruby = P_STATIC_STRING(DEFAULT_RUBY);
444
- python = P_STATIC_STRING(DEFAULT_PYTHON);
445
- nodejs = P_STATIC_STRING(DEFAULT_NODEJS);
446
- rights = DEFAULT_BACKEND_ACCOUNT_RIGHTS;
447
- debugger = false;
448
- loadShellEnvvars = true;
449
- analytics = false;
450
- raiseInternalError = false;
451
-
452
- minProcesses = 1;
453
- maxProcesses = 0;
454
- maxPreloaderIdleTime = -1;
455
- maxOutOfBandWorkInstances = 1;
456
- maxRequestQueueSize = 100;
457
-
458
- stickySessionId = 0;
459
- statThrottleRate = 0;
460
- maxRequests = 0;
461
- noop = false;
462
-
445
+ Options()
446
+ : logLevel(DEFAULT_LOG_LEVEL),
447
+ startTimeout(90 * 1000),
448
+ environment(DEFAULT_APP_ENV, sizeof(DEFAULT_APP_ENV) - 1),
449
+ baseURI("/", 1),
450
+ spawnMethod(DEFAULT_SPAWN_METHOD, sizeof(DEFAULT_SPAWN_METHOD) - 1),
451
+ defaultUser("nobody", sizeof("nobody") - 1),
452
+ ruby(DEFAULT_RUBY, sizeof(DEFAULT_RUBY) - 1),
453
+ python(DEFAULT_PYTHON, sizeof(DEFAULT_PYTHON) - 1),
454
+ nodejs(DEFAULT_NODEJS, sizeof(DEFAULT_NODEJS) - 1),
455
+ rights(DEFAULT_BACKEND_ACCOUNT_RIGHTS),
456
+ debugger(false),
457
+ loadShellEnvvars(true),
458
+ analytics(false),
459
+ raiseInternalError(false),
460
+
461
+ minProcesses(1),
462
+ maxProcesses(0),
463
+ maxPreloaderIdleTime(-1),
464
+ maxOutOfBandWorkInstances(1),
465
+ maxRequestQueueSize(100),
466
+
467
+ stickySessionId(0),
468
+ statThrottleRate(DEFAULT_STAT_THROTTLE_RATE),
469
+ maxRequests(0),
470
+ currentTime(0),
471
+ noop(false)
472
+ /*********************************/
473
+ {
463
474
  /*********************************/
464
475
  }
465
476
 
@@ -493,10 +504,6 @@ public:
493
504
  for (i = 0; i < otherStrings.size(); i++) {
494
505
  otherLen += otherStrings[i]->size() + 1;
495
506
  }
496
- for (i = 0; i < other.environmentVariables.size(); i++) {
497
- otherLen += environmentVariables[i].first.size() + 1;
498
- otherLen += environmentVariables[i].second.size() + 1;
499
- }
500
507
 
501
508
  shared_array<char> data(new char[otherLen]);
502
509
  end = data.get();
@@ -518,30 +525,12 @@ public:
518
525
  *str = StaticString(pos, end - pos - 1);
519
526
  }
520
527
 
521
- // Copy environmentVariables names and values into the internal storage area.
522
- for (i = 0; i < other.environmentVariables.size(); i++) {
523
- const pair<StaticString, StaticString> &p = other.environmentVariables[i];
524
-
525
- environmentVariables[i] = make_pair(
526
- StaticString(end, p.first.size()),
527
- StaticString(end + p.first.size() + 1, p.second.size())
528
- );
529
-
530
- // Copy over string data.
531
- memcpy(end, p.first.data(), p.first.size());
532
- end += p.first.size();
533
- *end = '\0';
534
- end++;
535
-
536
- // Copy over value data.
537
- memcpy(end, p.second.data(), p.second.size());
538
- end += p.second.size();
539
- *end = '\0';
540
- end++;
541
- }
542
-
543
528
  storage = data;
544
529
 
530
+ // Fix up HashedStaticStrings' hashes.
531
+ appRoot.setHash(other.appRoot.hash());
532
+ appGroupName.setHash(other.appGroupName.hash());
533
+
545
534
  return *this;
546
535
  }
547
536
 
@@ -549,6 +538,7 @@ public:
549
538
  hostName = StaticString();
550
539
  uri = StaticString();
551
540
  stickySessionId = 0;
541
+ currentTime = 0;
552
542
  noop = false;
553
543
  return detachFromUnionStationTransaction();
554
544
  }
@@ -634,7 +624,7 @@ public:
634
624
  * Returns the app group name. If there is no explicitly set app group name
635
625
  * then the app root is considered to be the app group name.
636
626
  */
637
- StaticString getAppGroupName() const {
627
+ const HashedStaticString &getAppGroupName() const {
638
628
  if (appGroupName.empty()) {
639
629
  return appRoot;
640
630
  } else {
@@ -643,9 +633,7 @@ public:
643
633
  }
644
634
 
645
635
  string getStartCommand(const ResourceLocator &resourceLocator) const {
646
- if (appType == P_STATIC_STRING("classic-rails")) {
647
- return ruby + "\t" + resourceLocator.getHelperScriptsDir() + "/classic-rails-loader.rb";
648
- } else if (appType == P_STATIC_STRING("rack")) {
636
+ if (appType == P_STATIC_STRING("rack")) {
649
637
  return ruby + "\t" + resourceLocator.getHelperScriptsDir() + "/rack-loader.rb";
650
638
  } else if (appType == P_STATIC_STRING("wsgi")) {
651
639
  return python + "\t" + resourceLocator.getHelperScriptsDir() + "/wsgi-loader.py";
@@ -37,6 +37,11 @@
37
37
  #include <boost/make_shared.hpp>
38
38
  #include <boost/function.hpp>
39
39
  #include <boost/foreach.hpp>
40
+ #include <boost/pool/object_pool.hpp>
41
+ // We use boost::container::vector instead of std::vector, because the
42
+ // former does not allocate memory in its default constructor. This is
43
+ // useful for post lock action vectors which often remain empty.
44
+ #include <boost/container/vector.hpp>
40
45
  #include <boost/date_time/posix_time/posix_time_types.hpp>
41
46
  #include <oxt/dynamic_thread_group.hpp>
42
47
  #include <oxt/backtrace.hpp>
@@ -47,6 +52,7 @@
47
52
  #include <ApplicationPool2/Session.h>
48
53
  #include <ApplicationPool2/SpawnerFactory.h>
49
54
  #include <ApplicationPool2/Options.h>
55
+ #include <MemoryKit/palloc.h>
50
56
  #include <Logging.h>
51
57
  #include <Exceptions.h>
52
58
  #include <Hooks.h>
@@ -68,6 +74,8 @@ using namespace oxt;
68
74
 
69
75
  class Pool: public boost::enable_shared_from_this<Pool> {
70
76
  public:
77
+ typedef void (*AbortLongRunningConnectionsCallback)(const ProcessPtr &process);
78
+
71
79
  struct InspectOptions {
72
80
  bool colorize;
73
81
  bool verbose;
@@ -128,6 +136,7 @@ public:
128
136
  mutable boost::mutex syncher;
129
137
  unsigned int max;
130
138
  unsigned long long maxIdleTime;
139
+ bool selfchecking;
131
140
 
132
141
  boost::condition_variable garbageCollectionCond;
133
142
 
@@ -150,7 +159,10 @@ public:
150
159
  SHUT_DOWN
151
160
  } lifeStatus;
152
161
 
153
- SuperGroupMap superGroups;
162
+ mutable SuperGroupMap superGroups;
163
+ boost::mutex sessionObjectPoolSyncher;
164
+ object_pool<Session> sessionObjectPool;
165
+ psg_pool_t *palloc;
154
166
 
155
167
  /**
156
168
  * get() requests that...
@@ -193,14 +205,14 @@ public:
193
205
  const VariantMap *agentsOptions;
194
206
  DebugSupportPtr debugSupport;
195
207
 
196
- static void runAllActions(const vector<Callback> &actions) {
197
- vector<Callback>::const_iterator it, end = actions.end();
208
+ static void runAllActions(const boost::container::vector<Callback> &actions) {
209
+ boost::container::vector<Callback>::const_iterator it, end = actions.end();
198
210
  for (it = actions.begin(); it != end; it++) {
199
211
  (*it)();
200
212
  }
201
213
  }
202
214
 
203
- static void runAllActionsWithCopy(vector<Callback> actions) {
215
+ static void runAllActionsWithCopy(boost::container::vector<Callback> actions) {
204
216
  runAllActions(actions);
205
217
  }
206
218
 
@@ -214,16 +226,25 @@ public:
214
226
 
215
227
  void verifyInvariants() const {
216
228
  // !a || b: logical equivalent of a IMPLIES b.
217
- assert(!( !getWaitlist.empty() ) || ( atFullCapacity(false) ));
218
- assert(!( !atFullCapacity(false) ) || ( getWaitlist.empty() ));
229
+ #ifndef NDEBUG
230
+ if (!selfchecking) {
231
+ return;
232
+ }
233
+ assert(!( !getWaitlist.empty() ) || ( atFullCapacityUnlocked() ));
234
+ assert(!( !atFullCapacityUnlocked() ) || ( getWaitlist.empty() ));
235
+ #endif
219
236
  }
220
237
 
221
238
  void verifyExpensiveInvariants() const {
222
239
  #ifndef NDEBUG
240
+ if (!selfchecking) {
241
+ return;
242
+ }
223
243
  vector<GetWaiter>::const_iterator it, end = getWaitlist.end();
224
244
  for (it = getWaitlist.begin(); it != end; it++) {
225
245
  const GetWaiter &waiter = *it;
226
- assert(superGroups.get(waiter.options.getAppGroupName()) == NULL);
246
+ const SuperGroupPtr *superGroup;
247
+ assert(!superGroups.lookup(waiter.options.getAppGroupName(), &superGroup));
227
248
  }
228
249
  #endif
229
250
  }
@@ -234,14 +255,16 @@ public:
234
255
  UPDATE_TRACE_POINT();
235
256
  verifyExpensiveInvariants();
236
257
  UPDATE_TRACE_POINT();
237
- StringMap<SuperGroupPtr>::const_iterator sg_it, sg_end = superGroups.end();
238
- for (sg_it = superGroups.begin(); sg_it != sg_end; sg_it++) {
239
- pair<StaticString, SuperGroupPtr> p = *sg_it;
240
- p.second->verifyInvariants();
241
- foreach (GroupPtr group, p.second->groups) {
258
+
259
+ SuperGroupMap::ConstIterator sg_it(superGroups);
260
+ while (*sg_it != NULL) {
261
+ const SuperGroupPtr &superGroup = sg_it.getValue();
262
+ superGroup->verifyInvariants();
263
+ foreach (GroupPtr group, superGroup->groups) {
242
264
  group->verifyInvariants();
243
265
  group->verifyExpensiveInvariants();
244
266
  }
267
+ sg_it.next();
245
268
  }
246
269
  }
247
270
 
@@ -289,11 +312,11 @@ public:
289
312
  ProcessPtr findOldestIdleProcess(const Group *exclude = NULL) const {
290
313
  ProcessPtr oldestIdleProcess;
291
314
 
292
- SuperGroupMap::const_iterator it, end = superGroups.end();
293
- for (it = superGroups.begin(); it != end; it++) {
294
- const SuperGroupPtr &superGroup = it->second;
295
- const vector<GroupPtr> &groups = superGroup->groups;
296
- vector<GroupPtr>::const_iterator g_it, g_end = groups.end();
315
+ SuperGroupMap::ConstIterator sg_it(superGroups);
316
+ while (*sg_it != NULL) {
317
+ const SuperGroupPtr &superGroup = sg_it.getValue();
318
+ const SuperGroup::GroupList &groups = superGroup->groups;
319
+ SuperGroup::GroupList::const_iterator g_it, g_end = groups.end();
297
320
  for (g_it = groups.begin(); g_it != g_end; g_it++) {
298
321
  const GroupPtr &group = *g_it;
299
322
  if (group.get() == exclude) {
@@ -311,6 +334,7 @@ public:
311
334
  }
312
335
  }
313
336
  }
337
+ sg_it.next();
314
338
  }
315
339
 
316
340
  return oldestIdleProcess;
@@ -319,11 +343,11 @@ public:
319
343
  ProcessPtr findBestProcessToTrash() const {
320
344
  ProcessPtr oldestProcess;
321
345
 
322
- SuperGroupMap::const_iterator it, end = superGroups.end();
323
- for (it = superGroups.begin(); it != end; it++) {
324
- const SuperGroupPtr &superGroup = it->second;
325
- const vector<GroupPtr> &groups = superGroup->groups;
326
- vector<GroupPtr>::const_iterator g_it, g_end = groups.end();
346
+ SuperGroupMap::ConstIterator sg_it(superGroups);
347
+ while (*sg_it != NULL) {
348
+ const SuperGroupPtr &superGroup = sg_it.getValue();
349
+ const SuperGroup::GroupList &groups = superGroup->groups;
350
+ SuperGroup::GroupList::const_iterator g_it, g_end = groups.end();
327
351
  for (g_it = groups.begin(); g_it != g_end; g_it++) {
328
352
  const GroupPtr &group = *g_it;
329
353
  const ProcessList &processes = group->enabledProcesses;
@@ -336,6 +360,7 @@ public:
336
360
  }
337
361
  }
338
362
  }
363
+ sg_it.next();
339
364
  }
340
365
 
341
366
  return oldestProcess;
@@ -345,7 +370,7 @@ public:
345
370
  * This function assigns sessions to them by calling get() on the corresponding
346
371
  * SuperGroups, or by creating more SuperGroups, in so far the new capacity allows.
347
372
  */
348
- void assignSessionsToGetWaiters(vector<Callback> &postLockActions) {
373
+ void assignSessionsToGetWaiters(boost::container::vector<Callback> &postLockActions) {
349
374
  bool done = false;
350
375
  vector<GetWaiter>::iterator it, end = getWaitlist.end();
351
376
  vector<GetWaiter> newWaitlist;
@@ -358,13 +383,13 @@ public:
358
383
  SessionPtr session = superGroup->get(waiter.options, waiter.callback,
359
384
  postLockActions);
360
385
  if (session != NULL) {
361
- postLockActions.push_back(boost::bind(
386
+ postLockActions.push_back(boost::bind(GetCallback::call,
362
387
  waiter.callback, session, ExceptionPtr()));
363
388
  }
364
389
  /* else: the callback has now been put in
365
390
  * the group's get wait list.
366
391
  */
367
- } else if (!atFullCapacity(false)) {
392
+ } else if (!atFullCapacityUnlocked()) {
368
393
  createSuperGroupAndAsyncGetFromIt(waiter.options, waiter.callback,
369
394
  postLockActions);
370
395
  } else {
@@ -381,10 +406,10 @@ public:
381
406
  template<typename Queue>
382
407
  static void assignExceptionToGetWaiters(Queue &getWaitlist,
383
408
  const ExceptionPtr &exception,
384
- vector<Callback> &postLockActions)
409
+ boost::container::vector<Callback> &postLockActions)
385
410
  {
386
411
  while (!getWaitlist.empty()) {
387
- postLockActions.push_back(boost::bind(
412
+ postLockActions.push_back(boost::bind(GetCallback::call,
388
413
  getWaitlist.front().callback, SessionPtr(),
389
414
  exception));
390
415
  getWaitlist.pop_front();
@@ -392,36 +417,39 @@ public:
392
417
  }
393
418
 
394
419
  void possiblySpawnMoreProcessesForExistingGroups() {
395
- StringMap<SuperGroupPtr>::const_iterator sg_it, sg_end = superGroups.end();
396
420
  /* Looks for Groups that are waiting for capacity to become available,
397
421
  * and spawn processes in those groups.
398
422
  */
399
- for (sg_it = superGroups.begin(); sg_it != sg_end; sg_it++) {
400
- pair<StaticString, SuperGroupPtr> p = *sg_it;
401
- foreach (GroupPtr group, p.second->groups) {
423
+ SuperGroupMap::ConstIterator sg_it(superGroups);
424
+ while (*sg_it != NULL) {
425
+ const SuperGroupPtr &superGroup = sg_it.getValue();
426
+ foreach (GroupPtr group, superGroup->groups) {
402
427
  if (group->isWaitingForCapacity()) {
403
428
  P_DEBUG("Group " << group->name << " is waiting for capacity");
404
429
  group->spawn();
405
- if (atFullCapacity(false)) {
430
+ if (atFullCapacityUnlocked()) {
406
431
  return;
407
432
  }
408
433
  }
409
434
  }
435
+ sg_it.next();
410
436
  }
411
437
  /* Now look for Groups that haven't maximized their allowed capacity
412
438
  * yet, and spawn processes in those groups.
413
439
  */
414
- for (sg_it = superGroups.begin(); sg_it != sg_end; sg_it++) {
415
- pair<StaticString, SuperGroupPtr> p = *sg_it;
416
- foreach (GroupPtr group, p.second->groups) {
440
+ sg_it = SuperGroupMap::ConstIterator(superGroups);
441
+ while (*sg_it != NULL) {
442
+ const SuperGroupPtr &superGroup = sg_it.getValue();
443
+ foreach (GroupPtr group, superGroup->groups) {
417
444
  if (group->shouldSpawn()) {
418
445
  P_DEBUG("Group " << group->name << " requests more processes to be spawned");
419
446
  group->spawn();
420
- if (atFullCapacity(false)) {
447
+ if (atFullCapacityUnlocked()) {
421
448
  return;
422
449
  }
423
450
  }
424
451
  }
452
+ sg_it.next();
425
453
  }
426
454
  }
427
455
 
@@ -433,24 +461,46 @@ public:
433
461
  }
434
462
  }
435
463
 
464
+ unsigned int capacityUsedUnlocked() const {
465
+ if (superGroups.size() == 1) {
466
+ SuperGroupPtr *superGroup;
467
+ superGroups.lookupRandom(NULL, &superGroup);
468
+ return (*superGroup)->capacityUsed();
469
+ } else {
470
+ SuperGroupMap::ConstIterator sg_it(superGroups);
471
+ int result = 0;
472
+ while (*sg_it != NULL) {
473
+ const SuperGroupPtr &superGroup = sg_it.getValue();
474
+ result += superGroup->capacityUsed();
475
+ sg_it.next();
476
+ }
477
+ return result;
478
+ }
479
+ }
480
+
481
+ bool atFullCapacityUnlocked() const {
482
+ return capacityUsedUnlocked() >= max;
483
+ }
484
+
436
485
  /**
437
486
  * Calls Group::detach() so be sure to fix up the invariants afterwards.
438
487
  * See the comments for Group::detach() and the code for detachProcessUnlocked().
439
488
  */
440
489
  ProcessPtr forceFreeCapacity(const Group *exclude,
441
- vector<Callback> &postLockActions)
490
+ boost::container::vector<Callback> &postLockActions)
442
491
  {
443
492
  ProcessPtr process = findOldestIdleProcess(exclude);
444
493
  if (process != NULL) {
445
494
  P_DEBUG("Forcefully detaching process " << process->inspect() <<
446
495
  " in order to free capacity in the pool");
447
496
 
448
- const GroupPtr group = process->getGroup();
497
+ Group *group = process->getGroup();
449
498
  assert(group != NULL);
450
499
  assert(group->getWaitlist.empty());
451
500
 
452
- const SuperGroupPtr superGroup = group->getSuperGroup();
501
+ SuperGroup *superGroup = group->getSuperGroup();
453
502
  assert(superGroup != NULL);
503
+ (void) superGroup;
454
504
 
455
505
  group->detach(process, postLockActions);
456
506
  }
@@ -466,24 +516,27 @@ public:
466
516
  * operation, so running them in a thread is advised.
467
517
  */
468
518
  void forceDetachSuperGroup(const SuperGroupPtr &superGroup,
469
- vector<Callback> &postLockActions,
519
+ boost::container::vector<Callback> &postLockActions,
470
520
  const SuperGroup::ShutdownCallback &callback)
471
521
  {
472
522
  const SuperGroupPtr sp = superGroup; // Prevent premature destruction.
473
- bool removed = superGroups.remove(superGroup->name);
523
+ bool removed = superGroups.erase(superGroup->name);
474
524
  assert(removed);
475
525
  (void) removed; // Shut up compiler warning.
476
526
  superGroup->destroy(false, postLockActions, callback);
477
527
  }
478
528
 
479
- bool detachProcessUnlocked(const ProcessPtr &process, vector<Callback> &postLockActions) {
529
+ bool detachProcessUnlocked(const ProcessPtr &process,
530
+ boost::container::vector<Callback> &postLockActions)
531
+ {
480
532
  if (OXT_LIKELY(process->isAlive())) {
481
533
  verifyInvariants();
482
534
 
483
- const GroupPtr group = process->getGroup();
484
- const SuperGroupPtr superGroup = group->getSuperGroup();
535
+ Group *group = process->getGroup();
536
+ SuperGroup *superGroup = group->getSuperGroup();
485
537
  assert(superGroup->state != SuperGroup::INITIALIZING);
486
538
  assert(superGroup->getWaitlist.empty());
539
+ (void) superGroup;
487
540
 
488
541
  group->detach(process, postLockActions);
489
542
  // 'process' may now be a stale pointer so don't use it anymore.
@@ -535,9 +588,9 @@ public:
535
588
  }
536
589
 
537
590
  const Socket *socket;
538
- if (options.verbose && (socket = process->sockets->findSocketWithName("http")) != NULL) {
591
+ if (options.verbose && (socket = process->sockets.findSocketWithName("http")) != NULL) {
539
592
  result << " URL : http://" << replaceString(socket->address, "tcp://", "") << endl;
540
- result << " Password: " << process->connectPassword << endl;
593
+ result << " Password: " << StaticString(group->secret, Group::SECRET_SIZE) << endl;
541
594
  }
542
595
  }
543
596
  }
@@ -589,7 +642,10 @@ public:
589
642
  ticket->cond.notify_one();
590
643
  }
591
644
 
592
- static void syncGetCallback(Ticket *ticket, const SessionPtr &session, const ExceptionPtr &e) {
645
+ static void syncGetCallback(const SessionPtr &session, const ExceptionPtr &e,
646
+ void *userData)
647
+ {
648
+ Ticket *ticket = static_cast<Ticket *>(userData);
593
649
  ScopedLock lock(ticket->syncher);
594
650
  if (OXT_LIKELY(session != NULL)) {
595
651
  ticket->session = session;
@@ -600,13 +656,18 @@ public:
600
656
  }
601
657
 
602
658
  SuperGroup *findMatchingSuperGroup(const Options &options) {
603
- return superGroups.get(options.getAppGroupName()).get();
659
+ SuperGroupPtr *superGroup;
660
+ if (superGroups.lookup(options.getAppGroupName(), &superGroup)) {
661
+ return superGroup->get();
662
+ } else {
663
+ return NULL;
664
+ }
604
665
  }
605
666
 
606
667
  struct GarbageCollectorState {
607
668
  unsigned long long now;
608
669
  unsigned long long nextGcRunTime;
609
- vector<Callback> actions;
670
+ boost::container::vector<Callback> actions;
610
671
  };
611
672
 
612
673
  static void garbageCollect(PoolPtr self) {
@@ -638,24 +699,43 @@ public:
638
699
  }
639
700
  }
640
701
 
641
- void maybeDetachIdleProcess(GarbageCollectorState &state, const GroupPtr &group,
642
- const ProcessPtr &process, ProcessList::iterator &p_it)
702
+ void checkWhetherProcessCanBeGarbageCollected(GarbageCollectorState &state,
703
+ const GroupPtr &group, const ProcessPtr &process, ProcessList &output)
643
704
  {
644
705
  assert(maxIdleTime > 0);
645
- unsigned long long processGcTime =
646
- process->lastUsed + maxIdleTime;
706
+ unsigned long long processGcTime = process->lastUsed + maxIdleTime;
647
707
  if (process->sessions == 0
648
708
  && state.now >= processGcTime
649
709
  && (unsigned long) group->getProcessCount() > group->options.minProcesses)
650
710
  {
651
- ProcessList::iterator prev = p_it;
652
- prev--;
711
+ if (output.capacity() == 0) {
712
+ output.reserve(group->enabledCount);
713
+ }
714
+ output.push_back(process);
715
+ } else {
716
+ maybeUpdateNextGcRuntime(state, processGcTime);
717
+ }
718
+ }
719
+
720
+ void garbageCollectProcessesInGroup(GarbageCollectorState &state,
721
+ const GroupPtr &group)
722
+ {
723
+ ProcessList &processes = group->enabledProcesses;
724
+ ProcessList processesToGc;
725
+ ProcessList::iterator p_it, p_end = processes.end();
726
+
727
+ for (p_it = processes.begin(); p_it != p_end; p_it++) {
728
+ const ProcessPtr &process = *p_it;
729
+ checkWhetherProcessCanBeGarbageCollected(state, group, process,
730
+ processesToGc);
731
+ }
732
+
733
+ p_end = processesToGc.end();
734
+ for (p_it = processesToGc.begin(); p_it != p_end; p_it++) {
735
+ ProcessPtr process = *p_it;
653
736
  P_DEBUG("Garbage collect idle process: " << process->inspect() <<
654
737
  ", group=" << group->name);
655
738
  group->detach(process, state.actions);
656
- p_it = prev;
657
- } else {
658
- maybeUpdateNextGcRuntime(state, processGcTime);
659
739
  }
660
740
  }
661
741
 
@@ -676,7 +756,7 @@ public:
676
756
  unsigned long long realGarbageCollect() {
677
757
  TRACE_POINT();
678
758
  ScopedLock lock(syncher);
679
- SuperGroupMap::iterator it, end = superGroups.end();
759
+ SuperGroupMap::ConstIterator sg_it(superGroups);
680
760
  GarbageCollectorState state;
681
761
  state.now = SystemTime::getUsec();
682
762
  state.nextGcRunTime = 0;
@@ -685,10 +765,10 @@ public:
685
765
  verifyInvariants();
686
766
 
687
767
  // For all supergroups and groups...
688
- for (it = superGroups.begin(); it != end; it++) {
689
- SuperGroupPtr superGroup = it->second;
690
- vector<GroupPtr> &groups = superGroup->groups;
691
- vector<GroupPtr>::iterator g_it, g_end = groups.end();
768
+ while (*sg_it != NULL) {
769
+ const SuperGroupPtr superGroup = sg_it.getValue();
770
+ SuperGroup::GroupList &groups = superGroup->groups;
771
+ SuperGroup::GroupList::iterator g_it, g_end = groups.end();
692
772
 
693
773
  superGroup->verifyInvariants();
694
774
 
@@ -696,14 +776,8 @@ public:
696
776
  GroupPtr group = *g_it;
697
777
 
698
778
  if (maxIdleTime > 0) {
699
- ProcessList &processes = group->enabledProcesses;
700
- ProcessList::iterator p_it, p_end = processes.end();
701
-
702
- for (p_it = processes.begin(); p_it != p_end; p_it++) {
703
- ProcessPtr process = *p_it;
704
- // ...detach processes that have been idle for more than maxIdleTime.
705
- maybeDetachIdleProcess(state, group, process, p_it);
706
- }
779
+ // ...detach processes that have been idle for more than maxIdleTime.
780
+ garbageCollectProcessesInGroup(state, group);
707
781
  }
708
782
 
709
783
  group->verifyInvariants();
@@ -713,6 +787,7 @@ public:
713
787
  }
714
788
 
715
789
  superGroup->verifyInvariants();
790
+ sg_it.next();
716
791
  }
717
792
 
718
793
  verifyInvariants();
@@ -845,11 +920,11 @@ public:
845
920
  {
846
921
  UPDATE_TRACE_POINT();
847
922
  LockGuard l(syncher);
848
- SuperGroupMap::const_iterator sg_it, sg_end = superGroups.end();
923
+ SuperGroupMap::ConstIterator sg_it(superGroups);
849
924
 
850
- for (sg_it = superGroups.begin(); sg_it != sg_end; sg_it++) {
851
- const SuperGroupPtr &superGroup = sg_it->second;
852
- vector<GroupPtr>::const_iterator g_it, g_end = superGroup->groups.end();
925
+ while (*sg_it != NULL) {
926
+ const SuperGroupPtr &superGroup = sg_it.getValue();
927
+ SuperGroup::GroupList::const_iterator g_it, g_end = superGroup->groups.end();
853
928
 
854
929
  for (g_it = superGroup->groups.begin(); g_it != g_end; g_it++) {
855
930
  const GroupPtr &group = *g_it;
@@ -857,6 +932,7 @@ public:
857
932
  collectPids(group->disablingProcesses, pids);
858
933
  collectPids(group->disabledProcesses, pids);
859
934
  }
935
+ sg_it.next();
860
936
  }
861
937
  }
862
938
 
@@ -882,14 +958,14 @@ public:
882
958
  UPDATE_TRACE_POINT();
883
959
  vector<UnionStationLogEntry> logEntries;
884
960
  vector<ProcessPtr> processesToDetach;
885
- vector<Callback> actions;
961
+ boost::container::vector<Callback> actions;
886
962
  ScopedLock l(syncher);
887
- SuperGroupMap::iterator sg_it, sg_end = superGroups.end();
963
+ SuperGroupMap::ConstIterator sg_it(superGroups);
888
964
 
889
965
  UPDATE_TRACE_POINT();
890
- for (sg_it = superGroups.begin(); sg_it != sg_end; sg_it++) {
891
- const SuperGroupPtr &superGroup = sg_it->second;
892
- vector<GroupPtr>::iterator g_it, g_end = superGroup->groups.end();
966
+ while (*sg_it != NULL) {
967
+ const SuperGroupPtr &superGroup = sg_it.getValue();
968
+ SuperGroup::GroupList::iterator g_it, g_end = superGroup->groups.end();
893
969
 
894
970
  for (g_it = superGroup->groups.begin(); g_it != g_end; g_it++) {
895
971
  const GroupPtr &group = *g_it;
@@ -900,6 +976,7 @@ public:
900
976
  prepareUnionStationProcessStateLogs(logEntries, group);
901
977
  prepareUnionStationSystemMetricsLogs(logEntries, group);
902
978
  }
979
+ sg_it.next();
903
980
  }
904
981
 
905
982
  UPDATE_TRACE_POINT();
@@ -945,16 +1022,16 @@ public:
945
1022
  }
946
1023
 
947
1024
  SuperGroupPtr createSuperGroup(const Options &options) {
948
- SuperGroupPtr superGroup = boost::make_shared<SuperGroup>(shared_from_this(),
1025
+ SuperGroupPtr superGroup = boost::make_shared<SuperGroup>(this,
949
1026
  options);
950
1027
  superGroup->initialize();
951
- superGroups.set(options.getAppGroupName(), superGroup);
1028
+ superGroups.insert(options.getAppGroupName(), superGroup);
952
1029
  garbageCollectionCond.notify_all();
953
1030
  return superGroup;
954
1031
  }
955
1032
 
956
1033
  SuperGroupPtr createSuperGroupAndAsyncGetFromIt(const Options &options,
957
- const GetCallback &callback, vector<Callback> &postLockActions)
1034
+ const GetCallback &callback, boost::container::vector<Callback> &postLockActions)
958
1035
  {
959
1036
  SuperGroupPtr superGroup = createSuperGroup(options);
960
1037
  SessionPtr session = superGroup->get(options, callback,
@@ -971,8 +1048,12 @@ public:
971
1048
  const SuperGroupPtr getSuperGroup(const char *name);
972
1049
 
973
1050
  public:
1051
+ AbortLongRunningConnectionsCallback abortLongRunningConnectionsCallback;
1052
+
974
1053
  Pool(const SpawnerFactoryPtr &spawnerFactory,
975
1054
  const VariantMap *agentsOptions = NULL)
1055
+ : sessionObjectPool(64, 1024),
1056
+ abortLongRunningConnectionsCallback(NULL)
976
1057
  {
977
1058
  this->spawnerFactory = spawnerFactory;
978
1059
  this->agentsOptions = agentsOptions;
@@ -983,9 +1064,11 @@ public:
983
1064
  P_WARN("Unable to collect system metrics: " << e.what());
984
1065
  }
985
1066
 
986
- lifeStatus = ALIVE;
987
- max = 6;
988
- maxIdleTime = 60 * 1000000;
1067
+ lifeStatus = ALIVE;
1068
+ max = 6;
1069
+ maxIdleTime = 60 * 1000000;
1070
+ selfchecking = true;
1071
+ palloc = psg_create_pool(PSG_DEFAULT_POOL_SIZE);
989
1072
 
990
1073
  // The following code only serve to instantiate certain inline methods
991
1074
  // so that they can be invoked from gdb.
@@ -999,6 +1082,7 @@ public:
999
1082
  if (lifeStatus != SHUT_DOWN) {
1000
1083
  P_BUG("You must call Pool::destroy() before actually destroying the Pool object!");
1001
1084
  }
1085
+ psg_destroy_pool(palloc);
1002
1086
  }
1003
1087
 
1004
1088
  /** Must be called right after construction. */
@@ -1021,7 +1105,7 @@ public:
1021
1105
  debugSupport = boost::make_shared<DebugSupport>();
1022
1106
  }
1023
1107
 
1024
- /** Should be called right after the HelperAgent has received
1108
+ /** Should be called right after the agent has received
1025
1109
  * the message to exit gracefully. This will tell processes to
1026
1110
  * abort any long-running connections, e.g. WebSocket connections,
1027
1111
  * because the RequestHandler has to wait until all connections are
@@ -1032,11 +1116,12 @@ public:
1032
1116
  ScopedLock lock(syncher);
1033
1117
  assert(lifeStatus == ALIVE);
1034
1118
  lifeStatus = PREPARED_FOR_SHUTDOWN;
1035
- vector<ProcessPtr> processes = getProcesses(false);
1036
- foreach (ProcessPtr process, processes) {
1037
- if (process->abortLongRunningConnections()) {
1119
+ if (abortLongRunningConnectionsCallback != NULL) {
1120
+ vector<ProcessPtr> processes = getProcesses(false);
1121
+ foreach (ProcessPtr process, processes) {
1038
1122
  // Ensure that the process is not immediately respawned.
1039
1123
  process->getGroup()->options.minProcesses = 0;
1124
+ abortLongRunningConnectionsCallback(process);
1040
1125
  }
1041
1126
  }
1042
1127
  }
@@ -1050,7 +1135,9 @@ public:
1050
1135
  lifeStatus = SHUTTING_DOWN;
1051
1136
 
1052
1137
  while (!superGroups.empty()) {
1053
- string name = superGroups.begin()->second->name;
1138
+ SuperGroupPtr *superGroup;
1139
+ superGroups.lookupRandom(NULL, &superGroup);
1140
+ string name = superGroup->get()->name;
1054
1141
  lock.unlock();
1055
1142
  detachSuperGroupByName(name);
1056
1143
  lock.lock();
@@ -1077,7 +1164,7 @@ public:
1077
1164
  assert(lifeStatus == ALIVE || lifeStatus == PREPARED_FOR_SHUTDOWN);
1078
1165
  verifyInvariants();
1079
1166
  P_TRACE(2, "asyncGet(appGroupName=" << options.getAppGroupName() << ")");
1080
- vector<Callback> actions;
1167
+ boost::container::vector<Callback> actions;
1081
1168
 
1082
1169
  SuperGroup *existingSuperGroup = findMatchingSuperGroup(options);
1083
1170
  if (OXT_LIKELY(existingSuperGroup != NULL)) {
@@ -1095,7 +1182,7 @@ public:
1095
1182
  callback(session, ExceptionPtr());
1096
1183
  }
1097
1184
 
1098
- } else if (!atFullCapacity(false)) {
1185
+ } else if (!atFullCapacityUnlocked()) {
1099
1186
  /* The app super group isn't in the pool and we have enough free
1100
1187
  * resources to make a new one.
1101
1188
  */
@@ -1130,9 +1217,9 @@ public:
1130
1217
  */
1131
1218
  P_DEBUG("Creating new SuperGroup");
1132
1219
  SuperGroupPtr superGroup;
1133
- superGroup = boost::make_shared<SuperGroup>(shared_from_this(), options);
1220
+ superGroup = boost::make_shared<SuperGroup>(this, options);
1134
1221
  superGroup->initialize();
1135
- superGroups.set(options.getAppGroupName(), superGroup);
1222
+ superGroups.insert(options.getAppGroupName(), superGroup);
1136
1223
  garbageCollectionCond.notify_all();
1137
1224
  SessionPtr session = superGroup->get(options, callback,
1138
1225
  actions);
@@ -1146,7 +1233,7 @@ public:
1146
1233
  superGroup->verifyInvariants();
1147
1234
  }
1148
1235
 
1149
- assert(atFullCapacity(false));
1236
+ assert(atFullCapacityUnlocked());
1150
1237
  verifyInvariants();
1151
1238
  verifyExpensiveInvariants();
1152
1239
  P_TRACE(2, "asyncGet() finished");
@@ -1172,7 +1259,10 @@ public:
1172
1259
  ticket->session.reset();
1173
1260
  ticket->exception.reset();
1174
1261
 
1175
- asyncGet(options, boost::bind(syncGetCallback, ticket, _1, _2));
1262
+ GetCallback callback;
1263
+ callback.func = syncGetCallback;
1264
+ callback.userData = ticket;
1265
+ asyncGet(options, callback);
1176
1266
 
1177
1267
  ScopedLock lock(ticket->syncher);
1178
1268
  while (ticket->session == NULL && ticket->exception == NULL) {
@@ -1197,13 +1287,14 @@ public:
1197
1287
  Ticket ticket;
1198
1288
  {
1199
1289
  LockGuard l(syncher);
1200
- if (superGroups.get(options.getAppGroupName()) == NULL) {
1290
+ SuperGroupPtr *superGroup;
1291
+ if (!superGroups.lookup(options.getAppGroupName(), &superGroup)) {
1201
1292
  // Forcefully create SuperGroup, don't care whether resource limits
1202
1293
  // actually allow it.
1203
1294
  createSuperGroup(options);
1204
1295
  }
1205
1296
  }
1206
- return get(options2, &ticket)->getGroup();
1297
+ return get(options2, &ticket)->getGroup()->shared_from_this();
1207
1298
  }
1208
1299
 
1209
1300
  void setMax(unsigned int max) {
@@ -1222,7 +1313,7 @@ public:
1222
1313
  * resources to eventually complete. Favoring waiters
1223
1314
  * on the pool should be fairer.
1224
1315
  */
1225
- vector<Callback> actions;
1316
+ boost::container::vector<Callback> actions;
1226
1317
  assignSessionsToGetWaiters(actions);
1227
1318
  possiblySpawnMoreProcessesForExistingGroups();
1228
1319
 
@@ -1240,30 +1331,29 @@ public:
1240
1331
  garbageCollectionCond.notify_all();
1241
1332
  }
1242
1333
 
1243
- unsigned int capacityUsed(bool lock = true) const {
1244
- DynamicScopedLock l(syncher, lock);
1245
- SuperGroupMap::const_iterator it, end = superGroups.end();
1246
- int result = 0;
1247
- for (it = superGroups.begin(); it != end; it++) {
1248
- const SuperGroupPtr &superGroup = it->second;
1249
- result += superGroup->capacityUsed();
1250
- }
1251
- return result;
1334
+ void enableSelfChecking(bool enabled) {
1335
+ LockGuard l(syncher);
1336
+ selfchecking = enabled;
1252
1337
  }
1253
1338
 
1254
- bool atFullCapacity(bool lock = true) const {
1255
- DynamicScopedLock l(syncher, lock);
1256
- return capacityUsed(false) >= max;
1339
+ unsigned int capacityUsed() const {
1340
+ LockGuard l(syncher);
1341
+ return capacityUsedUnlocked();
1342
+ }
1343
+
1344
+ bool atFullCapacity() const {
1345
+ LockGuard l(syncher);
1346
+ return atFullCapacityUnlocked();
1257
1347
  }
1258
1348
 
1259
1349
  vector<ProcessPtr> getProcesses(bool lock = true) const {
1260
1350
  DynamicScopedLock l(syncher, lock);
1261
1351
  vector<ProcessPtr> result;
1262
- SuperGroupMap::const_iterator it, end = superGroups.end();
1263
- for (it = superGroups.begin(); OXT_LIKELY(it != end); it++) {
1264
- const SuperGroupPtr &superGroup = it->second;
1265
- vector<GroupPtr> &groups = superGroup->groups;
1266
- vector<GroupPtr>::const_iterator g_it, g_end = groups.end();
1352
+ SuperGroupMap::ConstIterator sg_it(superGroups);
1353
+ while (*sg_it != NULL) {
1354
+ const SuperGroupPtr &superGroup = sg_it.getValue();
1355
+ SuperGroup::GroupList &groups = superGroup->groups;
1356
+ SuperGroup::GroupList::const_iterator g_it, g_end = groups.end();
1267
1357
  for (g_it = groups.begin(); g_it != g_end; g_it++) {
1268
1358
  const GroupPtr &group = *g_it;
1269
1359
  ProcessList::const_iterator p_it;
@@ -1278,6 +1368,7 @@ public:
1278
1368
  result.push_back(*p_it);
1279
1369
  }
1280
1370
  }
1371
+ sg_it.next();
1281
1372
  }
1282
1373
  return result;
1283
1374
  }
@@ -1290,10 +1381,11 @@ public:
1290
1381
  unsigned int getProcessCount(bool lock = true) const {
1291
1382
  DynamicScopedLock l(syncher, lock);
1292
1383
  unsigned int result = 0;
1293
- SuperGroupMap::const_iterator it, end = superGroups.end();
1294
- for (it = superGroups.begin(); OXT_LIKELY(it != end); it++) {
1295
- const SuperGroupPtr &superGroup = it->second;
1384
+ SuperGroupMap::ConstIterator sg_it(superGroups);
1385
+ while (*sg_it != NULL) {
1386
+ const SuperGroupPtr &superGroup = sg_it.getValue();
1296
1387
  result += superGroup->getProcessCount();
1388
+ sg_it.next();
1297
1389
  }
1298
1390
  return result;
1299
1391
  }
@@ -1305,22 +1397,23 @@ public:
1305
1397
 
1306
1398
  SuperGroupPtr findSuperGroupBySecret(const string &secret, bool lock = true) const {
1307
1399
  DynamicScopedLock l(syncher, lock);
1308
- SuperGroupMap::const_iterator it, end = superGroups.end();
1309
- for (it = superGroups.begin(); OXT_LIKELY(it != end); it++) {
1310
- const SuperGroupPtr &superGroup = it->second;
1400
+ SuperGroupMap::ConstIterator sg_it(superGroups);
1401
+ while (*sg_it != NULL) {
1402
+ const SuperGroupPtr &superGroup = sg_it.getValue();
1311
1403
  if (superGroup->secret == secret) {
1312
1404
  return superGroup;
1313
1405
  }
1406
+ sg_it.next();
1314
1407
  }
1315
1408
  return SuperGroupPtr();
1316
1409
  }
1317
1410
 
1318
- ProcessPtr findProcessByGupid(const string &gupid, bool lock = true) const {
1411
+ ProcessPtr findProcessByGupid(const StaticString &gupid, bool lock = true) const {
1319
1412
  vector<ProcessPtr> processes = getProcesses(lock);
1320
1413
  vector<ProcessPtr>::const_iterator it, end = processes.end();
1321
1414
  for (it = processes.begin(); it != end; it++) {
1322
1415
  const ProcessPtr &process = *it;
1323
- if (process->gupid == gupid) {
1416
+ if (StaticString(process->gupid, process->gupidSize) == gupid) {
1324
1417
  return process;
1325
1418
  }
1326
1419
  }
@@ -1342,54 +1435,51 @@ public:
1342
1435
  bool detachSuperGroupByName(const string &name) {
1343
1436
  TRACE_POINT();
1344
1437
  ScopedLock l(syncher);
1438
+ SuperGroupPtr superGroup = superGroups.lookupCopy(name);
1345
1439
 
1346
- SuperGroupPtr superGroup = superGroups.get(name);
1347
1440
  if (OXT_LIKELY(superGroup != NULL)) {
1348
- if (OXT_LIKELY(superGroups.get(superGroup->name) != NULL)) {
1349
- UPDATE_TRACE_POINT();
1350
- verifyInvariants();
1351
- verifyExpensiveInvariants();
1352
-
1353
- vector<Callback> actions;
1354
- boost::shared_ptr<DetachSuperGroupWaitTicket> ticket =
1355
- boost::make_shared<DetachSuperGroupWaitTicket>();
1356
- ExceptionPtr exception = copyException(
1357
- GetAbortedException("The containing SuperGroup was detached."));
1358
-
1359
- forceDetachSuperGroup(superGroup, actions,
1360
- boost::bind(syncDetachSuperGroupCallback, _1, ticket));
1361
- assignExceptionToGetWaiters(superGroup->getWaitlist,
1362
- exception, actions);
1363
- #if 0
1364
- /* If this SuperGroup had get waiters, either
1365
- * on itself or in one of its groups, then we must
1366
- * reprocess them immediately. Detaching such a
1367
- * SuperGroup is essentially the same as restarting it.
1368
- */
1369
- migrateSuperGroupGetWaitlistToPool(superGroup);
1441
+ P_ASSERT_EQ(superGroup->name, name);
1442
+ UPDATE_TRACE_POINT();
1443
+ verifyInvariants();
1444
+ verifyExpensiveInvariants();
1370
1445
 
1371
- UPDATE_TRACE_POINT();
1372
- assignSessionsToGetWaiters(actions);
1373
- #endif
1374
- possiblySpawnMoreProcessesForExistingGroups();
1446
+ boost::container::vector<Callback> actions;
1447
+ boost::shared_ptr<DetachSuperGroupWaitTicket> ticket =
1448
+ boost::make_shared<DetachSuperGroupWaitTicket>();
1449
+ ExceptionPtr exception = copyException(
1450
+ GetAbortedException("The containing SuperGroup was detached."));
1451
+
1452
+ forceDetachSuperGroup(superGroup, actions,
1453
+ boost::bind(syncDetachSuperGroupCallback, _1, ticket));
1454
+ assignExceptionToGetWaiters(superGroup->getWaitlist,
1455
+ exception, actions);
1456
+ #if 0
1457
+ /* If this SuperGroup had get waiters, either
1458
+ * on itself or in one of its groups, then we must
1459
+ * reprocess them immediately. Detaching such a
1460
+ * SuperGroup is essentially the same as restarting it.
1461
+ */
1462
+ migrateSuperGroupGetWaitlistToPool(superGroup);
1375
1463
 
1376
- verifyInvariants();
1377
- verifyExpensiveInvariants();
1464
+ UPDATE_TRACE_POINT();
1465
+ assignSessionsToGetWaiters(actions);
1466
+ #endif
1467
+ possiblySpawnMoreProcessesForExistingGroups();
1378
1468
 
1379
- l.unlock();
1380
- UPDATE_TRACE_POINT();
1381
- runAllActions(actions);
1382
- actions.clear();
1469
+ verifyInvariants();
1470
+ verifyExpensiveInvariants();
1383
1471
 
1384
- UPDATE_TRACE_POINT();
1385
- ScopedLock l2(ticket->syncher);
1386
- while (!ticket->done) {
1387
- ticket->cond.wait(l2);
1388
- }
1389
- return ticket->result == SuperGroup::SUCCESS;
1390
- } else {
1391
- return false;
1472
+ l.unlock();
1473
+ UPDATE_TRACE_POINT();
1474
+ runAllActions(actions);
1475
+ actions.clear();
1476
+
1477
+ UPDATE_TRACE_POINT();
1478
+ ScopedLock l2(ticket->syncher);
1479
+ while (!ticket->done) {
1480
+ ticket->cond.wait(l2);
1392
1481
  }
1482
+ return ticket->result == SuperGroup::SUCCESS;
1393
1483
  } else {
1394
1484
  return false;
1395
1485
  }
@@ -1410,7 +1500,7 @@ public:
1410
1500
 
1411
1501
  bool detachProcess(const ProcessPtr &process) {
1412
1502
  ScopedLock l(syncher);
1413
- vector<Callback> actions;
1503
+ boost::container::vector<Callback> actions;
1414
1504
  bool result = detachProcessUnlocked(process, actions);
1415
1505
  fullVerifyInvariants();
1416
1506
  l.unlock();
@@ -1422,7 +1512,7 @@ public:
1422
1512
  ScopedLock l(syncher);
1423
1513
  ProcessPtr process = findProcessByPid(pid, false);
1424
1514
  if (process != NULL) {
1425
- vector<Callback> actions;
1515
+ boost::container::vector<Callback> actions;
1426
1516
  bool result = detachProcessUnlocked(process, actions);
1427
1517
  fullVerifyInvariants();
1428
1518
  l.unlock();
@@ -1437,7 +1527,7 @@ public:
1437
1527
  ScopedLock l(syncher);
1438
1528
  ProcessPtr process = findProcessByGupid(gupid, false);
1439
1529
  if (process != NULL) {
1440
- vector<Callback> actions;
1530
+ boost::container::vector<Callback> actions;
1441
1531
  bool result = detachProcessUnlocked(process, actions);
1442
1532
  fullVerifyInvariants();
1443
1533
  l.unlock();
@@ -1448,11 +1538,11 @@ public:
1448
1538
  }
1449
1539
  }
1450
1540
 
1451
- DisableResult disableProcess(const string &gupid) {
1541
+ DisableResult disableProcess(const StaticString &gupid) {
1452
1542
  ScopedLock l(syncher);
1453
1543
  ProcessPtr process = findProcessByGupid(gupid, false);
1454
1544
  if (process != NULL) {
1455
- GroupPtr group = process->getGroup();
1545
+ Group *group = process->getGroup();
1456
1546
  // Must be a boost::shared_ptr to be interruption-safe.
1457
1547
  boost::shared_ptr<DisableWaitTicket> ticket = boost::make_shared<DisableWaitTicket>();
1458
1548
  DisableResult result = group->disable(process,
@@ -1476,10 +1566,9 @@ public:
1476
1566
 
1477
1567
  bool restartGroupByName(const StaticString &name, RestartMethod method = RM_DEFAULT) {
1478
1568
  ScopedLock l(syncher);
1479
- SuperGroupMap::iterator sg_it, sg_end = superGroups.end();
1480
-
1481
- for (sg_it = superGroups.begin(); sg_it != sg_end; sg_it++) {
1482
- const SuperGroupPtr &superGroup = sg_it->second;
1569
+ SuperGroupMap::ConstIterator sg_it(superGroups);
1570
+ while (*sg_it != NULL) {
1571
+ const SuperGroupPtr &superGroup = sg_it.getValue();
1483
1572
  foreach (const GroupPtr &group, superGroup->groups) {
1484
1573
  if (name == group->name) {
1485
1574
  if (!group->restarting()) {
@@ -1488,6 +1577,7 @@ public:
1488
1577
  return true;
1489
1578
  }
1490
1579
  }
1580
+ sg_it.next();
1491
1581
  }
1492
1582
 
1493
1583
  return false;
@@ -1495,15 +1585,16 @@ public:
1495
1585
 
1496
1586
  unsigned int restartSuperGroupsByAppRoot(const StaticString &appRoot) {
1497
1587
  ScopedLock l(syncher);
1498
- SuperGroupMap::iterator sg_it, sg_end = superGroups.end();
1588
+ SuperGroupMap::ConstIterator sg_it(superGroups);
1499
1589
  unsigned int result = 0;
1500
1590
 
1501
- for (sg_it = superGroups.begin(); sg_it != sg_end; sg_it++) {
1502
- const SuperGroupPtr &superGroup = sg_it->second;
1591
+ while (*sg_it != NULL) {
1592
+ const SuperGroupPtr &superGroup = sg_it.getValue();
1503
1593
  if (appRoot == superGroup->options.appRoot) {
1504
1594
  result++;
1505
1595
  superGroup->restart(superGroup->options);
1506
1596
  }
1597
+ sg_it.next();
1507
1598
  }
1508
1599
 
1509
1600
  return result;
@@ -1514,13 +1605,15 @@ public:
1514
1605
  */
1515
1606
  bool isSpawning(bool lock = true) const {
1516
1607
  DynamicScopedLock l(syncher, lock);
1517
- SuperGroupMap::const_iterator it, end = superGroups.end();
1518
- for (it = superGroups.begin(); it != end; it++) {
1519
- foreach (GroupPtr group, it->second->groups) {
1608
+ SuperGroupMap::ConstIterator sg_it(superGroups);
1609
+ while (*sg_it != NULL) {
1610
+ const SuperGroupPtr &superGroup = sg_it.getValue();
1611
+ foreach (GroupPtr group, superGroup->groups) {
1520
1612
  if (group->spawning()) {
1521
1613
  return true;
1522
1614
  }
1523
1615
  }
1616
+ sg_it.next();
1524
1617
  }
1525
1618
  return false;
1526
1619
  }
@@ -1545,9 +1638,9 @@ public:
1545
1638
  result << endl;
1546
1639
 
1547
1640
  result << headerColor << "----------- Application groups -----------" << resetColor << endl;
1548
- SuperGroupMap::const_iterator sg_it, sg_end = superGroups.end();
1549
- for (sg_it = superGroups.begin(); sg_it != sg_end; sg_it++) {
1550
- const SuperGroupPtr &superGroup = sg_it->second;
1641
+ SuperGroupMap::ConstIterator sg_it(superGroups);
1642
+ while (*sg_it != NULL) {
1643
+ const SuperGroupPtr &superGroup = sg_it.getValue();
1551
1644
  const Group *group = superGroup->defaultGroup;
1552
1645
  ProcessList::const_iterator p_it;
1553
1646
 
@@ -1573,6 +1666,7 @@ public:
1573
1666
  inspectProcessList(options, result, group, group->detachedProcesses);
1574
1667
  result << endl;
1575
1668
  }
1669
+ sg_it.next();
1576
1670
  }
1577
1671
  return result.str();
1578
1672
  }
@@ -1580,8 +1674,8 @@ public:
1580
1674
  string toXml(bool includeSecrets = true, bool lock = true) const {
1581
1675
  DynamicScopedLock l(syncher, lock);
1582
1676
  stringstream result;
1583
- SuperGroupMap::const_iterator sg_it;
1584
- vector<GroupPtr>::const_iterator g_it;
1677
+ SuperGroupMap::ConstIterator sg_it(superGroups);
1678
+ SuperGroup::GroupList::const_iterator g_it;
1585
1679
  ProcessList::const_iterator p_it;
1586
1680
 
1587
1681
  result << "<?xml version=\"1.0\" encoding=\"iso8859-1\" ?>\n";
@@ -1590,7 +1684,7 @@ public:
1590
1684
  result << "<passenger_version>" << PASSENGER_VERSION << "</passenger_version>";
1591
1685
  result << "<process_count>" << getProcessCount(false) << "</process_count>";
1592
1686
  result << "<max>" << max << "</max>";
1593
- result << "<capacity_used>" << capacityUsed(false) << "</capacity_used>";
1687
+ result << "<capacity_used>" << capacityUsedUnlocked() << "</capacity_used>";
1594
1688
  result << "<get_wait_list_size>" << getWaitlist.size() << "</get_wait_list_size>";
1595
1689
 
1596
1690
  if (includeSecrets) {
@@ -1607,8 +1701,8 @@ public:
1607
1701
  }
1608
1702
 
1609
1703
  result << "<supergroups>";
1610
- for (sg_it = superGroups.begin(); sg_it != superGroups.end(); sg_it++) {
1611
- const SuperGroupPtr &superGroup = sg_it->second;
1704
+ while (*sg_it != NULL) {
1705
+ const SuperGroupPtr &superGroup = sg_it.getValue();
1612
1706
 
1613
1707
  result << "<supergroup>";
1614
1708
  result << "<name>" << escapeForXml(superGroup->name) << "</name>";
@@ -1631,6 +1725,8 @@ public:
1631
1725
  result << "</group>";
1632
1726
  }
1633
1727
  result << "</supergroup>";
1728
+
1729
+ sg_it.next();
1634
1730
  }
1635
1731
  result << "</supergroups>";
1636
1732