passenger 3.0.21 → 3.9.1.beta

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 (835) hide show
  1. data/DEVELOPERS.TXT +4 -10
  2. data/NEWS +19 -27
  3. data/Rakefile +20 -19
  4. data/bin/passenger +3 -2
  5. data/bin/passenger-config +35 -5
  6. data/bin/passenger-install-apache2-module +12 -12
  7. data/bin/passenger-install-nginx-module +55 -38
  8. data/bin/passenger-memory-stats +3 -1
  9. data/bin/passenger-status +7 -35
  10. data/build/agents.rb +107 -21
  11. data/build/apache2.rb +11 -46
  12. data/build/basics.rb +61 -9
  13. data/build/common_library.rb +59 -142
  14. data/build/cxx_tests.rb +111 -110
  15. data/build/documentation.rb +33 -0
  16. data/build/misc.rb +30 -12
  17. data/build/nginx.rb +10 -39
  18. data/build/oxt_tests.rb +1 -0
  19. data/build/ruby_extension.rb +1 -5
  20. data/build/test_basics.rb +3 -2
  21. data/dev/copy_boost_headers.rb +2 -1
  22. data/doc/Architectural overview.html +49 -90
  23. data/doc/DebuggingAndStressTesting.txt.md +49 -0
  24. data/doc/Packaging.txt.md +254 -0
  25. data/doc/Security of user switching support.html +35 -66
  26. data/doc/Users guide Apache.html +588 -758
  27. data/doc/Users guide Apache.idmap.txt +253 -136
  28. data/doc/Users guide Apache.txt +154 -109
  29. data/doc/Users guide Nginx.html +544 -660
  30. data/doc/Users guide Nginx.idmap.txt +179 -91
  31. data/doc/Users guide Nginx.txt +192 -118
  32. data/doc/Users guide Standalone.html +65 -48
  33. data/doc/Users guide Standalone.idmap.txt +10 -2
  34. data/doc/Users guide Standalone.txt +4 -0
  35. data/doc/images/glyphicons-halflings-white.png +0 -0
  36. data/doc/images/glyphicons-halflings.png +0 -0
  37. data/doc/images/phusion_banner_small.png +0 -0
  38. data/doc/images/{smart-lv2.png → smart.png} +0 -0
  39. data/doc/images/{smart-lv2.svg → smart.svg} +0 -0
  40. data/doc/templates/bootstrap.min.css +397 -0
  41. data/doc/templates/markdown.html.erb +117 -0
  42. data/doc/users_guide_snippets/analysis_and_system_maintenance.txt +2 -1
  43. data/doc/users_guide_snippets/appendix_c_spawning_methods.txt +26 -48
  44. data/doc/users_guide_snippets/passenger_spawn_method.txt +18 -30
  45. data/doc/users_guide_snippets/support_information.txt +30 -0
  46. data/ext/apache2/Bucket.cpp +9 -26
  47. data/ext/apache2/Bucket.h +13 -10
  48. data/ext/apache2/Configuration.cpp +70 -58
  49. data/ext/apache2/Configuration.hpp +19 -47
  50. data/ext/apache2/DirectoryMapper.h +7 -7
  51. data/ext/apache2/Hooks.cpp +150 -313
  52. data/ext/boost/algorithm/string/detail/case_conv.hpp +4 -2
  53. data/ext/boost/algorithm/string/detail/find_format.hpp +20 -20
  54. data/ext/boost/algorithm/string/detail/find_format_all.hpp +23 -23
  55. data/ext/boost/algorithm/string/detail/find_format_store.hpp +2 -2
  56. data/ext/boost/algorithm/string/detail/formatter.hpp +25 -0
  57. data/ext/boost/algorithm/string/formatter.hpp +20 -3
  58. data/ext/boost/assert.hpp +85 -4
  59. data/ext/boost/bind/bind.hpp +1 -1
  60. data/ext/boost/concept/detail/backward_compatibility.hpp +1 -1
  61. data/ext/boost/concept_check.hpp +140 -64
  62. data/ext/boost/config.hpp +1 -1
  63. data/ext/boost/config/auto_link.hpp +8 -6
  64. data/ext/boost/config/compiler/borland.hpp +12 -2
  65. data/ext/boost/config/compiler/clang.hpp +89 -30
  66. data/ext/boost/config/compiler/codegear.hpp +3 -2
  67. data/ext/boost/config/compiler/common_edg.hpp +7 -5
  68. data/ext/boost/config/compiler/cray.hpp +61 -0
  69. data/ext/boost/config/compiler/digitalmars.hpp +9 -1
  70. data/ext/boost/config/compiler/gcc.hpp +33 -24
  71. data/ext/boost/config/compiler/gcc_xml.hpp +4 -0
  72. data/ext/boost/config/compiler/hp_acc.hpp +12 -1
  73. data/ext/boost/config/compiler/intel.hpp +78 -4
  74. data/ext/boost/config/compiler/metrowerks.hpp +4 -1
  75. data/ext/boost/config/compiler/mpw.hpp +4 -1
  76. data/ext/boost/config/compiler/nvcc.hpp +8 -66
  77. data/ext/boost/config/compiler/pathscale.hpp +80 -0
  78. data/ext/boost/config/compiler/pgi.hpp +5 -5
  79. data/ext/boost/config/compiler/sunpro_cc.hpp +4 -1
  80. data/ext/boost/config/compiler/vacpp.hpp +37 -13
  81. data/ext/boost/config/compiler/visualc.hpp +24 -11
  82. data/ext/boost/config/platform/bsd.hpp +1 -1
  83. data/ext/boost/config/platform/cray.hpp +18 -0
  84. data/ext/boost/config/platform/cygwin.hpp +10 -0
  85. data/ext/boost/config/platform/linux.hpp +5 -0
  86. data/ext/boost/config/platform/macos.hpp +5 -4
  87. data/ext/boost/config/platform/symbian.hpp +5 -2
  88. data/ext/boost/config/platform/vms.hpp +25 -0
  89. data/ext/boost/config/platform/win32.hpp +7 -1
  90. data/ext/boost/config/select_compiler_config.hpp +8 -25
  91. data/ext/boost/config/select_platform_config.hpp +8 -1
  92. data/ext/boost/config/select_stdlib_config.hpp +9 -1
  93. data/ext/boost/config/stdlib/dinkumware.hpp +6 -9
  94. data/ext/boost/config/stdlib/libcomo.hpp +1 -4
  95. data/ext/boost/config/stdlib/libcpp.hpp +36 -0
  96. data/ext/boost/config/stdlib/libstdcpp3.hpp +37 -11
  97. data/ext/boost/config/stdlib/modena.hpp +1 -4
  98. data/ext/boost/config/stdlib/msl.hpp +1 -4
  99. data/ext/boost/config/stdlib/roguewave.hpp +9 -6
  100. data/ext/boost/config/stdlib/sgi.hpp +12 -4
  101. data/ext/boost/config/stdlib/stlport.hpp +11 -4
  102. data/ext/boost/config/stdlib/vacpp.hpp +11 -4
  103. data/ext/boost/config/suffix.hpp +71 -6
  104. data/ext/boost/config/warning_disable.hpp +1 -1
  105. data/ext/boost/container/container_fwd.hpp +177 -0
  106. data/ext/boost/cstdint.hpp +17 -12
  107. data/ext/boost/current_function.hpp +2 -1
  108. data/ext/boost/date_time/c_time.hpp +17 -1
  109. data/ext/boost/date_time/compiler_config.hpp +13 -15
  110. data/ext/boost/date_time/date_formatting.hpp +7 -1
  111. data/ext/boost/date_time/filetime_functions.hpp +4 -4
  112. data/ext/boost/date_time/gregorian_calendar.ipp +2 -2
  113. data/ext/boost/date_time/strings_from_facet.hpp +3 -3
  114. data/ext/boost/date_time/time_facet.hpp +101 -101
  115. data/ext/boost/detail/endian.hpp +4 -2
  116. data/ext/boost/detail/fenv.hpp +74 -0
  117. data/ext/boost/detail/sp_typeinfo.hpp +6 -0
  118. data/ext/boost/exception/detail/clone_current_exception.hpp +47 -0
  119. data/ext/boost/exception/detail/exception_ptr.hpp +194 -122
  120. data/ext/boost/exception/detail/type_info.hpp +3 -3
  121. data/ext/boost/exception/diagnostic_information.hpp +37 -21
  122. data/ext/boost/exception/exception.hpp +21 -1
  123. data/ext/boost/exception/info.hpp +0 -1
  124. data/ext/boost/function.hpp +2 -2
  125. data/ext/boost/function/function_base.hpp +15 -9
  126. data/ext/boost/function/function_template.hpp +26 -48
  127. data/ext/boost/integer_fwd.hpp +0 -16
  128. data/ext/boost/integer_traits.hpp +2 -2
  129. data/ext/boost/iterator.hpp +1 -1
  130. data/ext/boost/iterator/iterator_adaptor.hpp +1 -7
  131. data/ext/boost/iterator/iterator_facade.hpp +13 -13
  132. data/ext/boost/iterator/transform_iterator.hpp +5 -20
  133. data/ext/boost/lexical_cast.hpp +1655 -673
  134. data/ext/boost/math/policies/policy.hpp +982 -0
  135. data/ext/boost/math/special_functions/detail/fp_traits.hpp +570 -0
  136. data/ext/boost/math/special_functions/detail/round_fwd.hpp +80 -0
  137. data/ext/boost/math/special_functions/fpclassify.hpp +533 -0
  138. data/ext/boost/math/special_functions/math_fwd.hpp +1070 -0
  139. data/ext/boost/math/special_functions/sign.hpp +145 -0
  140. data/ext/boost/math/tools/config.hpp +321 -0
  141. data/ext/boost/math/tools/promotion.hpp +150 -0
  142. data/ext/boost/math/tools/real_cast.hpp +29 -0
  143. data/ext/boost/math/tools/user.hpp +97 -0
  144. data/ext/boost/move/move.hpp +1222 -0
  145. data/ext/boost/mpl/O1_size.hpp +40 -0
  146. data/ext/boost/mpl/O1_size_fwd.hpp +24 -0
  147. data/ext/boost/mpl/advance.hpp +76 -0
  148. data/ext/boost/mpl/advance_fwd.hpp +28 -0
  149. data/ext/boost/mpl/at.hpp +52 -0
  150. data/ext/boost/mpl/at_fwd.hpp +24 -0
  151. data/ext/boost/mpl/aux_/O1_size_impl.hpp +87 -0
  152. data/ext/boost/mpl/aux_/advance_backward.hpp +128 -0
  153. data/ext/boost/mpl/aux_/advance_forward.hpp +127 -0
  154. data/ext/boost/mpl/aux_/arithmetic_op.hpp +92 -0
  155. data/ext/boost/mpl/aux_/at_impl.hpp +45 -0
  156. data/ext/boost/mpl/aux_/begin_end_impl.hpp +101 -0
  157. data/ext/boost/mpl/aux_/clear_impl.hpp +35 -0
  158. data/ext/boost/mpl/aux_/comparison_op.hpp +83 -0
  159. data/ext/boost/mpl/aux_/config/forwarding.hpp +27 -0
  160. data/ext/boost/mpl/aux_/config/typeof.hpp +38 -0
  161. data/ext/boost/mpl/aux_/contains_impl.hpp +61 -0
  162. data/ext/boost/mpl/aux_/find_if_pred.hpp +31 -0
  163. data/ext/boost/mpl/aux_/fold_impl.hpp +43 -0
  164. data/ext/boost/mpl/aux_/has_begin.hpp +23 -0
  165. data/ext/boost/mpl/aux_/has_size.hpp +23 -0
  166. data/ext/boost/mpl/aux_/has_tag.hpp +23 -0
  167. data/ext/boost/mpl/aux_/inserter_algorithm.hpp +159 -0
  168. data/ext/boost/mpl/aux_/is_msvc_eti_arg.hpp +64 -0
  169. data/ext/boost/mpl/aux_/iter_apply.hpp +47 -0
  170. data/ext/boost/mpl/aux_/iter_fold_if_impl.hpp +210 -0
  171. data/ext/boost/mpl/aux_/iter_fold_impl.hpp +42 -0
  172. data/ext/boost/mpl/aux_/lambda_spec.hpp +49 -0
  173. data/ext/boost/mpl/aux_/largest_int.hpp +63 -0
  174. data/ext/boost/mpl/aux_/msvc_eti_base.hpp +77 -0
  175. data/ext/boost/mpl/aux_/msvc_type.hpp +62 -0
  176. data/ext/boost/mpl/aux_/numeric_cast_utils.hpp +77 -0
  177. data/ext/boost/mpl/aux_/numeric_op.hpp +315 -0
  178. data/ext/boost/mpl/aux_/preprocessed/gcc/advance_backward.hpp +97 -0
  179. data/ext/boost/mpl/aux_/preprocessed/gcc/advance_forward.hpp +97 -0
  180. data/ext/boost/mpl/aux_/preprocessed/gcc/equal_to.hpp +94 -0
  181. data/ext/boost/mpl/aux_/preprocessed/gcc/fold_impl.hpp +180 -0
  182. data/ext/boost/mpl/aux_/preprocessed/gcc/greater.hpp +94 -0
  183. data/ext/boost/mpl/aux_/preprocessed/gcc/greater_equal.hpp +94 -0
  184. data/ext/boost/mpl/aux_/preprocessed/gcc/iter_fold_if_impl.hpp +133 -0
  185. data/ext/boost/mpl/aux_/preprocessed/gcc/iter_fold_impl.hpp +180 -0
  186. data/ext/boost/mpl/aux_/preprocessed/gcc/less.hpp +94 -0
  187. data/ext/boost/mpl/aux_/preprocessed/gcc/less_equal.hpp +94 -0
  188. data/ext/boost/mpl/aux_/preprocessed/gcc/list.hpp +323 -0
  189. data/ext/boost/mpl/aux_/preprocessed/gcc/minus.hpp +146 -0
  190. data/ext/boost/mpl/aux_/preprocessed/gcc/not_equal_to.hpp +94 -0
  191. data/ext/boost/mpl/aux_/preprocessed/gcc/plus.hpp +146 -0
  192. data/ext/boost/mpl/aux_/preprocessed/gcc/reverse_fold_impl.hpp +231 -0
  193. data/ext/boost/mpl/aux_/preprocessed/gcc/times.hpp +146 -0
  194. data/ext/boost/mpl/aux_/preprocessed/gcc/vector.hpp +323 -0
  195. data/ext/boost/mpl/aux_/preprocessor/default_params.hpp +67 -0
  196. data/ext/boost/mpl/aux_/push_back_impl.hpp +70 -0
  197. data/ext/boost/mpl/aux_/push_front_impl.hpp +71 -0
  198. data/ext/boost/mpl/aux_/reverse_fold_impl.hpp +44 -0
  199. data/ext/boost/mpl/aux_/size_impl.hpp +52 -0
  200. data/ext/boost/mpl/aux_/traits_lambda_spec.hpp +63 -0
  201. data/ext/boost/mpl/back_fwd.hpp +24 -0
  202. data/ext/boost/mpl/back_inserter.hpp +34 -0
  203. data/ext/boost/mpl/begin_end.hpp +57 -0
  204. data/ext/boost/mpl/begin_end_fwd.hpp +27 -0
  205. data/ext/boost/mpl/clear.hpp +39 -0
  206. data/ext/boost/mpl/clear_fwd.hpp +24 -0
  207. data/ext/boost/mpl/comparison.hpp +24 -0
  208. data/ext/boost/mpl/contains.hpp +41 -0
  209. data/ext/boost/mpl/contains_fwd.hpp +25 -0
  210. data/ext/boost/mpl/deref.hpp +41 -0
  211. data/ext/boost/mpl/distance.hpp +78 -0
  212. data/ext/boost/mpl/distance_fwd.hpp +28 -0
  213. data/ext/boost/mpl/empty_fwd.hpp +24 -0
  214. data/ext/boost/mpl/equal_to.hpp +21 -0
  215. data/ext/boost/mpl/find.hpp +38 -0
  216. data/ext/boost/mpl/find_if.hpp +50 -0
  217. data/ext/boost/mpl/fold.hpp +48 -0
  218. data/ext/boost/mpl/front_fwd.hpp +24 -0
  219. data/ext/boost/mpl/front_inserter.hpp +33 -0
  220. data/ext/boost/mpl/greater.hpp +21 -0
  221. data/ext/boost/mpl/greater_equal.hpp +21 -0
  222. data/ext/boost/mpl/inserter.hpp +32 -0
  223. data/ext/boost/mpl/iter_fold.hpp +49 -0
  224. data/ext/boost/mpl/iter_fold_if.hpp +117 -0
  225. data/ext/boost/mpl/iterator_range.hpp +42 -0
  226. data/ext/boost/mpl/iterator_tags.hpp +27 -0
  227. data/ext/boost/mpl/less.hpp +21 -0
  228. data/ext/boost/mpl/less_equal.hpp +21 -0
  229. data/ext/boost/mpl/limits/list.hpp +21 -0
  230. data/ext/boost/mpl/limits/vector.hpp +21 -0
  231. data/ext/boost/mpl/list.hpp +57 -0
  232. data/ext/boost/mpl/list/aux_/O1_size.hpp +33 -0
  233. data/ext/boost/mpl/list/aux_/begin_end.hpp +44 -0
  234. data/ext/boost/mpl/list/aux_/clear.hpp +34 -0
  235. data/ext/boost/mpl/list/aux_/empty.hpp +34 -0
  236. data/ext/boost/mpl/list/aux_/front.hpp +33 -0
  237. data/ext/boost/mpl/list/aux_/include_preprocessed.hpp +35 -0
  238. data/ext/boost/mpl/list/aux_/item.hpp +55 -0
  239. data/ext/boost/mpl/list/aux_/iterator.hpp +76 -0
  240. data/ext/boost/mpl/list/aux_/pop_front.hpp +34 -0
  241. data/ext/boost/mpl/list/aux_/preprocessed/plain/list10.hpp +149 -0
  242. data/ext/boost/mpl/list/aux_/preprocessed/plain/list20.hpp +169 -0
  243. data/ext/boost/mpl/list/aux_/push_back.hpp +36 -0
  244. data/ext/boost/mpl/list/aux_/push_front.hpp +39 -0
  245. data/ext/boost/mpl/list/aux_/size.hpp +33 -0
  246. data/ext/boost/mpl/list/aux_/tag.hpp +24 -0
  247. data/ext/boost/mpl/list/list0.hpp +42 -0
  248. data/ext/boost/mpl/list/list10.hpp +43 -0
  249. data/ext/boost/mpl/list/list20.hpp +43 -0
  250. data/ext/boost/mpl/long.hpp +22 -0
  251. data/ext/boost/mpl/long_fwd.hpp +27 -0
  252. data/ext/boost/mpl/minus.hpp +21 -0
  253. data/ext/boost/mpl/multiplies.hpp +53 -0
  254. data/ext/boost/mpl/negate.hpp +81 -0
  255. data/ext/boost/mpl/not_equal_to.hpp +21 -0
  256. data/ext/boost/mpl/numeric_cast.hpp +41 -0
  257. data/ext/boost/mpl/pair.hpp +70 -0
  258. data/ext/boost/mpl/plus.hpp +21 -0
  259. data/ext/boost/mpl/pop_back_fwd.hpp +24 -0
  260. data/ext/boost/mpl/pop_front_fwd.hpp +24 -0
  261. data/ext/boost/mpl/prior.hpp +19 -0
  262. data/ext/boost/mpl/push_back.hpp +53 -0
  263. data/ext/boost/mpl/push_back_fwd.hpp +24 -0
  264. data/ext/boost/mpl/push_front.hpp +52 -0
  265. data/ext/boost/mpl/push_front_fwd.hpp +24 -0
  266. data/ext/boost/mpl/remove_if.hpp +83 -0
  267. data/ext/boost/mpl/reverse_fold.hpp +50 -0
  268. data/ext/boost/mpl/same_as.hpp +55 -0
  269. data/ext/boost/mpl/sequence_tag.hpp +124 -0
  270. data/ext/boost/mpl/sequence_tag_fwd.hpp +26 -0
  271. data/ext/boost/mpl/size.hpp +42 -0
  272. data/ext/boost/mpl/size_fwd.hpp +24 -0
  273. data/ext/boost/mpl/tag.hpp +52 -0
  274. data/ext/boost/mpl/times.hpp +21 -0
  275. data/ext/boost/mpl/vector.hpp +57 -0
  276. data/ext/boost/mpl/vector/aux_/O1_size.hpp +56 -0
  277. data/ext/boost/mpl/vector/aux_/at.hpp +116 -0
  278. data/ext/boost/mpl/vector/aux_/back.hpp +59 -0
  279. data/ext/boost/mpl/vector/aux_/begin_end.hpp +49 -0
  280. data/ext/boost/mpl/vector/aux_/clear.hpp +55 -0
  281. data/ext/boost/mpl/vector/aux_/empty.hpp +68 -0
  282. data/ext/boost/mpl/vector/aux_/front.hpp +56 -0
  283. data/ext/boost/mpl/vector/aux_/include_preprocessed.hpp +55 -0
  284. data/ext/boost/mpl/vector/aux_/item.hpp +103 -0
  285. data/ext/boost/mpl/vector/aux_/iterator.hpp +130 -0
  286. data/ext/boost/mpl/vector/aux_/pop_back.hpp +40 -0
  287. data/ext/boost/mpl/vector/aux_/pop_front.hpp +40 -0
  288. data/ext/boost/mpl/vector/aux_/preprocessed/plain/vector10.hpp +829 -0
  289. data/ext/boost/mpl/vector/aux_/preprocessed/plain/vector20.hpp +1144 -0
  290. data/ext/boost/mpl/vector/aux_/preprocessed/typeof_based/vector10.hpp +139 -0
  291. data/ext/boost/mpl/vector/aux_/preprocessed/typeof_based/vector20.hpp +159 -0
  292. data/ext/boost/mpl/vector/aux_/push_back.hpp +40 -0
  293. data/ext/boost/mpl/vector/aux_/push_front.hpp +40 -0
  294. data/ext/boost/mpl/vector/aux_/size.hpp +49 -0
  295. data/ext/boost/mpl/vector/aux_/tag.hpp +32 -0
  296. data/ext/boost/mpl/vector/aux_/vector0.hpp +52 -0
  297. data/ext/boost/mpl/vector/vector0.hpp +34 -0
  298. data/ext/boost/mpl/vector/vector10.hpp +45 -0
  299. data/ext/boost/mpl/vector/vector20.hpp +45 -0
  300. data/ext/boost/none.hpp +1 -1
  301. data/ext/boost/numeric/conversion/bounds.hpp +24 -0
  302. data/ext/boost/numeric/conversion/cast.hpp +61 -0
  303. data/ext/boost/numeric/conversion/conversion_traits.hpp +39 -0
  304. data/ext/boost/numeric/conversion/converter.hpp +68 -0
  305. data/ext/boost/numeric/conversion/converter_policies.hpp +186 -0
  306. data/ext/boost/numeric/conversion/detail/bounds.hpp +58 -0
  307. data/ext/boost/numeric/conversion/detail/conversion_traits.hpp +97 -0
  308. data/ext/boost/numeric/conversion/detail/converter.hpp +602 -0
  309. data/ext/boost/numeric/conversion/detail/int_float_mixture.hpp +72 -0
  310. data/ext/boost/numeric/conversion/detail/is_subranged.hpp +234 -0
  311. data/ext/boost/numeric/conversion/detail/meta.hpp +120 -0
  312. data/ext/boost/numeric/conversion/detail/numeric_cast_traits.hpp +138 -0
  313. data/ext/boost/numeric/conversion/detail/preprocessed/numeric_cast_traits_common.hpp +1741 -0
  314. data/ext/boost/numeric/conversion/detail/preprocessed/numeric_cast_traits_long_long.hpp +347 -0
  315. data/ext/boost/numeric/conversion/detail/sign_mixture.hpp +72 -0
  316. data/ext/boost/numeric/conversion/detail/udt_builtin_mixture.hpp +69 -0
  317. data/ext/boost/numeric/conversion/int_float_mixture_enum.hpp +29 -0
  318. data/ext/boost/numeric/conversion/numeric_cast_traits.hpp +31 -0
  319. data/ext/boost/numeric/conversion/sign_mixture_enum.hpp +29 -0
  320. data/ext/boost/numeric/conversion/udt_builtin_mixture_enum.hpp +26 -0
  321. data/ext/boost/operators.hpp +3 -1
  322. data/ext/boost/optional/optional.hpp +146 -79
  323. data/ext/boost/optional/optional_fwd.hpp +8 -1
  324. data/ext/boost/preprocessor/cat.hpp +2 -2
  325. data/ext/boost/preprocessor/config/config.hpp +39 -4
  326. data/ext/boost/preprocessor/facilities/intercept.hpp +277 -0
  327. data/ext/boost/preprocessor/facilities/overload.hpp +25 -0
  328. data/ext/boost/preprocessor/iteration/detail/iter/forward1.hpp +3 -3
  329. data/ext/boost/preprocessor/iteration/iterate.hpp +3 -3
  330. data/ext/boost/preprocessor/punctuation/paren.hpp +23 -0
  331. data/ext/boost/preprocessor/repetition/enum_shifted_params.hpp +44 -0
  332. data/ext/boost/preprocessor/seq/cat.hpp +5 -4
  333. data/ext/boost/preprocessor/seq/size.hpp +0 -1
  334. data/ext/boost/preprocessor/tuple/eat.hpp +83 -34
  335. data/ext/boost/preprocessor/tuple/elem.hpp +161 -355
  336. data/ext/boost/preprocessor/tuple/rem.hpp +110 -48
  337. data/ext/boost/preprocessor/tuple/to_list.hpp +90 -36
  338. data/ext/boost/preprocessor/variadic/elem.hpp +94 -0
  339. data/ext/boost/preprocessor/variadic/size.hpp +30 -0
  340. data/ext/boost/range/begin.hpp +17 -6
  341. data/ext/boost/range/concepts.hpp +37 -2
  342. data/ext/boost/range/detail/safe_bool.hpp +72 -0
  343. data/ext/boost/range/end.hpp +14 -9
  344. data/ext/boost/range/iterator_range_core.hpp +120 -12
  345. data/ext/boost/range/size.hpp +21 -5
  346. data/ext/boost/smart_ptr/detail/shared_count.hpp +88 -0
  347. data/ext/boost/smart_ptr/detail/sp_counted_base.hpp +3 -0
  348. data/ext/boost/smart_ptr/detail/sp_counted_base_aix.hpp +142 -0
  349. data/ext/boost/smart_ptr/detail/sp_counted_base_gcc_mips.hpp +9 -0
  350. data/ext/boost/smart_ptr/detail/sp_counted_impl.hpp +10 -2
  351. data/ext/boost/smart_ptr/detail/sp_has_sync.hpp +5 -1
  352. data/ext/boost/smart_ptr/detail/spinlock.hpp +4 -1
  353. data/ext/boost/smart_ptr/detail/spinlock_gcc_arm.hpp +20 -3
  354. data/ext/boost/smart_ptr/detail/spinlock_pool.hpp +4 -0
  355. data/ext/boost/smart_ptr/make_shared.hpp +591 -22
  356. data/ext/boost/smart_ptr/shared_array.hpp +29 -1
  357. data/ext/boost/smart_ptr/shared_ptr.hpp +29 -13
  358. data/ext/boost/smart_ptr/weak_ptr.hpp +24 -12
  359. data/ext/boost/src/pthread/once.cpp +9 -7
  360. data/ext/boost/src/pthread/thread.cpp +32 -28
  361. data/ext/boost/src/pthread/timeconv.inl +4 -5
  362. data/ext/boost/src/tss_null.cpp +5 -1
  363. data/ext/boost/static_assert.hpp +8 -2
  364. data/ext/boost/thread/detail/config.hpp +19 -4
  365. data/ext/boost/thread/detail/move.hpp +11 -5
  366. data/ext/boost/thread/detail/thread.hpp +59 -43
  367. data/ext/boost/thread/exceptions.hpp +9 -9
  368. data/ext/boost/thread/future.hpp +150 -82
  369. data/ext/boost/thread/locks.hpp +101 -60
  370. data/ext/boost/thread/pthread/condition_variable.hpp +79 -32
  371. data/ext/boost/thread/pthread/condition_variable_fwd.hpp +12 -3
  372. data/ext/boost/thread/pthread/mutex.hpp +17 -14
  373. data/ext/boost/thread/pthread/once.hpp +3 -4
  374. data/ext/boost/thread/pthread/pthread_mutex_scoped_lock.hpp +12 -2
  375. data/ext/boost/thread/pthread/recursive_mutex.hpp +19 -19
  376. data/ext/boost/thread/pthread/shared_mutex.hpp +13 -13
  377. data/ext/boost/thread/pthread/thread_data.hpp +40 -12
  378. data/ext/boost/thread/thread_time.hpp +5 -0
  379. data/ext/boost/throw_exception.hpp +1 -1
  380. data/ext/boost/token_functions.hpp +34 -10
  381. data/ext/boost/type_traits/add_rvalue_reference.hpp +66 -0
  382. data/ext/boost/type_traits/alignment_of.hpp +1 -1
  383. data/ext/boost/type_traits/detail/bool_trait_def.hpp +26 -3
  384. data/ext/boost/type_traits/detail/bool_trait_undef.hpp +3 -2
  385. data/ext/boost/type_traits/detail/cv_traits_impl.hpp +1 -1
  386. data/ext/boost/type_traits/detail/size_t_trait_def.hpp +6 -4
  387. data/ext/boost/type_traits/detail/type_trait_def.hpp +8 -2
  388. data/ext/boost/type_traits/function_traits.hpp +1 -1
  389. data/ext/boost/type_traits/has_nothrow_constructor.hpp +53 -0
  390. data/ext/boost/type_traits/has_nothrow_copy.hpp +19 -5
  391. data/ext/boost/type_traits/has_trivial_constructor.hpp +51 -0
  392. data/ext/boost/type_traits/has_trivial_copy.hpp +20 -5
  393. data/ext/boost/type_traits/has_trivial_destructor.hpp +12 -5
  394. data/ext/boost/type_traits/intrinsics.hpp +119 -71
  395. data/ext/boost/type_traits/is_const.hpp +5 -5
  396. data/ext/boost/type_traits/is_convertible.hpp +14 -13
  397. data/ext/boost/type_traits/is_enum.hpp +1 -1
  398. data/ext/boost/type_traits/is_floating_point.hpp +27 -0
  399. data/ext/boost/type_traits/is_function.hpp +3 -3
  400. data/ext/boost/type_traits/is_fundamental.hpp +1 -1
  401. data/ext/boost/type_traits/is_member_function_pointer.hpp +2 -2
  402. data/ext/boost/type_traits/is_member_pointer.hpp +2 -2
  403. data/ext/boost/type_traits/is_pod.hpp +11 -3
  404. data/ext/boost/type_traits/is_pointer.hpp +2 -2
  405. data/ext/boost/type_traits/is_signed.hpp +8 -3
  406. data/ext/boost/type_traits/is_union.hpp +8 -0
  407. data/ext/boost/type_traits/is_unsigned.hpp +9 -4
  408. data/ext/boost/type_traits/is_volatile.hpp +5 -5
  409. data/ext/boost/type_traits/remove_cv.hpp +4 -3
  410. data/ext/boost/type_traits/remove_pointer.hpp +51 -2
  411. data/ext/boost/type_traits/remove_reference.hpp +2 -2
  412. data/ext/boost/type_traits/type_with_alignment.hpp +8 -2
  413. data/ext/boost/utility/declval.hpp +44 -0
  414. data/ext/boost/utility/detail/in_place_factory_prefix.hpp +36 -0
  415. data/ext/boost/utility/detail/in_place_factory_suffix.hpp +23 -0
  416. data/ext/boost/utility/detail/result_of_iterate.hpp +142 -0
  417. data/ext/boost/utility/in_place_factory.hpp +88 -0
  418. data/ext/boost/utility/result_of.hpp +103 -0
  419. data/ext/boost/utility/swap.hpp +55 -0
  420. data/ext/common/AnsiColorConstants.h +36 -0
  421. data/ext/common/ApplicationPool2/Common.h +87 -0
  422. data/ext/common/ApplicationPool2/ComponentInfo.h +53 -0
  423. data/ext/common/ApplicationPool2/Group.h +648 -0
  424. data/ext/common/ApplicationPool2/Implementation.cpp +580 -0
  425. data/ext/common/ApplicationPool2/Options.h +576 -0
  426. data/ext/common/ApplicationPool2/PipeWatcher.h +61 -0
  427. data/ext/common/ApplicationPool2/Pool.h +1181 -0
  428. data/ext/common/ApplicationPool2/Process.h +425 -0
  429. data/ext/common/ApplicationPool2/README.md +96 -0
  430. data/ext/common/ApplicationPool2/Session.h +158 -0
  431. data/ext/common/ApplicationPool2/Socket.h +246 -0
  432. data/ext/common/ApplicationPool2/Spawner.h +2212 -0
  433. data/ext/common/ApplicationPool2/SuperGroup.h +749 -0
  434. data/ext/common/BackgroundEventLoop.cpp +129 -0
  435. data/ext/common/BackgroundEventLoop.h +61 -0
  436. data/ext/common/Constants.h +3 -1
  437. data/ext/common/EventedBufferedInput.h +331 -0
  438. data/ext/common/EventedMessageServer.h +17 -34
  439. data/ext/common/EventedServer.h +2 -2
  440. data/ext/common/Exceptions.h +71 -19
  441. data/ext/common/FileDescriptor.h +8 -6
  442. data/ext/common/HttpConstants.h +167 -0
  443. data/ext/common/IniFile.h +24 -0
  444. data/ext/common/Logging.h +62 -849
  445. data/ext/common/MessageReadersWriters.h +19 -0
  446. data/ext/common/MessageServer.h +11 -14
  447. data/ext/common/MultiLibeio.cpp +198 -0
  448. data/ext/common/MultiLibeio.h +67 -0
  449. data/ext/common/ResourceLocator.h +24 -41
  450. data/ext/common/SafeLibev.h +186 -14
  451. data/ext/common/StaticString.h +23 -3
  452. data/ext/common/UnionStation.h +972 -0
  453. data/ext/common/Utils.cpp +168 -24
  454. data/ext/common/Utils.h +25 -3
  455. data/ext/common/Utils/CachedFileStat.hpp +4 -3
  456. data/ext/common/Utils/FileChangeChecker.h +2 -2
  457. data/ext/common/Utils/HashMap.h +50 -0
  458. data/ext/common/Utils/IOUtils.cpp +229 -68
  459. data/ext/common/Utils/IOUtils.h +134 -3
  460. data/ext/common/Utils/Lock.h +28 -0
  461. data/ext/common/Utils/MemoryBarrier.h +52 -0
  462. data/ext/common/Utils/PriorityQueue.h +54 -0
  463. data/ext/common/Utils/ProcessMetricsCollector.h +9 -11
  464. data/ext/common/Utils/ScopeGuard.h +50 -1
  465. data/ext/common/Utils/SmallVector.h +653 -0
  466. data/ext/common/Utils/StrIntUtils.cpp +26 -2
  467. data/ext/common/Utils/StrIntUtils.h +18 -2
  468. data/ext/common/Utils/StringMap.h +125 -8
  469. data/ext/common/Utils/Template.h +212 -0
  470. data/ext/common/Utils/fib.c +699 -0
  471. data/ext/common/Utils/fib.h +101 -0
  472. data/ext/common/Utils/fibpriv.h +67 -0
  473. data/ext/common/Utils/json-forwards.h +249 -0
  474. data/ext/common/Utils/json.h +1855 -0
  475. data/ext/common/Utils/jsoncpp.cpp +4230 -0
  476. data/ext/common/agents/Base.cpp +1126 -0
  477. data/ext/common/{AgentBase.h → agents/Base.h} +5 -1
  478. data/ext/common/agents/EnvPrinter.c +16 -0
  479. data/ext/common/agents/HelperAgent/AgentOptions.h +81 -0
  480. data/ext/common/{HelperAgent → agents/HelperAgent}/BacktracesServer.h +3 -2
  481. data/ext/common/agents/HelperAgent/FileBackedPipe.h +732 -0
  482. data/ext/common/agents/HelperAgent/Main.cpp +497 -0
  483. data/ext/common/agents/HelperAgent/RequestHandler.cpp +283 -0
  484. data/ext/common/agents/HelperAgent/RequestHandler.h +2139 -0
  485. data/ext/common/agents/HelperAgent/ScgiRequestParser.h +451 -0
  486. data/ext/common/{LoggingAgent → agents/LoggingAgent}/DataStoreId.h +1 -1
  487. data/ext/common/{LoggingAgent → agents/LoggingAgent}/FilterSupport.cpp +1 -1
  488. data/ext/common/{LoggingAgent → agents/LoggingAgent}/FilterSupport.h +0 -0
  489. data/ext/common/{LoggingAgent → agents/LoggingAgent}/LoggingServer.h +18 -16
  490. data/ext/common/{LoggingAgent → agents/LoggingAgent}/Main.cpp +15 -13
  491. data/ext/common/{LoggingAgent → agents/LoggingAgent}/RemoteSender.h +6 -6
  492. data/ext/common/agents/SpawnPreparer.cpp +127 -0
  493. data/ext/common/{Watchdog.cpp → agents/Watchdog/Main.cpp} +63 -25
  494. data/ext/libeio/Changes +72 -0
  495. data/ext/{google/COPYING → libeio/LICENSE} +17 -9
  496. data/ext/libeio/Makefile.am +15 -0
  497. data/ext/libeio/Makefile.in +694 -0
  498. data/ext/libeio/aclocal.m4 +9418 -0
  499. data/ext/libeio/autogen.sh +3 -0
  500. data/ext/libeio/config.guess +1501 -0
  501. data/ext/libeio/config.h.in +136 -0
  502. data/ext/libeio/config.sub +1705 -0
  503. data/ext/libeio/configure +14822 -0
  504. data/ext/libeio/configure.ac +22 -0
  505. data/ext/libeio/demo.c +194 -0
  506. data/ext/libeio/ecb.h +457 -0
  507. data/ext/libeio/eio.c +2816 -0
  508. data/ext/libeio/eio.h +411 -0
  509. data/ext/libeio/install-sh +520 -0
  510. data/ext/libeio/libeio.m4 +211 -0
  511. data/ext/libeio/ltmain.sh +9636 -0
  512. data/ext/libeio/missing +376 -0
  513. data/ext/libeio/xthread.h +166 -0
  514. data/ext/libev/Changes +125 -7
  515. data/ext/libev/Makefile.am +5 -3
  516. data/ext/libev/Makefile.in +209 -120
  517. data/ext/libev/aclocal.m4 +6027 -4619
  518. data/ext/libev/autogen.sh +1 -4
  519. data/ext/libev/config.h.in +11 -7
  520. data/ext/libev/configure +7312 -14993
  521. data/ext/libev/configure.ac +12 -5
  522. data/ext/libev/depcomp +630 -0
  523. data/ext/libev/ev++.h +48 -32
  524. data/ext/libev/ev.c +1173 -391
  525. data/ext/libev/ev.h +315 -181
  526. data/ext/libev/ev_epoll.c +66 -15
  527. data/ext/libev/ev_kqueue.c +20 -18
  528. data/ext/libev/ev_poll.c +27 -23
  529. data/ext/libev/ev_port.c +39 -19
  530. data/ext/libev/ev_select.c +23 -17
  531. data/ext/libev/ev_vars.h +25 -8
  532. data/ext/libev/ev_win32.c +6 -6
  533. data/ext/libev/ev_wrap.h +22 -2
  534. data/ext/libev/event.c +18 -17
  535. data/ext/libev/event.h +16 -4
  536. data/ext/libev/libev.m4 +10 -6
  537. data/ext/libev/ltmain.sh +7353 -5811
  538. data/ext/nginx/Configuration.c +74 -42
  539. data/ext/nginx/Configuration.h +3 -5
  540. data/ext/nginx/ContentHandler.c +26 -83
  541. data/ext/nginx/ContentHandler.h +1 -1
  542. data/ext/nginx/config +13 -9
  543. data/ext/nginx/ngx_http_passenger_module.c +3 -7
  544. data/ext/oxt/detail/backtrace_enabled.hpp +5 -102
  545. data/ext/oxt/detail/context.hpp +90 -0
  546. data/ext/oxt/detail/spin_lock_darwin.hpp +4 -0
  547. data/ext/oxt/detail/spin_lock_gcc_x86.hpp +4 -0
  548. data/ext/oxt/detail/spin_lock_pthreads.hpp +14 -0
  549. data/ext/oxt/detail/tracable_exception_enabled.hpp +2 -2
  550. data/ext/oxt/dynamic_thread_group.hpp +27 -1
  551. data/ext/oxt/implementation.cpp +415 -0
  552. data/ext/oxt/{thread.cpp → initialize.hpp} +13 -6
  553. data/ext/oxt/macros.hpp +32 -1
  554. data/ext/oxt/spin_lock.hpp +6 -11
  555. data/ext/oxt/system_calls.cpp +204 -16
  556. data/ext/oxt/system_calls.hpp +85 -45
  557. data/ext/oxt/thread.hpp +13 -117
  558. data/ext/ruby/passenger_native_support.c +82 -237
  559. data/helper-scripts/backtrace-sanitizer.rb +114 -0
  560. data/helper-scripts/classic-rails-loader.rb +135 -0
  561. data/helper-scripts/classic-rails-preloader.rb +161 -0
  562. data/helper-scripts/node-loader.js +314 -0
  563. data/helper-scripts/rack-loader.rb +104 -0
  564. data/helper-scripts/rack-preloader.rb +132 -0
  565. data/helper-scripts/wsgi-loader.py +231 -0
  566. data/helper-scripts/wsgi-preloader.py +1 -0
  567. data/lib/phusion_passenger.rb +159 -61
  568. data/lib/phusion_passenger/abstract_installer.rb +182 -87
  569. data/lib/phusion_passenger/admin_tools/server_instance.rb +25 -19
  570. data/lib/phusion_passenger/analytics_logger.rb +5 -4
  571. data/lib/phusion_passenger/classic_rails/{request_handler.rb → thread_handler_extension.rb} +4 -40
  572. data/lib/phusion_passenger/classic_rails_extensions/init.rb +5 -3
  573. data/lib/phusion_passenger/common_library.rb +441 -0
  574. data/lib/phusion_passenger/console_text_template.rb +4 -16
  575. data/lib/phusion_passenger/constants.rb +1 -8
  576. data/lib/phusion_passenger/debug_logging.rb +5 -2
  577. data/lib/phusion_passenger/dependencies.rb +51 -13
  578. data/lib/phusion_passenger/loader_shared_helpers.rb +318 -0
  579. data/lib/phusion_passenger/message_channel.rb +3 -47
  580. data/lib/phusion_passenger/message_client.rb +2 -2
  581. data/lib/phusion_passenger/native_support.rb +36 -15
  582. data/lib/phusion_passenger/packaging.rb +8 -11
  583. data/lib/phusion_passenger/platform_info.rb +25 -17
  584. data/lib/phusion_passenger/platform_info/apache.rb +10 -7
  585. data/lib/phusion_passenger/platform_info/binary_compatibility.rb +10 -30
  586. data/lib/phusion_passenger/platform_info/compiler.rb +93 -34
  587. data/lib/phusion_passenger/platform_info/ruby.rb +37 -97
  588. data/lib/phusion_passenger/preloader_shared_helpers.rb +121 -0
  589. data/lib/phusion_passenger/public_api.rb +1 -4
  590. data/lib/phusion_passenger/rack/{request_handler.rb → thread_handler_extension.rb} +14 -63
  591. data/lib/phusion_passenger/rails3_extensions/init.rb +9 -8
  592. data/lib/phusion_passenger/request_handler.rb +500 -0
  593. data/lib/phusion_passenger/request_handler/thread_handler.rb +360 -0
  594. data/lib/phusion_passenger/ruby_core_enhancements.rb +142 -0
  595. data/lib/phusion_passenger/standalone/command.rb +36 -15
  596. data/lib/phusion_passenger/standalone/package_runtime_command.rb +16 -8
  597. data/lib/phusion_passenger/standalone/runtime_installer.rb +169 -72
  598. data/lib/phusion_passenger/standalone/start_command.rb +44 -39
  599. data/lib/phusion_passenger/standalone/utils.rb +5 -5
  600. data/lib/phusion_passenger/utils.rb +35 -914
  601. data/lib/phusion_passenger/utils/ansi_colors.rb +59 -0
  602. data/lib/phusion_passenger/utils/file_system_watcher.rb +1 -1
  603. data/lib/phusion_passenger/utils/robust_interruption.rb +134 -0
  604. data/lib/phusion_passenger/utils/tee_input.rb +174 -0
  605. data/lib/phusion_passenger/utils/tmpio.rb +33 -0
  606. data/lib/phusion_passenger/utils/unseekable_socket.rb +6 -0
  607. data/resources/mime.types +5 -1
  608. data/{lib/phusion_passenger/templates → resources}/standalone_default_root/index.html +0 -0
  609. data/{lib/phusion_passenger → resources}/templates/apache2/apache_must_be_compiled_with_compatible_mpm.txt.erb +0 -0
  610. data/{lib/phusion_passenger → resources}/templates/apache2/config_snippets.txt.erb +0 -0
  611. data/{lib/phusion_passenger → resources}/templates/apache2/deployment_example.txt.erb +0 -0
  612. data/{lib/phusion_passenger → resources}/templates/apache2/no_write_permission_to_passenger_root.txt.erb +0 -0
  613. data/{lib/phusion_passenger → resources}/templates/apache2/possible_solutions_for_compilation_and_installation_problems.txt.erb +0 -0
  614. data/{lib/phusion_passenger → resources}/templates/apache2/run_installer_as_root.txt.erb +0 -0
  615. data/{lib/phusion_passenger → resources}/templates/apache2/welcome.txt.erb +0 -0
  616. data/{lib/phusion_passenger → resources}/templates/error_layout.css +6 -0
  617. data/resources/templates/error_layout.html.template +89 -0
  618. data/resources/templates/general_error.html.template +1 -0
  619. data/resources/templates/general_error_with_html.html.template +1 -0
  620. data/{lib/phusion_passenger → resources}/templates/nginx/ask_for_extra_configure_flags.txt.erb +0 -0
  621. data/{lib/phusion_passenger → resources}/templates/nginx/cannot_write_to_dir.txt.erb +0 -0
  622. data/{lib/phusion_passenger → resources}/templates/nginx/config_snippets.txt.erb +0 -0
  623. data/{lib/phusion_passenger → resources}/templates/nginx/config_snippets_inserted.txt.erb +0 -0
  624. data/{lib/phusion_passenger → resources}/templates/nginx/confirm_extra_configure_flags.txt.erb +0 -0
  625. data/{lib/phusion_passenger → resources}/templates/nginx/deployment_example.txt.erb +0 -0
  626. data/resources/templates/nginx/not_available_when_natively_packaged.txt.erb +8 -0
  627. data/{lib/phusion_passenger → resources}/templates/nginx/pcre_could_not_be_downloaded.txt.erb +0 -0
  628. data/{lib/phusion_passenger → resources}/templates/nginx/pcre_could_not_be_extracted.txt.erb +0 -0
  629. data/{lib/phusion_passenger → resources}/templates/nginx/possible_solutions_for_compilation_and_installation_problems.txt.erb +0 -0
  630. data/{lib/phusion_passenger → resources}/templates/nginx/possible_solutions_for_download_and_extraction_problems.txt.erb +0 -0
  631. data/{lib/phusion_passenger → resources}/templates/nginx/query_download_and_install.txt.erb +0 -0
  632. data/{lib/phusion_passenger → resources}/templates/nginx/run_installer_as_root.txt.erb +0 -0
  633. data/{lib/phusion_passenger → resources}/templates/nginx/welcome.txt.erb +0 -0
  634. data/{lib/phusion_passenger → resources}/templates/standalone/cannot_write_to_dir.txt.erb +0 -0
  635. data/{lib/phusion_passenger → resources}/templates/standalone/config.erb +26 -5
  636. data/{lib/phusion_passenger → resources}/templates/standalone/possible_solutions_for_download_and_extraction_problems.txt.erb +0 -0
  637. data/{lib/phusion_passenger → resources}/templates/standalone/run_installer_as_root.txt.erb +0 -0
  638. data/{lib/phusion_passenger → resources}/templates/standalone/welcome.txt.erb +0 -0
  639. data/resources/templates/undisclosed_error.html.template +25 -0
  640. data/test/config.json.example +42 -0
  641. data/test/cxx/ApplicationPool2/DirectSpawnerTest.cpp +86 -0
  642. data/test/cxx/ApplicationPool2/OptionsTest.cpp +44 -0
  643. data/test/cxx/ApplicationPool2/PoolTest.cpp +1234 -0
  644. data/test/cxx/ApplicationPool2/ProcessTest.cpp +131 -0
  645. data/test/cxx/ApplicationPool2/SmartSpawnerTest.cpp +229 -0
  646. data/test/cxx/ApplicationPool2/SpawnerTestCases.cpp +744 -0
  647. data/test/cxx/BufferedIOTest.cpp +7 -7
  648. data/test/cxx/CxxTestMain.cpp +65 -2
  649. data/test/cxx/FileBackedPipeTest.cpp +626 -0
  650. data/test/cxx/FileChangeCheckerTest.cpp +20 -18
  651. data/test/cxx/FilterSupportTest.cpp +5 -5
  652. data/test/cxx/IOUtilsTest.cpp +11 -4
  653. data/test/cxx/MessageReadersWritersTest.cpp +1 -1
  654. data/test/cxx/MessageServerTest.cpp +31 -30
  655. data/test/cxx/RequestHandlerTest.cpp +777 -0
  656. data/test/cxx/ScgiRequestParserTest.cpp +36 -16
  657. data/test/cxx/ServerInstanceDirTest.cpp +1 -1
  658. data/test/cxx/StringMapTest.cpp +61 -0
  659. data/test/cxx/TemplateTest.cpp +118 -0
  660. data/test/cxx/TestSupport.cpp +25 -68
  661. data/test/cxx/TestSupport.h +81 -41
  662. data/test/cxx/{LoggingTest.cpp → UnionStationTest.cpp} +79 -74
  663. data/test/cxx/UtilsTest.cpp +59 -5
  664. data/test/integration_tests/apache2_tests.rb +2 -2
  665. data/test/integration_tests/nginx_tests.rb +1 -1
  666. data/test/integration_tests/spec_helper.rb +7 -5
  667. data/test/oxt/oxt_test_main.cpp +2 -0
  668. data/test/oxt/syscall_interruption_test.cpp +1 -0
  669. data/test/ruby/classic_rails/loader_spec.rb +48 -0
  670. data/test/ruby/classic_rails/preloader_spec.rb +54 -0
  671. data/test/ruby/rack/loader_spec.rb +62 -0
  672. data/test/ruby/rack/preloader_spec.rb +74 -0
  673. data/test/ruby/{abstract_request_handler_spec.rb → request_handler_spec.rb} +31 -68
  674. data/test/ruby/shared/loader_spec.rb +241 -0
  675. data/test/ruby/shared/rails/analytics_logging_extensions_spec.rb +141 -182
  676. data/test/ruby/shared/ruby_loader_spec.rb +55 -0
  677. data/test/ruby/spec_helper.rb +8 -53
  678. data/test/ruby/utils/file_system_watcher_spec.rb +9 -1
  679. data/test/ruby/utils_spec.rb +10 -683
  680. data/test/stub/rack/config.ru +28 -3
  681. data/test/stub/rack/start.rb +47 -0
  682. data/test/stub/{rails_apps/2.3/foobar → rails2.3}/Rakefile +0 -0
  683. data/test/stub/{rails_apps/2.3/foobar → rails2.3}/app/controllers/application_controller.rb +0 -2
  684. data/test/stub/{rails_apps/2.3/foobar → rails2.3}/app/controllers/bar_controller_1.rb +0 -0
  685. data/test/stub/{rails_apps/2.3/foobar → rails2.3}/app/controllers/bar_controller_2.rb +0 -0
  686. data/test/stub/{rails_apps/2.3/foobar → rails2.3}/app/controllers/foo_controller.rb +0 -0
  687. data/test/stub/{rails_apps/2.3/foobar → rails2.3}/app/helpers/application_helper.rb +0 -0
  688. data/test/stub/{rails_apps/2.3/foobar → rails2.3}/config/boot.rb +0 -0
  689. data/test/stub/{rails_apps/2.3/foobar → rails2.3}/config/database.yml +3 -3
  690. data/test/stub/{rails_apps/2.3/foobar → rails2.3}/config/environment.rb +5 -2
  691. data/test/stub/{rails_apps/2.3/foobar → rails2.3}/config/environments/development.rb +0 -0
  692. data/test/stub/{rails_apps/2.3/foobar → rails2.3}/config/environments/production.rb +0 -0
  693. data/test/stub/{rails_apps/2.3/foobar → rails2.3}/config/environments/staging.rb +0 -0
  694. data/test/stub/{rails_apps/2.3/foobar → rails2.3}/config/initializers/inflections.rb +0 -0
  695. data/test/stub/{rails_apps/2.3/foobar → rails2.3}/config/initializers/mime_types.rb +0 -0
  696. data/test/stub/{rails_apps/2.3/foobar → rails2.3}/config/routes.rb +1 -0
  697. data/test/stub/{rails_apps/2.3/foobar → rails2.3}/script/about +0 -0
  698. data/test/stub/{rails_apps/2.3/foobar → rails2.3}/script/console +0 -0
  699. data/test/stub/{rails_apps/2.3/foobar → rails2.3}/script/dbconsole +0 -0
  700. data/test/stub/{rails_apps/2.3/foobar → rails2.3}/script/destroy +0 -0
  701. data/test/stub/{rails_apps/2.3/foobar → rails2.3}/script/generate +0 -0
  702. data/test/stub/{rails_apps/2.3/foobar → rails2.3}/script/performance/benchmarker +0 -0
  703. data/test/stub/{rails_apps/2.3/foobar → rails2.3}/script/performance/profiler +0 -0
  704. data/test/stub/{rails_apps/2.3/foobar → rails2.3}/script/performance/request +0 -0
  705. data/test/stub/{rails_apps/2.3/foobar → rails2.3}/script/plugin +0 -0
  706. data/test/stub/{rails_apps/2.3/foobar → rails2.3}/script/process/inspector +0 -0
  707. data/test/stub/{rails_apps/2.3/foobar → rails2.3}/script/process/reaper +0 -0
  708. data/test/stub/{rails_apps/2.3/foobar → rails2.3}/script/process/spawner +0 -0
  709. data/test/stub/{rails_apps/2.3/foobar → rails2.3}/script/runner +0 -0
  710. data/test/stub/{rails_apps/2.3/foobar → rails2.3}/script/server +0 -0
  711. data/test/stub/{rails_apps/3.0/empty → rails3.0}/Gemfile +0 -0
  712. data/test/stub/rails3.0/Gemfile.lock +80 -0
  713. data/test/stub/{rails_apps/3.0/empty → rails3.0}/Rakefile +0 -0
  714. data/test/stub/{rails_apps/3.0/empty → rails3.0}/app/controllers/application_controller.rb +0 -0
  715. data/test/stub/{rails_apps/3.0/empty → rails3.0}/app/helpers/application_helper.rb +0 -0
  716. data/test/stub/{rails_apps/3.0/empty → rails3.0}/app/views/layouts/application.html.erb +0 -0
  717. data/test/stub/{rails_apps/3.0/empty → rails3.0}/config.ru +0 -0
  718. data/test/stub/{rails_apps/3.0/empty → rails3.0}/config/application.rb +0 -0
  719. data/test/stub/{rails_apps/3.0/empty → rails3.0}/config/boot.rb +0 -0
  720. data/test/stub/{rails_apps/3.0/empty → rails3.0}/config/database.yml +0 -0
  721. data/test/stub/{rails_apps/3.0/empty → rails3.0}/config/environment.rb +0 -0
  722. data/test/stub/{rails_apps/3.0/empty → rails3.0}/config/environments/development.rb +0 -0
  723. data/test/stub/{rails_apps/3.0/empty → rails3.0}/config/environments/production.rb +0 -0
  724. data/test/stub/{rails_apps/3.0/empty → rails3.0}/config/environments/test.rb +0 -0
  725. data/test/stub/{rails_apps/3.0/empty → rails3.0}/config/initializers/backtrace_silencers.rb +0 -0
  726. data/test/stub/{rails_apps/3.0/empty → rails3.0}/config/initializers/inflections.rb +0 -0
  727. data/test/stub/{rails_apps/3.0/empty → rails3.0}/config/initializers/mime_types.rb +0 -0
  728. data/test/stub/{rails_apps/3.0/empty → rails3.0}/config/initializers/passenger.rb +0 -0
  729. data/test/stub/{rails_apps/3.0/empty → rails3.0}/config/initializers/secret_token.rb +0 -0
  730. data/test/stub/{rails_apps/3.0/empty → rails3.0}/config/initializers/session_store.rb +0 -0
  731. data/test/stub/{rails_apps/3.0/empty → rails3.0}/config/locales/en.yml +0 -0
  732. data/test/stub/{rails_apps/3.0/empty → rails3.0}/config/routes.rb +0 -0
  733. data/test/stub/{rails_apps/3.0/empty → rails3.0}/db/seeds.rb +0 -0
  734. data/test/stub/{rails_apps/3.0/empty → rails3.0}/doc/README_FOR_APP +0 -0
  735. data/test/stub/{rails_apps/3.0/empty → rails3.0}/public/404.html +0 -0
  736. data/test/stub/{rails_apps/3.0/empty → rails3.0}/public/422.html +0 -0
  737. data/test/stub/{rails_apps/3.0/empty → rails3.0}/public/500.html +0 -0
  738. data/test/stub/{rails_apps/3.0/empty → rails3.0}/public/favicon.ico +0 -0
  739. data/test/stub/{rails_apps/3.0/empty → rails3.0}/public/index.html +0 -0
  740. data/test/stub/{rails_apps/3.0/empty → rails3.0}/public/robots.txt +0 -0
  741. data/test/stub/{rails_apps/3.0/empty → rails3.0}/script/rails +0 -0
  742. data/test/stub/{rails_apps/3.0/empty → rails3.0}/test/performance/browsing_test.rb +0 -0
  743. data/test/stub/{rails_apps/3.0/empty → rails3.0}/test/test_helper.rb +0 -0
  744. data/test/stub/start_error.pl +24 -0
  745. data/test/stub/wsgi/passenger_wsgi.py +71 -3
  746. data/test/support/apache2_controller.rb +2 -2
  747. data/test/support/placebo-preloader.rb +88 -0
  748. data/test/support/test_helper.rb +1 -14
  749. data/test/tut/tut.h +11 -4
  750. metadata +590 -326
  751. data.tar.gz.asc +0 -12
  752. data/PACKAGING.TXT +0 -25
  753. data/build/config.rb +0 -46
  754. data/ext/apache2/HelperAgent.cpp +0 -364
  755. data/ext/boost/call_traits.hpp +0 -24
  756. data/ext/boost/detail/call_traits.hpp +0 -164
  757. data/ext/common/AbstractSpawnManager.h +0 -110
  758. data/ext/common/AgentBase.cpp +0 -432
  759. data/ext/common/ApplicationPool/Client.h +0 -788
  760. data/ext/common/ApplicationPool/Interface.h +0 -295
  761. data/ext/common/ApplicationPool/Pool.h +0 -1327
  762. data/ext/common/ApplicationPool/Server.h +0 -479
  763. data/ext/common/MessageChannel.h +0 -494
  764. data/ext/common/PoolOptions.h +0 -518
  765. data/ext/common/Process.h +0 -253
  766. data/ext/common/Session.h +0 -436
  767. data/ext/common/SpawnManager.h +0 -611
  768. data/ext/google/ChangeLog +0 -167
  769. data/ext/google/dense_hash_map +0 -310
  770. data/ext/google/dense_hash_set +0 -287
  771. data/ext/google/sparse_hash_map +0 -294
  772. data/ext/google/sparse_hash_set +0 -275
  773. data/ext/google/sparsehash/densehashtable.h +0 -1062
  774. data/ext/google/sparsehash/sparseconfig.h +0 -55
  775. data/ext/google/sparsehash/sparsehashtable.h +0 -1015
  776. data/ext/google/sparsetable +0 -1468
  777. data/ext/google/type_traits.h +0 -250
  778. data/ext/nginx/HelperAgent.cpp +0 -1355
  779. data/ext/nginx/ScgiRequestParser.h +0 -375
  780. data/ext/oxt/backtrace.cpp +0 -185
  781. data/ext/oxt/tracable_exception.cpp +0 -89
  782. data/helper-scripts/passenger-spawn-server +0 -106
  783. data/lib/phusion_passenger/abstract_request_handler.rb +0 -766
  784. data/lib/phusion_passenger/abstract_server.rb +0 -372
  785. data/lib/phusion_passenger/abstract_server_collection.rb +0 -335
  786. data/lib/phusion_passenger/app_process.rb +0 -174
  787. data/lib/phusion_passenger/classic_rails/application_spawner.rb +0 -344
  788. data/lib/phusion_passenger/classic_rails/framework_spawner.rb +0 -311
  789. data/lib/phusion_passenger/exceptions.rb +0 -103
  790. data/lib/phusion_passenger/html_template.rb +0 -107
  791. data/lib/phusion_passenger/rack/application_spawner.rb +0 -231
  792. data/lib/phusion_passenger/spawn_manager.rb +0 -359
  793. data/lib/phusion_passenger/templates/app_exited_during_initialization.html.erb +0 -38
  794. data/lib/phusion_passenger/templates/app_init_error.html.erb +0 -64
  795. data/lib/phusion_passenger/templates/database_error.html.erb +0 -66
  796. data/lib/phusion_passenger/templates/error_layout.html.erb +0 -39
  797. data/lib/phusion_passenger/templates/framework_init_error.html.erb +0 -39
  798. data/lib/phusion_passenger/templates/general_error.html.erb +0 -22
  799. data/lib/phusion_passenger/templates/load_error.html.erb +0 -46
  800. data/lib/phusion_passenger/templates/version_not_found.html.erb +0 -34
  801. data/lib/phusion_passenger/utils/rewindable_input.rb +0 -125
  802. data/lib/phusion_passenger/wsgi/application_spawner.rb +0 -108
  803. data/test/config.yml.example +0 -41
  804. data/test/cxx/ApplicationPool_PoolTest.cpp +0 -33
  805. data/test/cxx/ApplicationPool_PoolTestCases.cpp +0 -1029
  806. data/test/cxx/ApplicationPool_ServerTest.cpp +0 -308
  807. data/test/cxx/ApplicationPool_Server_PoolTest.cpp +0 -80
  808. data/test/cxx/MessageChannelTest.cpp +0 -557
  809. data/test/cxx/PoolOptionsTest.cpp +0 -116
  810. data/test/cxx/SpawnManagerTest.cpp +0 -161
  811. data/test/ruby/abstract_server_collection_spec.rb +0 -247
  812. data/test/ruby/abstract_server_spec.rb +0 -61
  813. data/test/ruby/app_process_spec.rb +0 -43
  814. data/test/ruby/classic_rails/application_spawner_spec.rb +0 -89
  815. data/test/ruby/classic_rails/framework_spawner_spec.rb +0 -92
  816. data/test/ruby/rack/application_spawner_spec.rb +0 -116
  817. data/test/ruby/shared/abstract_server_spec.rb +0 -23
  818. data/test/ruby/shared/spawners/classic_rails/framework_spawner_spec.rb +0 -38
  819. data/test/ruby/shared/spawners/classic_rails/lack_of_rails_gem_version_spec.rb +0 -19
  820. data/test/ruby/shared/spawners/classic_rails/spawner_spec.rb +0 -15
  821. data/test/ruby/shared/spawners/non_preloading_spawner_spec.rb +0 -27
  822. data/test/ruby/shared/spawners/preloading_spawner_spec.rb +0 -29
  823. data/test/ruby/shared/spawners/reload_all_spec.rb +0 -36
  824. data/test/ruby/shared/spawners/reload_single_spec.rb +0 -52
  825. data/test/ruby/shared/spawners/spawn_server_spec.rb +0 -28
  826. data/test/ruby/shared/spawners/spawner_spec.rb +0 -273
  827. data/test/ruby/shared/utils/pseudo_io_spec.rb +0 -60
  828. data/test/ruby/spawn_manager_spec.rb +0 -134
  829. data/test/ruby/wsgi/application_spawner_spec.rb +0 -50
  830. data/test/stub/message_channel.rb +0 -11
  831. data/test/stub/message_channel_2.rb +0 -12
  832. data/test/stub/message_channel_3.rb +0 -19
  833. data/test/stub/rails_apps/3.0/empty/Gemfile.lock +0 -73
  834. data/test/stub/spawn_server.rb +0 -22
  835. metadata.gz.asc +0 -12
@@ -58,7 +58,7 @@ class DirectoryMapper {
58
58
  public:
59
59
  enum ApplicationType {
60
60
  NONE,
61
- RAILS,
61
+ CLASSIC_RAILS,
62
62
  RACK,
63
63
  WSGI
64
64
  };
@@ -72,7 +72,7 @@ private:
72
72
  const char *baseURI;
73
73
  ApplicationType appType;
74
74
 
75
- inline bool shouldAutoDetectRails() {
75
+ inline bool shouldAutoDetectClassicRails() {
76
76
  return config->autoDetectRails == DirConfig::ENABLED ||
77
77
  config->autoDetectRails == DirConfig::UNSET;
78
78
  }
@@ -149,7 +149,7 @@ public:
149
149
  ) {
150
150
  baseURIKnown = true;
151
151
  baseURI = base.c_str();
152
- appType = RAILS;
152
+ appType = CLASSIC_RAILS;
153
153
  return baseURI;
154
154
  }
155
155
  }
@@ -179,11 +179,11 @@ public:
179
179
  }
180
180
 
181
181
  UPDATE_TRACE_POINT();
182
- if (shouldAutoDetectRails()
182
+ if (shouldAutoDetectClassicRails()
183
183
  && verifyRailsDir(config->getAppRoot(ap_document_root(r)), cstat, throttleRate)) {
184
184
  baseURIKnown = true;
185
185
  baseURI = "/";
186
- appType = RAILS;
186
+ appType = CLASSIC_RAILS;
187
187
  return baseURI;
188
188
  }
189
189
 
@@ -262,8 +262,8 @@ public:
262
262
  getBaseURI();
263
263
  }
264
264
  switch (appType) {
265
- case RAILS:
266
- return "rails";
265
+ case CLASSIC_RAILS:
266
+ return "classic-rails";
267
267
  case RACK:
268
268
  return "rack";
269
269
  case WSGI:
@@ -50,10 +50,10 @@
50
50
  #include "Bucket.h"
51
51
  #include "Configuration.hpp"
52
52
  #include "Utils.h"
53
+ #include "Utils/IOUtils.h"
53
54
  #include "Utils/Timer.h"
54
55
  #include "Logging.h"
55
56
  #include "AgentsStarter.hpp"
56
- #include "ApplicationPool/Client.h"
57
57
  #include "DirectoryMapper.h"
58
58
  #include "Constants.h"
59
59
 
@@ -183,55 +183,11 @@ private:
183
183
  }
184
184
  };
185
185
 
186
- /**
187
- * A StringListCreator which returns a list of environment variable
188
- * names and values, as found in r->subprocess_env.
189
- */
190
- class EnvironmentVariablesStringListCreator: public StringListCreator {
191
- private:
192
- request_rec *r;
193
- mutable StringListPtr result;
194
- public:
195
- EnvironmentVariablesStringListCreator(request_rec *r) {
196
- this->r = r;
197
- }
198
-
199
- virtual const StringListPtr getItems() const {
200
- if (!result) {
201
- const apr_array_header_t *env_arr;
202
- apr_table_entry_t *env_entries;
203
-
204
- result.reset(new StringList());
205
-
206
- // Some standard CGI headers.
207
- result->push_back("SERVER_SOFTWARE");
208
- #ifdef AP_GET_SERVER_VERSION_DEPRECATED
209
- result->push_back(ap_get_server_banner());
210
- #else
211
- result->push_back(ap_get_server_version());
212
- #endif
213
-
214
- // Subprocess environment variables.
215
- env_arr = apr_table_elts(r->subprocess_env);
216
- env_entries = (apr_table_entry_t *) env_arr->elts;
217
- for (int i = 0; i < env_arr->nelts; ++i) {
218
- if (env_entries[i].key != NULL && env_entries[i].val != NULL) {
219
- result->push_back(env_entries[i].key);
220
- result->push_back(env_entries[i].val);
221
- }
222
- }
223
- }
224
- return result;
225
- }
226
- };
227
-
228
186
  enum Threeway { YES, NO, UNKNOWN };
229
187
 
230
- thread_specific_ptr<ApplicationPool::Client> threadSpecificApplicationPool;
231
188
  Threeway m_hasModRewrite, m_hasModDir, m_hasModAutoIndex, m_hasModXsendfile;
232
189
  CachedFileStat cstat;
233
190
  AgentsStarter agentsStarter;
234
- AnalyticsLoggerPtr analyticsLogger;
235
191
 
236
192
  inline DirConfig *getDirConfig(request_rec *r) {
237
193
  return (DirConfig *) ap_get_module_config(r->per_dir_config, &passenger_module);
@@ -263,72 +219,36 @@ private:
263
219
  }
264
220
 
265
221
  /**
266
- * Returns a usable ApplicationPool::Client object.
267
- *
268
- * When using the worker MPM and global queuing, deadlocks can occur, as
269
- * explained by ApplicationPool::Client's overview. This method allows us
270
- * to avoid deadlocks by making sure that each thread gets its own connection
271
- * to the application pool server.
272
- *
273
- * It also checks whether the currently cached ApplicationPool object
274
- * is disconnected (which can happen if an error previously occured).
275
- * If so, it will reconnect to the application pool server.
276
- *
277
- * @throws SystemException
278
- * @throws IOException
279
- * @throws RuntimeException
280
- * @throws SecurityException
222
+ * Connect to the helper agent. If it looks like the helper agent crashed,
223
+ * wait and retry for a short period of time until the helper agent has been
224
+ * restarted.
281
225
  */
282
- ApplicationPool::Client *getApplicationPool() {
226
+ FileDescriptor connectToHelperAgent() {
283
227
  TRACE_POINT();
284
- ApplicationPool::Client *pool = threadSpecificApplicationPool.get();
285
- if (pool == NULL || !pool->connected()) {
286
- UPDATE_TRACE_POINT();
287
- if (pool != NULL) {
288
- P_DEBUG("Reconnecting to ApplicationPool server");
289
- }
290
- auto_ptr<ApplicationPool::Client> pool_ptr(new ApplicationPool::Client);
291
- pool_ptr->connect(agentsStarter.getMessageSocketFilename(),
292
- "_web_server", agentsStarter.getMessageSocketPassword());
293
- pool = pool_ptr.release();
294
- threadSpecificApplicationPool.reset(pool);
295
- }
296
- return pool;
297
- }
298
-
299
- /**
300
- * Get a session from the application pool, similar to how
301
- * ApplicationPool::Interface::get() works. This method also checks whether
302
- * the helper server has crashed. If it did then it will attempt to
303
- * reconnect to the helper server for a small period of time until it's up
304
- * again.
305
- *
306
- * @throws SystemException
307
- * @throws IOException
308
- * @throws RuntimeException
309
- * @throws SecurityExcepion
310
- */
311
- SessionPtr getSession(const PoolOptions &options) {
312
- TRACE_POINT();
313
- ApplicationPool::Client *pool = getApplicationPool();
228
+ FileDescriptor conn;
229
+
314
230
  try {
315
- return pool->get(options);
231
+ conn = connectToUnixServer(agentsStarter.getRequestSocketFilename());
232
+ writeExact(conn, agentsStarter.getRequestSocketPassword());
316
233
  } catch (const SystemException &e) {
317
- if (e.code() == EPIPE) {
234
+ if (e.code() == EPIPE || e.code() == ECONNREFUSED || e.code() == ENOENT) {
318
235
  UPDATE_TRACE_POINT();
236
+ bool connected = false;
319
237
 
320
- // Maybe the helper server crashed. First wait 50 ms.
238
+ // Maybe the helper agent crashed. First wait 50 ms.
321
239
  usleep(50000);
322
240
 
323
- // Then try to reconnect to the helper server for the
241
+ // Then try to reconnect to the helper agent for the
324
242
  // next 5 seconds.
325
243
  time_t deadline = time(NULL) + 5;
326
- while (time(NULL) < deadline) {
244
+ while (!connected && time(NULL) < deadline) {
327
245
  try {
328
- pool = getApplicationPool();
246
+ conn = connectToUnixServer(agentsStarter.getRequestSocketFilename());
247
+ writeExact(conn, agentsStarter.getRequestSocketPassword());
248
+ connected = true;
329
249
  } catch (const SystemException &e) {
330
- if (e.code() == ECONNREFUSED || e.code() == ECONNRESET) {
331
- // Looks like the helper server hasn't been
250
+ if (e.code() == EPIPE || e.code() == ECONNREFUSED || e.code() == ENOENT) {
251
+ // Looks like the helper agent hasn't been
332
252
  // restarted yet. Wait between 20 and 100 ms.
333
253
  usleep(20000 + rand() % 80000);
334
254
  // Don't care about thread-safety of rand()
@@ -338,17 +258,15 @@ private:
338
258
  }
339
259
  }
340
260
 
341
- UPDATE_TRACE_POINT();
342
- if (pool != NULL && pool->connected()) {
343
- return pool->get(options);
344
- } else {
261
+ if (!connected) {
345
262
  UPDATE_TRACE_POINT();
346
- throw IOException("Cannot connect to the helper server");
263
+ throw IOException("Cannot connect to the helper agent");
347
264
  }
348
265
  } else {
349
266
  throw;
350
267
  }
351
268
  }
269
+ return conn;
352
270
  }
353
271
 
354
272
  bool hasModRewrite() {
@@ -584,18 +502,6 @@ private:
584
502
 
585
503
  UPDATE_TRACE_POINT();
586
504
  try {
587
- AnalyticsLogPtr log;
588
- if (config->useUnionStation()) {
589
- log = analyticsLogger->newTransaction(
590
- config->getAppGroupName(appRoot),
591
- "requests",
592
- config->unionStationKey,
593
- config->getUnionStationFilterString());
594
- log->message(string("URI: ") + r->uri);
595
- } else {
596
- log.reset(new AnalyticsLog());
597
- }
598
-
599
505
  /********** Step 2: handle HTTP upload data, if any **********/
600
506
 
601
507
  int httpStatus = ap_setup_client_block(r, REQUEST_CHUNKED_DECHUNK);
@@ -605,7 +511,6 @@ private:
605
511
 
606
512
  this_thread::disable_interruption di;
607
513
  this_thread::disable_syscall_interruption dsi;
608
- SessionPtr session;
609
514
  bool expectingUploadData;
610
515
  string uploadDataMemory;
611
516
  shared_ptr<BufferedUpload> uploadDataFile;
@@ -653,86 +558,49 @@ private:
653
558
  }
654
559
 
655
560
 
656
- /********** Step 3: forwarding the request to a backend
657
- process from the application pool **********/
561
+ /********** Step 3: forwarding the request and request body
562
+ to the HelperAgent **********/
658
563
 
659
- AnalyticsScopeLog requestProcessingScope(log, "request processing");
564
+ vector<StaticString> requestData;
565
+ string headerData;
566
+ unsigned int size;
567
+ char sizeString[16];
568
+ int ret;
660
569
 
661
- try {
662
- AnalyticsScopeLog scope(log, "get from pool");
663
- PoolOptions options(
664
- appRoot,
665
- config->getAppGroupName(appRoot),
666
- mapper.getApplicationTypeString(),
667
- config->getEnvironment(),
668
- config->getSpawnMethodString(),
669
- config->getUser(),
670
- config->getGroup(),
671
- serverConfig.defaultUser,
672
- serverConfig.defaultGroup,
673
- config->frameworkSpawnerTimeout,
674
- config->appSpawnerTimeout,
675
- mapper.getBaseURI(),
676
- config->getMaxRequests(),
677
- config->getMinInstances(),
678
- config->usingGlobalQueue(),
679
- true,
680
- config->getStatThrottleRate(),
681
- config->getRestartDir(),
682
- DEFAULT_BACKEND_ACCOUNT_RIGHTS,
683
- false,
684
- config->useUnionStation(),
685
- log->isNull() ? AnalyticsLogPtr() : log
686
- );
687
- options.environmentVariables = ptr(new EnvironmentVariablesStringListCreator(r));
688
-
689
- session = getSession(options);
690
- P_TRACE(3, "Forwarding " << r->uri << " to PID " << session->getPid());
691
- scope.success();
692
- log->message("Application PID: " + toString(session->getPid()) +
693
- " (GUPID: " + session->getGupid() + ")");
694
- } catch (const SpawnException &e) {
695
- r->status = 500;
696
- if (e.hasErrorPage() && config->showFriendlyErrorPages()) {
697
- ap_set_content_type(r, "text/html; charset=utf-8");
698
- ap_rputs(e.getErrorPage().c_str(), r);
699
- return OK;
700
- } else {
701
- throw;
702
- }
703
- } catch (const BusyException &e) {
704
- return reportBusyException(r);
705
- }
570
+ requestData.reserve(3);
571
+ headerData.reserve(1024 * 2);
572
+ requestData.push_back(StaticString());
573
+ size = constructHeaders(r, config, requestData, mapper, appRoot, headerData);
574
+ requestData.push_back(",");
706
575
 
707
- UPDATE_TRACE_POINT();
708
- AnalyticsScopeLog requestProxyingScope(log, "request proxying");
576
+ ret = snprintf(sizeString, sizeof(sizeString) - 1, "%u:", size);
577
+ sizeString[ret] = '\0';
578
+ requestData[0] = StaticString(sizeString, ret);
709
579
 
710
- {
711
- AnalyticsScopeLog scope(log, "send request headers");
712
- sendHeaders(r, config, session, mapper.getBaseURI(), log, appRoot);
713
- scope.success();
580
+ if (expectingUploadData && uploadDataFile == NULL) {
581
+ requestData.push_back(uploadDataMemory);
714
582
  }
715
- if (expectingUploadData) {
716
- AnalyticsScopeLog scope(log, "send request body");
717
- if (uploadDataFile != NULL) {
718
- sendRequestBody(r, session, uploadDataFile);
719
- uploadDataFile.reset();
720
- } else {
721
- sendRequestBody(r, session, uploadDataMemory);
722
- }
723
- scope.success();
724
- }
725
- try {
726
- session->shutdownWriter();
727
- } catch (const SystemException &e) {
728
- // Ignore ENOTCONN. This error occurs for some people
729
- // for unknown reasons, but it's harmless.
730
- if (e.code() != ENOTCONN) {
731
- throw;
732
- }
583
+
584
+ FileDescriptor conn = connectToHelperAgent();
585
+ gatheredWrite(conn, &requestData[0], requestData.size());
586
+
587
+ if (expectingUploadData && uploadDataFile != NULL) {
588
+ sendRequestBody(conn, uploadDataFile);
589
+ uploadDataFile.reset();
733
590
  }
734
591
 
592
+ do {
593
+ ret = shutdown(conn, SHUT_WR);
594
+ } while (ret == -1 && errno == EINTR);
595
+ if (ret == -1 && errno != ENOTCONN) {
596
+ // FreeBSD has a kernel bug which causes shutdown()
597
+ // to harmlessly return ENOTCONN sometimes. See comment
598
+ // in safelyClose().
599
+ int e = errno;
600
+ throw SystemException("Cannot shutdown(SHUT_WR) HelperAgent connection", e);
601
+ }
735
602
 
603
+
736
604
  /********** Step 4: forwarding the response from the backend
737
605
  process back to the HTTP client **********/
738
606
 
@@ -740,21 +608,14 @@ private:
740
608
  apr_bucket_brigade *bb;
741
609
  apr_bucket *b;
742
610
  PassengerBucketStatePtr bucketState;
743
- pid_t backendPid;
744
611
 
745
612
  /* Setup the bucket brigade. */
746
- bucketState = ptr(new PassengerBucketState());
747
613
  bb = apr_brigade_create(r->connection->pool, r->connection->bucket_alloc);
748
- b = passenger_bucket_create(session, bucketState, r->connection->bucket_alloc, config->getBufferResponse());
749
-
750
- /* The bucket (b) still has a reference to the session, so the reset()
751
- * call here is guaranteed not to throw any exceptions.
752
- */
753
- backendPid = session->getPid();
754
- session.reset();
755
614
 
615
+ bucketState = make_shared<PassengerBucketState>(conn);
616
+ b = passenger_bucket_create(bucketState, r->connection->bucket_alloc, config->getBufferResponse());
756
617
  APR_BRIGADE_INSERT_TAIL(bb, b);
757
-
618
+
758
619
  b = apr_bucket_eos_create(r->connection->bucket_alloc);
759
620
  APR_BRIGADE_INSERT_TAIL(bb, b);
760
621
 
@@ -789,14 +650,14 @@ private:
789
650
  r->status);
790
651
  }
791
652
  apr_table_setn(r->headers_out, "Status", r->status_line);
792
- log->message(string("Status: ") + r->status_line);
793
653
 
794
- bool xsendfile = hasModXsendfile() &&
795
- apr_table_get(r->err_headers_out, "X-Sendfile");
654
+ //bool xsendfile = hasModXsendfile() &&
655
+ // apr_table_get(r->err_headers_out, "X-Sendfile");
796
656
 
797
657
  UPDATE_TRACE_POINT();
798
658
  ap_pass_brigade(r->output_filters, bb);
799
659
 
660
+ /*
800
661
  if (r->connection->aborted) {
801
662
  P_WARN("Either the visitor clicked on the 'Stop' button in the "
802
663
  "web browser, or the visitor's connection has stalled "
@@ -812,14 +673,12 @@ private:
812
673
  P_WARN("Apache stopped forwarding the backend's response, "
813
674
  "even though the HTTP client did not close the "
814
675
  "connection. Is this an Apache bug?");
815
- } else {
816
- requestProxyingScope.success();
817
- requestProcessingScope.success();
818
676
  }
677
+ */
819
678
 
820
679
  return OK;
821
680
  } else if (backendData[0] == '\0') {
822
- if ((long long) timer.elapsed() >= r->server->timeout / 1000) {
681
+ /* if ((long long) timer.elapsed() >= r->server->timeout / 1000) {
823
682
  // Looks like an I/O timeout.
824
683
  P_ERROR("No data received from " <<
825
684
  "the backend application (process " <<
@@ -839,11 +698,11 @@ private:
839
698
  "at all. It is possible that it has crashed; " <<
840
699
  "please check whether there are crashing " <<
841
700
  "bugs in this application.");
842
- }
701
+ } */
843
702
  apr_table_setn(r->err_headers_out, "Status", "500 Internal Server Error");
844
703
  return HTTP_INTERNAL_SERVER_ERROR;
845
704
  } else {
846
- if ((long long) timer.elapsed() >= r->server->timeout / 1000) {
705
+ /* if ((long long) timer.elapsed() >= r->server->timeout / 1000) {
847
706
  // Looks like an I/O timeout.
848
707
  P_ERROR("The backend application (process " <<
849
708
  backendPid << ") hasn't sent a valid " <<
@@ -868,7 +727,7 @@ private:
868
727
  "are crashing problems in your application. " <<
869
728
  "This is the data that it sent: [" <<
870
729
  backendData << "]");
871
- }
730
+ } */
872
731
  apr_table_setn(r->err_headers_out, "Status", "500 Internal Server Error");
873
732
  return HTTP_INTERNAL_SERVER_ERROR;
874
733
  }
@@ -888,10 +747,6 @@ private:
888
747
  P_ERROR("Unexpected error in mod_passenger: " <<
889
748
  e.what() << "\n" << " Backtrace: not available");
890
749
  return HTTP_INTERNAL_SERVER_ERROR;
891
-
892
- } catch (...) {
893
- P_ERROR("An unexpected, unknown error occured in mod_passenger.");
894
- throw;
895
750
  }
896
751
  }
897
752
 
@@ -983,20 +838,29 @@ private:
983
838
  return lookupInTable(r->subprocess_env, name);
984
839
  }
985
840
 
986
- void inline addHeader(apr_table_t *table, const char *name, const char *value) {
841
+ void addHeader(string &headers, const char *name, const char *value) {
987
842
  if (name != NULL && value != NULL) {
988
- apr_table_addn(table, name, value);
843
+ headers.append(name);
844
+ headers.append(1, '\0');
845
+ headers.append(value);
846
+ headers.append(1, '\0');
989
847
  }
990
848
  }
991
849
 
992
- apr_status_t sendHeaders(request_rec *r, DirConfig *config, SessionPtr &session,
993
- const char *baseURI, const AnalyticsLogPtr &log, const string &appRoot)
994
- {
995
- apr_table_t *headers;
996
- headers = apr_table_make(r->pool, 40);
997
- if (headers == NULL) {
998
- return APR_ENOMEM;
850
+ void addHeader(string &headers, const char *name, const StaticString &value) {
851
+ if (name != NULL) {
852
+ headers.append(name);
853
+ headers.append(1, '\0');
854
+ headers.append(value.c_str(), value.size());
855
+ headers.append(1, '\0');
999
856
  }
857
+ }
858
+
859
+ unsigned int constructHeaders(request_rec *r, DirConfig *config,
860
+ vector<StaticString> &requestData, DirectoryMapper &mapper, const string &appRoot,
861
+ string &output)
862
+ {
863
+ const char *baseURI = mapper.getBaseURI();
1000
864
 
1001
865
  /*
1002
866
  * Apache unescapes URI's before passing them to Phusion Passenger,
@@ -1012,28 +876,28 @@ private:
1012
876
 
1013
877
  // Set standard CGI variables.
1014
878
  #ifdef AP_GET_SERVER_VERSION_DEPRECATED
1015
- addHeader(headers, "SERVER_SOFTWARE", ap_get_server_banner());
879
+ addHeader(output, "SERVER_SOFTWARE", ap_get_server_banner());
1016
880
  #else
1017
- addHeader(headers, "SERVER_SOFTWARE", ap_get_server_version());
881
+ addHeader(output, "SERVER_SOFTWARE", ap_get_server_version());
1018
882
  #endif
1019
- addHeader(headers, "SERVER_PROTOCOL", r->protocol);
1020
- addHeader(headers, "SERVER_NAME", ap_get_server_name(r));
1021
- addHeader(headers, "SERVER_ADMIN", r->server->server_admin);
1022
- addHeader(headers, "SERVER_ADDR", r->connection->local_ip);
1023
- addHeader(headers, "SERVER_PORT", apr_psprintf(r->pool, "%u", ap_get_server_port(r)));
883
+ addHeader(output, "SERVER_PROTOCOL", r->protocol);
884
+ addHeader(output, "SERVER_NAME", ap_get_server_name(r));
885
+ addHeader(output, "SERVER_ADMIN", r->server->server_admin);
886
+ addHeader(output, "SERVER_ADDR", r->connection->local_ip);
887
+ addHeader(output, "SERVER_PORT", apr_psprintf(r->pool, "%u", ap_get_server_port(r)));
1024
888
  #if HTTP_VERSION(AP_SERVER_MAJORVERSION_NUMBER, AP_SERVER_MINORVERSION_NUMBER) >= 2004
1025
- addHeader(headers, "REMOTE_ADDR", r->connection->client_ip);
1026
- addHeader(headers, "REMOTE_PORT", apr_psprintf(r->pool, "%d", r->connection->client_addr->port));
889
+ addHeader(output, "REMOTE_ADDR", r->connection->client_ip);
890
+ addHeader(output, "REMOTE_PORT", apr_psprintf(r->pool, "%d", r->connection->client_addr->port));
1027
891
  #else
1028
- addHeader(headers, "REMOTE_ADDR", r->connection->remote_ip);
1029
- addHeader(headers, "REMOTE_PORT", apr_psprintf(r->pool, "%d", r->connection->remote_addr->port));
892
+ addHeader(output, "REMOTE_ADDR", r->connection->remote_ip);
893
+ addHeader(output, "REMOTE_PORT", apr_psprintf(r->pool, "%d", r->connection->remote_addr->port));
1030
894
  #endif
1031
- addHeader(headers, "REMOTE_USER", r->user);
1032
- addHeader(headers, "REQUEST_METHOD", r->method);
1033
- addHeader(headers, "QUERY_STRING", r->args ? r->args : "");
1034
- addHeader(headers, "HTTPS", lookupEnv(r, "HTTPS"));
1035
- addHeader(headers, "CONTENT_TYPE", lookupHeader(r, "Content-type"));
1036
- addHeader(headers, "DOCUMENT_ROOT", ap_document_root(r));
895
+ addHeader(output, "REMOTE_USER", r->user);
896
+ addHeader(output, "REQUEST_METHOD", r->method);
897
+ addHeader(output, "QUERY_STRING", r->args ? r->args : "");
898
+ addHeader(output, "HTTPS", lookupEnv(r, "HTTPS"));
899
+ addHeader(output, "CONTENT_TYPE", lookupHeader(r, "Content-type"));
900
+ addHeader(output, "DOCUMENT_ROOT", ap_document_root(r));
1037
901
 
1038
902
  if (config->allowsEncodedSlashes()) {
1039
903
  /*
@@ -1045,7 +909,7 @@ private:
1045
909
  * http://code.google.com/p/phusion-passenger/issues/detail?id=113
1046
910
  * http://code.google.com/p/phusion-passenger/issues/detail?id=230
1047
911
  */
1048
- addHeader(headers, "REQUEST_URI", r->unparsed_uri);
912
+ addHeader(output, "REQUEST_URI", r->unparsed_uri);
1049
913
  } else {
1050
914
  const char *request_uri;
1051
915
  if (r->args != NULL) {
@@ -1053,15 +917,15 @@ private:
1053
917
  } else {
1054
918
  request_uri = escapedUri;
1055
919
  }
1056
- addHeader(headers, "REQUEST_URI", request_uri);
920
+ addHeader(output, "REQUEST_URI", request_uri);
1057
921
  }
1058
922
 
1059
923
  if (strcmp(baseURI, "/") == 0) {
1060
- addHeader(headers, "SCRIPT_NAME", "");
1061
- addHeader(headers, "PATH_INFO", escapedUri);
924
+ addHeader(output, "SCRIPT_NAME", "");
925
+ addHeader(output, "PATH_INFO", escapedUri);
1062
926
  } else {
1063
- addHeader(headers, "SCRIPT_NAME", baseURI);
1064
- addHeader(headers, "PATH_INFO", escapedUri + strlen(baseURI));
927
+ addHeader(output, "SCRIPT_NAME", baseURI);
928
+ addHeader(output, "PATH_INFO", escapedUri + strlen(baseURI));
1065
929
  }
1066
930
 
1067
931
  // Set HTTP headers.
@@ -1073,7 +937,7 @@ private:
1073
937
  hdrs = (apr_table_entry_t *) hdrs_arr->elts;
1074
938
  for (i = 0; i < hdrs_arr->nelts; ++i) {
1075
939
  if (hdrs[i].key) {
1076
- addHeader(headers, httpToEnv(r->pool, hdrs[i].key), hdrs[i].val);
940
+ addHeader(output, httpToEnv(r->pool, hdrs[i].key), hdrs[i].val);
1077
941
  }
1078
942
  }
1079
943
 
@@ -1084,65 +948,46 @@ private:
1084
948
  env_arr = apr_table_elts(r->subprocess_env);
1085
949
  env = (apr_table_entry_t*) env_arr->elts;
1086
950
  for (i = 0; i < env_arr->nelts; ++i) {
1087
- addHeader(headers, env[i].key, env[i].val);
1088
- }
1089
-
1090
- if (!log->isNull()) {
1091
- addHeader(headers, "PASSENGER_GROUP_NAME",
1092
- config->getAppGroupName(appRoot).c_str());
1093
- addHeader(headers, "PASSENGER_TXN_ID", log->getTxnId().c_str());
1094
- addHeader(headers, "PASSENGER_UNION_STATION_KEY", config->unionStationKey.c_str());
951
+ addHeader(output, env[i].key, env[i].val);
1095
952
  }
1096
953
 
1097
- // Now send the headers.
1098
- string buffer;
1099
-
1100
- hdrs_arr = apr_table_elts(headers);
1101
- hdrs = (apr_table_entry_t*) hdrs_arr->elts;
1102
- buffer.reserve(1024 * 4);
1103
- for (i = 0; i < hdrs_arr->nelts; ++i) {
1104
- buffer.append(hdrs[i].key);
1105
- buffer.append(1, '\0');
1106
- buffer.append(hdrs[i].val);
1107
- buffer.append(1, '\0');
954
+ // Phusion Passenger options.
955
+ addHeader(output, "PASSENGER_STATUS_LINE", "false");
956
+ addHeader(output, "PASSENGER_APP_ROOT", appRoot);
957
+ addHeader(output, "PASSENGER_APP_GROUP_NAME", config->getAppGroupName(appRoot));
958
+ addHeader(output, "PASSENGER_RUBY", config->ruby);
959
+ addHeader(output, "PASSENGER_ENV", config->getEnvironment());
960
+ addHeader(output, "PASSENGER_SPAWN_METHOD", config->getSpawnMethodString());
961
+ addHeader(output, "PASSENGER_USER", config->getUser());
962
+ addHeader(output, "PASSENGER_GROUP", config->getGroup());
963
+ addHeader(output, "PASSENGER_APP_TYPE", mapper.getApplicationTypeString());
964
+ addHeader(output, "PASSENGER_MIN_INSTANCES",
965
+ apr_psprintf(r->pool, "%ld", config->getMinInstances()));
966
+ addHeader(output, "PASSENGER_MAX_PRELOADER_IDLE_TIME",
967
+ apr_psprintf(r->pool, "%ld", config->maxPreloaderIdleTime));
968
+ addHeader(output, "PASSENGER_DEBUGGER", "false");
969
+ addHeader(output, "PASSENGER_SHOW_VERSION_IN_HEADER", "true");
970
+ addHeader(output, "PASSENGER_MAX_REQUESTS",
971
+ apr_psprintf(r->pool, "%ld", config->getMaxRequests()));
972
+ addHeader(output, "PASSENGER_STAT_THROTTLE_RATE",
973
+ apr_psprintf(r->pool, "%ld", config->getStatThrottleRate()));
974
+ addHeader(output, "PASSENGER_RESTART_DIR", config->getRestartDir());
975
+ addHeader(output, "PASSENGER_FRIENDLY_ERROR_PAGES",
976
+ config->showFriendlyErrorPages() ? "true" : "false");
977
+ if (config->useUnionStation() && !config->unionStationKey.empty()) {
978
+ addHeader(output, "UNION_STATION_SUPPORT", "true");
979
+ addHeader(output, "UNION_STATION_KEY", config->unionStationKey);
980
+ if (!config->unionStationFilters.empty()) {
981
+ addHeader(output, "UNION_STATION_FILTERS",
982
+ config->getUnionStationFilterString());
983
+ }
1108
984
  }
1109
985
 
1110
- buffer.append("PASSENGER_CONNECT_PASSWORD");
1111
- buffer.append(1, '\0');
1112
- buffer.append(session->getConnectPassword());
1113
- buffer.append(1, '\0');
1114
-
1115
986
  /*********************/
1116
987
  /*********************/
1117
988
 
1118
- /*
1119
- * If the last header value is an empty string, then the buffer
1120
- * will end with "\0\0". For example, if 'SSLOptions +ExportCertData'
1121
- * is set, and there's no client certificate, and 'SSL_CLIENT_CERT'
1122
- * is the last header, then the buffer will end with:
1123
- *
1124
- * "SSL_CLIENT_CERT\0\0"
1125
- *
1126
- * The data in the buffer will be processed by the AbstractRequestHandler class,
1127
- * which is implemented in Ruby. But it uses Hash[*data.split("\0")] to
1128
- * unserialize the data. Unfortunately String#split will not transform
1129
- * the trailing "\0\0" into an empty string:
1130
- *
1131
- * "SSL_CLIENT_CERT\0\0".split("\0")
1132
- * # => desired result: ["SSL_CLIENT_CERT", ""]
1133
- * # => actual result: ["SSL_CLIENT_CERT"]
1134
- *
1135
- * When that happens, Hash[..] will raise an ArgumentError because
1136
- * data.split("\0") does not return an array with a length that is a
1137
- * multiple of 2.
1138
- *
1139
- * So here, we add a dummy header to prevent situations like that from
1140
- * happening.
1141
- */
1142
- buffer.append("_\0_\0", 4);
1143
-
1144
- session->sendHeaders(buffer);
1145
- return APR_SUCCESS;
989
+ requestData.push_back(output);
990
+ return output.size();
1146
991
  }
1147
992
 
1148
993
  void throwUploadBufferingException(request_rec *r, int code) {
@@ -1233,7 +1078,7 @@ private:
1233
1078
 
1234
1079
  rv = ap_get_brigade(r->input_filters, bb, AP_MODE_READBYTES,
1235
1080
  APR_BLOCK_READ, bufsiz);
1236
-
1081
+
1237
1082
  /* We lose the failure code here. This is why ap_get_client_block should
1238
1083
  * not be used.
1239
1084
  */
@@ -1376,7 +1221,7 @@ private:
1376
1221
  }
1377
1222
  }
1378
1223
 
1379
- void sendRequestBody(request_rec *r, SessionPtr &session, shared_ptr<BufferedUpload> &uploadData) {
1224
+ void sendRequestBody(const FileDescriptor &fd, shared_ptr<BufferedUpload> &uploadData) {
1380
1225
  TRACE_POINT();
1381
1226
  rewind(uploadData->handle);
1382
1227
  while (!feof(uploadData->handle)) {
@@ -1384,19 +1229,14 @@ private:
1384
1229
  size_t size;
1385
1230
 
1386
1231
  size = fread(buf, 1, sizeof(buf), uploadData->handle);
1387
-
1388
- session->sendBodyBlock(buf, size);
1232
+ writeExact(fd, buf, size);
1389
1233
  }
1390
1234
  }
1391
-
1392
- void sendRequestBody(request_rec *r, SessionPtr &session, const string &buffer) {
1393
- session->sendBodyBlock(buffer.c_str(), buffer.size());
1394
- }
1395
1235
 
1396
1236
  public:
1397
1237
  Hooks(apr_pool_t *pconf, apr_pool_t *plog, apr_pool_t *ptemp, server_rec *s)
1398
1238
  : cstat(1024),
1399
- agentsStarter(AgentsStarter::APACHE)
1239
+ agentsStarter(AgentsStarter::NGINX)
1400
1240
  {
1401
1241
  serverConfig.finalize();
1402
1242
  Passenger::setLogLevel(serverConfig.logLevel);
@@ -1424,7 +1264,7 @@ public:
1424
1264
  serverConfig.userSwitching,
1425
1265
  serverConfig.defaultUser, serverConfig.defaultGroup,
1426
1266
  unixd_config.user_id, unixd_config.group_id,
1427
- serverConfig.root, serverConfig.ruby, serverConfig.maxPoolSize,
1267
+ serverConfig.root, "ruby", serverConfig.maxPoolSize,
1428
1268
  serverConfig.maxInstancesPerApp, serverConfig.poolIdleTime,
1429
1269
  "",
1430
1270
  serverConfig.analyticsLogDir, serverConfig.analyticsLogUser,
@@ -1436,9 +1276,6 @@ public:
1436
1276
  serverConfig.unionStationProxyType,
1437
1277
  serverConfig.prestartURLs);
1438
1278
 
1439
- analyticsLogger = ptr(new AnalyticsLogger(agentsStarter.getLoggingSocketAddress(),
1440
- "logging", agentsStarter.getLoggingSocketPassword()));
1441
-
1442
1279
  // Store some relevant information in the generation directory.
1443
1280
  string generationPath = agentsStarter.getGeneration()->getPath();
1444
1281
  server_rec *server;
@@ -1769,11 +1606,11 @@ init_module(apr_pool_t *pconf, apr_pool_t *plog, apr_pool_t *ptemp, server_rec *
1769
1606
 
1770
1607
  fprintf(stderr, "Output of 'uname -a' follows:\n");
1771
1608
  fflush(stderr);
1772
- ::system("uname -a >&2");
1609
+ system("uname -a >&2");
1773
1610
 
1774
1611
  fprintf(stderr, "\nOutput of 'ulimit -a' follows:\n");
1775
1612
  fflush(stderr);
1776
- ::system("ulimit -a >&2");
1613
+ system("ulimit -a >&2");
1777
1614
 
1778
1615
  return DECLINED;
1779
1616