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.
- data/DEVELOPERS.TXT +4 -10
- data/NEWS +19 -27
- data/Rakefile +20 -19
- data/bin/passenger +3 -2
- data/bin/passenger-config +35 -5
- data/bin/passenger-install-apache2-module +12 -12
- data/bin/passenger-install-nginx-module +55 -38
- data/bin/passenger-memory-stats +3 -1
- data/bin/passenger-status +7 -35
- data/build/agents.rb +107 -21
- data/build/apache2.rb +11 -46
- data/build/basics.rb +61 -9
- data/build/common_library.rb +59 -142
- data/build/cxx_tests.rb +111 -110
- data/build/documentation.rb +33 -0
- data/build/misc.rb +30 -12
- data/build/nginx.rb +10 -39
- data/build/oxt_tests.rb +1 -0
- data/build/ruby_extension.rb +1 -5
- data/build/test_basics.rb +3 -2
- data/dev/copy_boost_headers.rb +2 -1
- data/doc/Architectural overview.html +49 -90
- data/doc/DebuggingAndStressTesting.txt.md +49 -0
- data/doc/Packaging.txt.md +254 -0
- data/doc/Security of user switching support.html +35 -66
- data/doc/Users guide Apache.html +588 -758
- data/doc/Users guide Apache.idmap.txt +253 -136
- data/doc/Users guide Apache.txt +154 -109
- data/doc/Users guide Nginx.html +544 -660
- data/doc/Users guide Nginx.idmap.txt +179 -91
- data/doc/Users guide Nginx.txt +192 -118
- data/doc/Users guide Standalone.html +65 -48
- data/doc/Users guide Standalone.idmap.txt +10 -2
- data/doc/Users guide Standalone.txt +4 -0
- data/doc/images/glyphicons-halflings-white.png +0 -0
- data/doc/images/glyphicons-halflings.png +0 -0
- data/doc/images/phusion_banner_small.png +0 -0
- data/doc/images/{smart-lv2.png → smart.png} +0 -0
- data/doc/images/{smart-lv2.svg → smart.svg} +0 -0
- data/doc/templates/bootstrap.min.css +397 -0
- data/doc/templates/markdown.html.erb +117 -0
- data/doc/users_guide_snippets/analysis_and_system_maintenance.txt +2 -1
- data/doc/users_guide_snippets/appendix_c_spawning_methods.txt +26 -48
- data/doc/users_guide_snippets/passenger_spawn_method.txt +18 -30
- data/doc/users_guide_snippets/support_information.txt +30 -0
- data/ext/apache2/Bucket.cpp +9 -26
- data/ext/apache2/Bucket.h +13 -10
- data/ext/apache2/Configuration.cpp +70 -58
- data/ext/apache2/Configuration.hpp +19 -47
- data/ext/apache2/DirectoryMapper.h +7 -7
- data/ext/apache2/Hooks.cpp +150 -313
- data/ext/boost/algorithm/string/detail/case_conv.hpp +4 -2
- data/ext/boost/algorithm/string/detail/find_format.hpp +20 -20
- data/ext/boost/algorithm/string/detail/find_format_all.hpp +23 -23
- data/ext/boost/algorithm/string/detail/find_format_store.hpp +2 -2
- data/ext/boost/algorithm/string/detail/formatter.hpp +25 -0
- data/ext/boost/algorithm/string/formatter.hpp +20 -3
- data/ext/boost/assert.hpp +85 -4
- data/ext/boost/bind/bind.hpp +1 -1
- data/ext/boost/concept/detail/backward_compatibility.hpp +1 -1
- data/ext/boost/concept_check.hpp +140 -64
- data/ext/boost/config.hpp +1 -1
- data/ext/boost/config/auto_link.hpp +8 -6
- data/ext/boost/config/compiler/borland.hpp +12 -2
- data/ext/boost/config/compiler/clang.hpp +89 -30
- data/ext/boost/config/compiler/codegear.hpp +3 -2
- data/ext/boost/config/compiler/common_edg.hpp +7 -5
- data/ext/boost/config/compiler/cray.hpp +61 -0
- data/ext/boost/config/compiler/digitalmars.hpp +9 -1
- data/ext/boost/config/compiler/gcc.hpp +33 -24
- data/ext/boost/config/compiler/gcc_xml.hpp +4 -0
- data/ext/boost/config/compiler/hp_acc.hpp +12 -1
- data/ext/boost/config/compiler/intel.hpp +78 -4
- data/ext/boost/config/compiler/metrowerks.hpp +4 -1
- data/ext/boost/config/compiler/mpw.hpp +4 -1
- data/ext/boost/config/compiler/nvcc.hpp +8 -66
- data/ext/boost/config/compiler/pathscale.hpp +80 -0
- data/ext/boost/config/compiler/pgi.hpp +5 -5
- data/ext/boost/config/compiler/sunpro_cc.hpp +4 -1
- data/ext/boost/config/compiler/vacpp.hpp +37 -13
- data/ext/boost/config/compiler/visualc.hpp +24 -11
- data/ext/boost/config/platform/bsd.hpp +1 -1
- data/ext/boost/config/platform/cray.hpp +18 -0
- data/ext/boost/config/platform/cygwin.hpp +10 -0
- data/ext/boost/config/platform/linux.hpp +5 -0
- data/ext/boost/config/platform/macos.hpp +5 -4
- data/ext/boost/config/platform/symbian.hpp +5 -2
- data/ext/boost/config/platform/vms.hpp +25 -0
- data/ext/boost/config/platform/win32.hpp +7 -1
- data/ext/boost/config/select_compiler_config.hpp +8 -25
- data/ext/boost/config/select_platform_config.hpp +8 -1
- data/ext/boost/config/select_stdlib_config.hpp +9 -1
- data/ext/boost/config/stdlib/dinkumware.hpp +6 -9
- data/ext/boost/config/stdlib/libcomo.hpp +1 -4
- data/ext/boost/config/stdlib/libcpp.hpp +36 -0
- data/ext/boost/config/stdlib/libstdcpp3.hpp +37 -11
- data/ext/boost/config/stdlib/modena.hpp +1 -4
- data/ext/boost/config/stdlib/msl.hpp +1 -4
- data/ext/boost/config/stdlib/roguewave.hpp +9 -6
- data/ext/boost/config/stdlib/sgi.hpp +12 -4
- data/ext/boost/config/stdlib/stlport.hpp +11 -4
- data/ext/boost/config/stdlib/vacpp.hpp +11 -4
- data/ext/boost/config/suffix.hpp +71 -6
- data/ext/boost/config/warning_disable.hpp +1 -1
- data/ext/boost/container/container_fwd.hpp +177 -0
- data/ext/boost/cstdint.hpp +17 -12
- data/ext/boost/current_function.hpp +2 -1
- data/ext/boost/date_time/c_time.hpp +17 -1
- data/ext/boost/date_time/compiler_config.hpp +13 -15
- data/ext/boost/date_time/date_formatting.hpp +7 -1
- data/ext/boost/date_time/filetime_functions.hpp +4 -4
- data/ext/boost/date_time/gregorian_calendar.ipp +2 -2
- data/ext/boost/date_time/strings_from_facet.hpp +3 -3
- data/ext/boost/date_time/time_facet.hpp +101 -101
- data/ext/boost/detail/endian.hpp +4 -2
- data/ext/boost/detail/fenv.hpp +74 -0
- data/ext/boost/detail/sp_typeinfo.hpp +6 -0
- data/ext/boost/exception/detail/clone_current_exception.hpp +47 -0
- data/ext/boost/exception/detail/exception_ptr.hpp +194 -122
- data/ext/boost/exception/detail/type_info.hpp +3 -3
- data/ext/boost/exception/diagnostic_information.hpp +37 -21
- data/ext/boost/exception/exception.hpp +21 -1
- data/ext/boost/exception/info.hpp +0 -1
- data/ext/boost/function.hpp +2 -2
- data/ext/boost/function/function_base.hpp +15 -9
- data/ext/boost/function/function_template.hpp +26 -48
- data/ext/boost/integer_fwd.hpp +0 -16
- data/ext/boost/integer_traits.hpp +2 -2
- data/ext/boost/iterator.hpp +1 -1
- data/ext/boost/iterator/iterator_adaptor.hpp +1 -7
- data/ext/boost/iterator/iterator_facade.hpp +13 -13
- data/ext/boost/iterator/transform_iterator.hpp +5 -20
- data/ext/boost/lexical_cast.hpp +1655 -673
- data/ext/boost/math/policies/policy.hpp +982 -0
- data/ext/boost/math/special_functions/detail/fp_traits.hpp +570 -0
- data/ext/boost/math/special_functions/detail/round_fwd.hpp +80 -0
- data/ext/boost/math/special_functions/fpclassify.hpp +533 -0
- data/ext/boost/math/special_functions/math_fwd.hpp +1070 -0
- data/ext/boost/math/special_functions/sign.hpp +145 -0
- data/ext/boost/math/tools/config.hpp +321 -0
- data/ext/boost/math/tools/promotion.hpp +150 -0
- data/ext/boost/math/tools/real_cast.hpp +29 -0
- data/ext/boost/math/tools/user.hpp +97 -0
- data/ext/boost/move/move.hpp +1222 -0
- data/ext/boost/mpl/O1_size.hpp +40 -0
- data/ext/boost/mpl/O1_size_fwd.hpp +24 -0
- data/ext/boost/mpl/advance.hpp +76 -0
- data/ext/boost/mpl/advance_fwd.hpp +28 -0
- data/ext/boost/mpl/at.hpp +52 -0
- data/ext/boost/mpl/at_fwd.hpp +24 -0
- data/ext/boost/mpl/aux_/O1_size_impl.hpp +87 -0
- data/ext/boost/mpl/aux_/advance_backward.hpp +128 -0
- data/ext/boost/mpl/aux_/advance_forward.hpp +127 -0
- data/ext/boost/mpl/aux_/arithmetic_op.hpp +92 -0
- data/ext/boost/mpl/aux_/at_impl.hpp +45 -0
- data/ext/boost/mpl/aux_/begin_end_impl.hpp +101 -0
- data/ext/boost/mpl/aux_/clear_impl.hpp +35 -0
- data/ext/boost/mpl/aux_/comparison_op.hpp +83 -0
- data/ext/boost/mpl/aux_/config/forwarding.hpp +27 -0
- data/ext/boost/mpl/aux_/config/typeof.hpp +38 -0
- data/ext/boost/mpl/aux_/contains_impl.hpp +61 -0
- data/ext/boost/mpl/aux_/find_if_pred.hpp +31 -0
- data/ext/boost/mpl/aux_/fold_impl.hpp +43 -0
- data/ext/boost/mpl/aux_/has_begin.hpp +23 -0
- data/ext/boost/mpl/aux_/has_size.hpp +23 -0
- data/ext/boost/mpl/aux_/has_tag.hpp +23 -0
- data/ext/boost/mpl/aux_/inserter_algorithm.hpp +159 -0
- data/ext/boost/mpl/aux_/is_msvc_eti_arg.hpp +64 -0
- data/ext/boost/mpl/aux_/iter_apply.hpp +47 -0
- data/ext/boost/mpl/aux_/iter_fold_if_impl.hpp +210 -0
- data/ext/boost/mpl/aux_/iter_fold_impl.hpp +42 -0
- data/ext/boost/mpl/aux_/lambda_spec.hpp +49 -0
- data/ext/boost/mpl/aux_/largest_int.hpp +63 -0
- data/ext/boost/mpl/aux_/msvc_eti_base.hpp +77 -0
- data/ext/boost/mpl/aux_/msvc_type.hpp +62 -0
- data/ext/boost/mpl/aux_/numeric_cast_utils.hpp +77 -0
- data/ext/boost/mpl/aux_/numeric_op.hpp +315 -0
- data/ext/boost/mpl/aux_/preprocessed/gcc/advance_backward.hpp +97 -0
- data/ext/boost/mpl/aux_/preprocessed/gcc/advance_forward.hpp +97 -0
- data/ext/boost/mpl/aux_/preprocessed/gcc/equal_to.hpp +94 -0
- data/ext/boost/mpl/aux_/preprocessed/gcc/fold_impl.hpp +180 -0
- data/ext/boost/mpl/aux_/preprocessed/gcc/greater.hpp +94 -0
- data/ext/boost/mpl/aux_/preprocessed/gcc/greater_equal.hpp +94 -0
- data/ext/boost/mpl/aux_/preprocessed/gcc/iter_fold_if_impl.hpp +133 -0
- data/ext/boost/mpl/aux_/preprocessed/gcc/iter_fold_impl.hpp +180 -0
- data/ext/boost/mpl/aux_/preprocessed/gcc/less.hpp +94 -0
- data/ext/boost/mpl/aux_/preprocessed/gcc/less_equal.hpp +94 -0
- data/ext/boost/mpl/aux_/preprocessed/gcc/list.hpp +323 -0
- data/ext/boost/mpl/aux_/preprocessed/gcc/minus.hpp +146 -0
- data/ext/boost/mpl/aux_/preprocessed/gcc/not_equal_to.hpp +94 -0
- data/ext/boost/mpl/aux_/preprocessed/gcc/plus.hpp +146 -0
- data/ext/boost/mpl/aux_/preprocessed/gcc/reverse_fold_impl.hpp +231 -0
- data/ext/boost/mpl/aux_/preprocessed/gcc/times.hpp +146 -0
- data/ext/boost/mpl/aux_/preprocessed/gcc/vector.hpp +323 -0
- data/ext/boost/mpl/aux_/preprocessor/default_params.hpp +67 -0
- data/ext/boost/mpl/aux_/push_back_impl.hpp +70 -0
- data/ext/boost/mpl/aux_/push_front_impl.hpp +71 -0
- data/ext/boost/mpl/aux_/reverse_fold_impl.hpp +44 -0
- data/ext/boost/mpl/aux_/size_impl.hpp +52 -0
- data/ext/boost/mpl/aux_/traits_lambda_spec.hpp +63 -0
- data/ext/boost/mpl/back_fwd.hpp +24 -0
- data/ext/boost/mpl/back_inserter.hpp +34 -0
- data/ext/boost/mpl/begin_end.hpp +57 -0
- data/ext/boost/mpl/begin_end_fwd.hpp +27 -0
- data/ext/boost/mpl/clear.hpp +39 -0
- data/ext/boost/mpl/clear_fwd.hpp +24 -0
- data/ext/boost/mpl/comparison.hpp +24 -0
- data/ext/boost/mpl/contains.hpp +41 -0
- data/ext/boost/mpl/contains_fwd.hpp +25 -0
- data/ext/boost/mpl/deref.hpp +41 -0
- data/ext/boost/mpl/distance.hpp +78 -0
- data/ext/boost/mpl/distance_fwd.hpp +28 -0
- data/ext/boost/mpl/empty_fwd.hpp +24 -0
- data/ext/boost/mpl/equal_to.hpp +21 -0
- data/ext/boost/mpl/find.hpp +38 -0
- data/ext/boost/mpl/find_if.hpp +50 -0
- data/ext/boost/mpl/fold.hpp +48 -0
- data/ext/boost/mpl/front_fwd.hpp +24 -0
- data/ext/boost/mpl/front_inserter.hpp +33 -0
- data/ext/boost/mpl/greater.hpp +21 -0
- data/ext/boost/mpl/greater_equal.hpp +21 -0
- data/ext/boost/mpl/inserter.hpp +32 -0
- data/ext/boost/mpl/iter_fold.hpp +49 -0
- data/ext/boost/mpl/iter_fold_if.hpp +117 -0
- data/ext/boost/mpl/iterator_range.hpp +42 -0
- data/ext/boost/mpl/iterator_tags.hpp +27 -0
- data/ext/boost/mpl/less.hpp +21 -0
- data/ext/boost/mpl/less_equal.hpp +21 -0
- data/ext/boost/mpl/limits/list.hpp +21 -0
- data/ext/boost/mpl/limits/vector.hpp +21 -0
- data/ext/boost/mpl/list.hpp +57 -0
- data/ext/boost/mpl/list/aux_/O1_size.hpp +33 -0
- data/ext/boost/mpl/list/aux_/begin_end.hpp +44 -0
- data/ext/boost/mpl/list/aux_/clear.hpp +34 -0
- data/ext/boost/mpl/list/aux_/empty.hpp +34 -0
- data/ext/boost/mpl/list/aux_/front.hpp +33 -0
- data/ext/boost/mpl/list/aux_/include_preprocessed.hpp +35 -0
- data/ext/boost/mpl/list/aux_/item.hpp +55 -0
- data/ext/boost/mpl/list/aux_/iterator.hpp +76 -0
- data/ext/boost/mpl/list/aux_/pop_front.hpp +34 -0
- data/ext/boost/mpl/list/aux_/preprocessed/plain/list10.hpp +149 -0
- data/ext/boost/mpl/list/aux_/preprocessed/plain/list20.hpp +169 -0
- data/ext/boost/mpl/list/aux_/push_back.hpp +36 -0
- data/ext/boost/mpl/list/aux_/push_front.hpp +39 -0
- data/ext/boost/mpl/list/aux_/size.hpp +33 -0
- data/ext/boost/mpl/list/aux_/tag.hpp +24 -0
- data/ext/boost/mpl/list/list0.hpp +42 -0
- data/ext/boost/mpl/list/list10.hpp +43 -0
- data/ext/boost/mpl/list/list20.hpp +43 -0
- data/ext/boost/mpl/long.hpp +22 -0
- data/ext/boost/mpl/long_fwd.hpp +27 -0
- data/ext/boost/mpl/minus.hpp +21 -0
- data/ext/boost/mpl/multiplies.hpp +53 -0
- data/ext/boost/mpl/negate.hpp +81 -0
- data/ext/boost/mpl/not_equal_to.hpp +21 -0
- data/ext/boost/mpl/numeric_cast.hpp +41 -0
- data/ext/boost/mpl/pair.hpp +70 -0
- data/ext/boost/mpl/plus.hpp +21 -0
- data/ext/boost/mpl/pop_back_fwd.hpp +24 -0
- data/ext/boost/mpl/pop_front_fwd.hpp +24 -0
- data/ext/boost/mpl/prior.hpp +19 -0
- data/ext/boost/mpl/push_back.hpp +53 -0
- data/ext/boost/mpl/push_back_fwd.hpp +24 -0
- data/ext/boost/mpl/push_front.hpp +52 -0
- data/ext/boost/mpl/push_front_fwd.hpp +24 -0
- data/ext/boost/mpl/remove_if.hpp +83 -0
- data/ext/boost/mpl/reverse_fold.hpp +50 -0
- data/ext/boost/mpl/same_as.hpp +55 -0
- data/ext/boost/mpl/sequence_tag.hpp +124 -0
- data/ext/boost/mpl/sequence_tag_fwd.hpp +26 -0
- data/ext/boost/mpl/size.hpp +42 -0
- data/ext/boost/mpl/size_fwd.hpp +24 -0
- data/ext/boost/mpl/tag.hpp +52 -0
- data/ext/boost/mpl/times.hpp +21 -0
- data/ext/boost/mpl/vector.hpp +57 -0
- data/ext/boost/mpl/vector/aux_/O1_size.hpp +56 -0
- data/ext/boost/mpl/vector/aux_/at.hpp +116 -0
- data/ext/boost/mpl/vector/aux_/back.hpp +59 -0
- data/ext/boost/mpl/vector/aux_/begin_end.hpp +49 -0
- data/ext/boost/mpl/vector/aux_/clear.hpp +55 -0
- data/ext/boost/mpl/vector/aux_/empty.hpp +68 -0
- data/ext/boost/mpl/vector/aux_/front.hpp +56 -0
- data/ext/boost/mpl/vector/aux_/include_preprocessed.hpp +55 -0
- data/ext/boost/mpl/vector/aux_/item.hpp +103 -0
- data/ext/boost/mpl/vector/aux_/iterator.hpp +130 -0
- data/ext/boost/mpl/vector/aux_/pop_back.hpp +40 -0
- data/ext/boost/mpl/vector/aux_/pop_front.hpp +40 -0
- data/ext/boost/mpl/vector/aux_/preprocessed/plain/vector10.hpp +829 -0
- data/ext/boost/mpl/vector/aux_/preprocessed/plain/vector20.hpp +1144 -0
- data/ext/boost/mpl/vector/aux_/preprocessed/typeof_based/vector10.hpp +139 -0
- data/ext/boost/mpl/vector/aux_/preprocessed/typeof_based/vector20.hpp +159 -0
- data/ext/boost/mpl/vector/aux_/push_back.hpp +40 -0
- data/ext/boost/mpl/vector/aux_/push_front.hpp +40 -0
- data/ext/boost/mpl/vector/aux_/size.hpp +49 -0
- data/ext/boost/mpl/vector/aux_/tag.hpp +32 -0
- data/ext/boost/mpl/vector/aux_/vector0.hpp +52 -0
- data/ext/boost/mpl/vector/vector0.hpp +34 -0
- data/ext/boost/mpl/vector/vector10.hpp +45 -0
- data/ext/boost/mpl/vector/vector20.hpp +45 -0
- data/ext/boost/none.hpp +1 -1
- data/ext/boost/numeric/conversion/bounds.hpp +24 -0
- data/ext/boost/numeric/conversion/cast.hpp +61 -0
- data/ext/boost/numeric/conversion/conversion_traits.hpp +39 -0
- data/ext/boost/numeric/conversion/converter.hpp +68 -0
- data/ext/boost/numeric/conversion/converter_policies.hpp +186 -0
- data/ext/boost/numeric/conversion/detail/bounds.hpp +58 -0
- data/ext/boost/numeric/conversion/detail/conversion_traits.hpp +97 -0
- data/ext/boost/numeric/conversion/detail/converter.hpp +602 -0
- data/ext/boost/numeric/conversion/detail/int_float_mixture.hpp +72 -0
- data/ext/boost/numeric/conversion/detail/is_subranged.hpp +234 -0
- data/ext/boost/numeric/conversion/detail/meta.hpp +120 -0
- data/ext/boost/numeric/conversion/detail/numeric_cast_traits.hpp +138 -0
- data/ext/boost/numeric/conversion/detail/preprocessed/numeric_cast_traits_common.hpp +1741 -0
- data/ext/boost/numeric/conversion/detail/preprocessed/numeric_cast_traits_long_long.hpp +347 -0
- data/ext/boost/numeric/conversion/detail/sign_mixture.hpp +72 -0
- data/ext/boost/numeric/conversion/detail/udt_builtin_mixture.hpp +69 -0
- data/ext/boost/numeric/conversion/int_float_mixture_enum.hpp +29 -0
- data/ext/boost/numeric/conversion/numeric_cast_traits.hpp +31 -0
- data/ext/boost/numeric/conversion/sign_mixture_enum.hpp +29 -0
- data/ext/boost/numeric/conversion/udt_builtin_mixture_enum.hpp +26 -0
- data/ext/boost/operators.hpp +3 -1
- data/ext/boost/optional/optional.hpp +146 -79
- data/ext/boost/optional/optional_fwd.hpp +8 -1
- data/ext/boost/preprocessor/cat.hpp +2 -2
- data/ext/boost/preprocessor/config/config.hpp +39 -4
- data/ext/boost/preprocessor/facilities/intercept.hpp +277 -0
- data/ext/boost/preprocessor/facilities/overload.hpp +25 -0
- data/ext/boost/preprocessor/iteration/detail/iter/forward1.hpp +3 -3
- data/ext/boost/preprocessor/iteration/iterate.hpp +3 -3
- data/ext/boost/preprocessor/punctuation/paren.hpp +23 -0
- data/ext/boost/preprocessor/repetition/enum_shifted_params.hpp +44 -0
- data/ext/boost/preprocessor/seq/cat.hpp +5 -4
- data/ext/boost/preprocessor/seq/size.hpp +0 -1
- data/ext/boost/preprocessor/tuple/eat.hpp +83 -34
- data/ext/boost/preprocessor/tuple/elem.hpp +161 -355
- data/ext/boost/preprocessor/tuple/rem.hpp +110 -48
- data/ext/boost/preprocessor/tuple/to_list.hpp +90 -36
- data/ext/boost/preprocessor/variadic/elem.hpp +94 -0
- data/ext/boost/preprocessor/variadic/size.hpp +30 -0
- data/ext/boost/range/begin.hpp +17 -6
- data/ext/boost/range/concepts.hpp +37 -2
- data/ext/boost/range/detail/safe_bool.hpp +72 -0
- data/ext/boost/range/end.hpp +14 -9
- data/ext/boost/range/iterator_range_core.hpp +120 -12
- data/ext/boost/range/size.hpp +21 -5
- data/ext/boost/smart_ptr/detail/shared_count.hpp +88 -0
- data/ext/boost/smart_ptr/detail/sp_counted_base.hpp +3 -0
- data/ext/boost/smart_ptr/detail/sp_counted_base_aix.hpp +142 -0
- data/ext/boost/smart_ptr/detail/sp_counted_base_gcc_mips.hpp +9 -0
- data/ext/boost/smart_ptr/detail/sp_counted_impl.hpp +10 -2
- data/ext/boost/smart_ptr/detail/sp_has_sync.hpp +5 -1
- data/ext/boost/smart_ptr/detail/spinlock.hpp +4 -1
- data/ext/boost/smart_ptr/detail/spinlock_gcc_arm.hpp +20 -3
- data/ext/boost/smart_ptr/detail/spinlock_pool.hpp +4 -0
- data/ext/boost/smart_ptr/make_shared.hpp +591 -22
- data/ext/boost/smart_ptr/shared_array.hpp +29 -1
- data/ext/boost/smart_ptr/shared_ptr.hpp +29 -13
- data/ext/boost/smart_ptr/weak_ptr.hpp +24 -12
- data/ext/boost/src/pthread/once.cpp +9 -7
- data/ext/boost/src/pthread/thread.cpp +32 -28
- data/ext/boost/src/pthread/timeconv.inl +4 -5
- data/ext/boost/src/tss_null.cpp +5 -1
- data/ext/boost/static_assert.hpp +8 -2
- data/ext/boost/thread/detail/config.hpp +19 -4
- data/ext/boost/thread/detail/move.hpp +11 -5
- data/ext/boost/thread/detail/thread.hpp +59 -43
- data/ext/boost/thread/exceptions.hpp +9 -9
- data/ext/boost/thread/future.hpp +150 -82
- data/ext/boost/thread/locks.hpp +101 -60
- data/ext/boost/thread/pthread/condition_variable.hpp +79 -32
- data/ext/boost/thread/pthread/condition_variable_fwd.hpp +12 -3
- data/ext/boost/thread/pthread/mutex.hpp +17 -14
- data/ext/boost/thread/pthread/once.hpp +3 -4
- data/ext/boost/thread/pthread/pthread_mutex_scoped_lock.hpp +12 -2
- data/ext/boost/thread/pthread/recursive_mutex.hpp +19 -19
- data/ext/boost/thread/pthread/shared_mutex.hpp +13 -13
- data/ext/boost/thread/pthread/thread_data.hpp +40 -12
- data/ext/boost/thread/thread_time.hpp +5 -0
- data/ext/boost/throw_exception.hpp +1 -1
- data/ext/boost/token_functions.hpp +34 -10
- data/ext/boost/type_traits/add_rvalue_reference.hpp +66 -0
- data/ext/boost/type_traits/alignment_of.hpp +1 -1
- data/ext/boost/type_traits/detail/bool_trait_def.hpp +26 -3
- data/ext/boost/type_traits/detail/bool_trait_undef.hpp +3 -2
- data/ext/boost/type_traits/detail/cv_traits_impl.hpp +1 -1
- data/ext/boost/type_traits/detail/size_t_trait_def.hpp +6 -4
- data/ext/boost/type_traits/detail/type_trait_def.hpp +8 -2
- data/ext/boost/type_traits/function_traits.hpp +1 -1
- data/ext/boost/type_traits/has_nothrow_constructor.hpp +53 -0
- data/ext/boost/type_traits/has_nothrow_copy.hpp +19 -5
- data/ext/boost/type_traits/has_trivial_constructor.hpp +51 -0
- data/ext/boost/type_traits/has_trivial_copy.hpp +20 -5
- data/ext/boost/type_traits/has_trivial_destructor.hpp +12 -5
- data/ext/boost/type_traits/intrinsics.hpp +119 -71
- data/ext/boost/type_traits/is_const.hpp +5 -5
- data/ext/boost/type_traits/is_convertible.hpp +14 -13
- data/ext/boost/type_traits/is_enum.hpp +1 -1
- data/ext/boost/type_traits/is_floating_point.hpp +27 -0
- data/ext/boost/type_traits/is_function.hpp +3 -3
- data/ext/boost/type_traits/is_fundamental.hpp +1 -1
- data/ext/boost/type_traits/is_member_function_pointer.hpp +2 -2
- data/ext/boost/type_traits/is_member_pointer.hpp +2 -2
- data/ext/boost/type_traits/is_pod.hpp +11 -3
- data/ext/boost/type_traits/is_pointer.hpp +2 -2
- data/ext/boost/type_traits/is_signed.hpp +8 -3
- data/ext/boost/type_traits/is_union.hpp +8 -0
- data/ext/boost/type_traits/is_unsigned.hpp +9 -4
- data/ext/boost/type_traits/is_volatile.hpp +5 -5
- data/ext/boost/type_traits/remove_cv.hpp +4 -3
- data/ext/boost/type_traits/remove_pointer.hpp +51 -2
- data/ext/boost/type_traits/remove_reference.hpp +2 -2
- data/ext/boost/type_traits/type_with_alignment.hpp +8 -2
- data/ext/boost/utility/declval.hpp +44 -0
- data/ext/boost/utility/detail/in_place_factory_prefix.hpp +36 -0
- data/ext/boost/utility/detail/in_place_factory_suffix.hpp +23 -0
- data/ext/boost/utility/detail/result_of_iterate.hpp +142 -0
- data/ext/boost/utility/in_place_factory.hpp +88 -0
- data/ext/boost/utility/result_of.hpp +103 -0
- data/ext/boost/utility/swap.hpp +55 -0
- data/ext/common/AnsiColorConstants.h +36 -0
- data/ext/common/ApplicationPool2/Common.h +87 -0
- data/ext/common/ApplicationPool2/ComponentInfo.h +53 -0
- data/ext/common/ApplicationPool2/Group.h +648 -0
- data/ext/common/ApplicationPool2/Implementation.cpp +580 -0
- data/ext/common/ApplicationPool2/Options.h +576 -0
- data/ext/common/ApplicationPool2/PipeWatcher.h +61 -0
- data/ext/common/ApplicationPool2/Pool.h +1181 -0
- data/ext/common/ApplicationPool2/Process.h +425 -0
- data/ext/common/ApplicationPool2/README.md +96 -0
- data/ext/common/ApplicationPool2/Session.h +158 -0
- data/ext/common/ApplicationPool2/Socket.h +246 -0
- data/ext/common/ApplicationPool2/Spawner.h +2212 -0
- data/ext/common/ApplicationPool2/SuperGroup.h +749 -0
- data/ext/common/BackgroundEventLoop.cpp +129 -0
- data/ext/common/BackgroundEventLoop.h +61 -0
- data/ext/common/Constants.h +3 -1
- data/ext/common/EventedBufferedInput.h +331 -0
- data/ext/common/EventedMessageServer.h +17 -34
- data/ext/common/EventedServer.h +2 -2
- data/ext/common/Exceptions.h +71 -19
- data/ext/common/FileDescriptor.h +8 -6
- data/ext/common/HttpConstants.h +167 -0
- data/ext/common/IniFile.h +24 -0
- data/ext/common/Logging.h +62 -849
- data/ext/common/MessageReadersWriters.h +19 -0
- data/ext/common/MessageServer.h +11 -14
- data/ext/common/MultiLibeio.cpp +198 -0
- data/ext/common/MultiLibeio.h +67 -0
- data/ext/common/ResourceLocator.h +24 -41
- data/ext/common/SafeLibev.h +186 -14
- data/ext/common/StaticString.h +23 -3
- data/ext/common/UnionStation.h +972 -0
- data/ext/common/Utils.cpp +168 -24
- data/ext/common/Utils.h +25 -3
- data/ext/common/Utils/CachedFileStat.hpp +4 -3
- data/ext/common/Utils/FileChangeChecker.h +2 -2
- data/ext/common/Utils/HashMap.h +50 -0
- data/ext/common/Utils/IOUtils.cpp +229 -68
- data/ext/common/Utils/IOUtils.h +134 -3
- data/ext/common/Utils/Lock.h +28 -0
- data/ext/common/Utils/MemoryBarrier.h +52 -0
- data/ext/common/Utils/PriorityQueue.h +54 -0
- data/ext/common/Utils/ProcessMetricsCollector.h +9 -11
- data/ext/common/Utils/ScopeGuard.h +50 -1
- data/ext/common/Utils/SmallVector.h +653 -0
- data/ext/common/Utils/StrIntUtils.cpp +26 -2
- data/ext/common/Utils/StrIntUtils.h +18 -2
- data/ext/common/Utils/StringMap.h +125 -8
- data/ext/common/Utils/Template.h +212 -0
- data/ext/common/Utils/fib.c +699 -0
- data/ext/common/Utils/fib.h +101 -0
- data/ext/common/Utils/fibpriv.h +67 -0
- data/ext/common/Utils/json-forwards.h +249 -0
- data/ext/common/Utils/json.h +1855 -0
- data/ext/common/Utils/jsoncpp.cpp +4230 -0
- data/ext/common/agents/Base.cpp +1126 -0
- data/ext/common/{AgentBase.h → agents/Base.h} +5 -1
- data/ext/common/agents/EnvPrinter.c +16 -0
- data/ext/common/agents/HelperAgent/AgentOptions.h +81 -0
- data/ext/common/{HelperAgent → agents/HelperAgent}/BacktracesServer.h +3 -2
- data/ext/common/agents/HelperAgent/FileBackedPipe.h +732 -0
- data/ext/common/agents/HelperAgent/Main.cpp +497 -0
- data/ext/common/agents/HelperAgent/RequestHandler.cpp +283 -0
- data/ext/common/agents/HelperAgent/RequestHandler.h +2139 -0
- data/ext/common/agents/HelperAgent/ScgiRequestParser.h +451 -0
- data/ext/common/{LoggingAgent → agents/LoggingAgent}/DataStoreId.h +1 -1
- data/ext/common/{LoggingAgent → agents/LoggingAgent}/FilterSupport.cpp +1 -1
- data/ext/common/{LoggingAgent → agents/LoggingAgent}/FilterSupport.h +0 -0
- data/ext/common/{LoggingAgent → agents/LoggingAgent}/LoggingServer.h +18 -16
- data/ext/common/{LoggingAgent → agents/LoggingAgent}/Main.cpp +15 -13
- data/ext/common/{LoggingAgent → agents/LoggingAgent}/RemoteSender.h +6 -6
- data/ext/common/agents/SpawnPreparer.cpp +127 -0
- data/ext/common/{Watchdog.cpp → agents/Watchdog/Main.cpp} +63 -25
- data/ext/libeio/Changes +72 -0
- data/ext/{google/COPYING → libeio/LICENSE} +17 -9
- data/ext/libeio/Makefile.am +15 -0
- data/ext/libeio/Makefile.in +694 -0
- data/ext/libeio/aclocal.m4 +9418 -0
- data/ext/libeio/autogen.sh +3 -0
- data/ext/libeio/config.guess +1501 -0
- data/ext/libeio/config.h.in +136 -0
- data/ext/libeio/config.sub +1705 -0
- data/ext/libeio/configure +14822 -0
- data/ext/libeio/configure.ac +22 -0
- data/ext/libeio/demo.c +194 -0
- data/ext/libeio/ecb.h +457 -0
- data/ext/libeio/eio.c +2816 -0
- data/ext/libeio/eio.h +411 -0
- data/ext/libeio/install-sh +520 -0
- data/ext/libeio/libeio.m4 +211 -0
- data/ext/libeio/ltmain.sh +9636 -0
- data/ext/libeio/missing +376 -0
- data/ext/libeio/xthread.h +166 -0
- data/ext/libev/Changes +125 -7
- data/ext/libev/Makefile.am +5 -3
- data/ext/libev/Makefile.in +209 -120
- data/ext/libev/aclocal.m4 +6027 -4619
- data/ext/libev/autogen.sh +1 -4
- data/ext/libev/config.h.in +11 -7
- data/ext/libev/configure +7312 -14993
- data/ext/libev/configure.ac +12 -5
- data/ext/libev/depcomp +630 -0
- data/ext/libev/ev++.h +48 -32
- data/ext/libev/ev.c +1173 -391
- data/ext/libev/ev.h +315 -181
- data/ext/libev/ev_epoll.c +66 -15
- data/ext/libev/ev_kqueue.c +20 -18
- data/ext/libev/ev_poll.c +27 -23
- data/ext/libev/ev_port.c +39 -19
- data/ext/libev/ev_select.c +23 -17
- data/ext/libev/ev_vars.h +25 -8
- data/ext/libev/ev_win32.c +6 -6
- data/ext/libev/ev_wrap.h +22 -2
- data/ext/libev/event.c +18 -17
- data/ext/libev/event.h +16 -4
- data/ext/libev/libev.m4 +10 -6
- data/ext/libev/ltmain.sh +7353 -5811
- data/ext/nginx/Configuration.c +74 -42
- data/ext/nginx/Configuration.h +3 -5
- data/ext/nginx/ContentHandler.c +26 -83
- data/ext/nginx/ContentHandler.h +1 -1
- data/ext/nginx/config +13 -9
- data/ext/nginx/ngx_http_passenger_module.c +3 -7
- data/ext/oxt/detail/backtrace_enabled.hpp +5 -102
- data/ext/oxt/detail/context.hpp +90 -0
- data/ext/oxt/detail/spin_lock_darwin.hpp +4 -0
- data/ext/oxt/detail/spin_lock_gcc_x86.hpp +4 -0
- data/ext/oxt/detail/spin_lock_pthreads.hpp +14 -0
- data/ext/oxt/detail/tracable_exception_enabled.hpp +2 -2
- data/ext/oxt/dynamic_thread_group.hpp +27 -1
- data/ext/oxt/implementation.cpp +415 -0
- data/ext/oxt/{thread.cpp → initialize.hpp} +13 -6
- data/ext/oxt/macros.hpp +32 -1
- data/ext/oxt/spin_lock.hpp +6 -11
- data/ext/oxt/system_calls.cpp +204 -16
- data/ext/oxt/system_calls.hpp +85 -45
- data/ext/oxt/thread.hpp +13 -117
- data/ext/ruby/passenger_native_support.c +82 -237
- data/helper-scripts/backtrace-sanitizer.rb +114 -0
- data/helper-scripts/classic-rails-loader.rb +135 -0
- data/helper-scripts/classic-rails-preloader.rb +161 -0
- data/helper-scripts/node-loader.js +314 -0
- data/helper-scripts/rack-loader.rb +104 -0
- data/helper-scripts/rack-preloader.rb +132 -0
- data/helper-scripts/wsgi-loader.py +231 -0
- data/helper-scripts/wsgi-preloader.py +1 -0
- data/lib/phusion_passenger.rb +159 -61
- data/lib/phusion_passenger/abstract_installer.rb +182 -87
- data/lib/phusion_passenger/admin_tools/server_instance.rb +25 -19
- data/lib/phusion_passenger/analytics_logger.rb +5 -4
- data/lib/phusion_passenger/classic_rails/{request_handler.rb → thread_handler_extension.rb} +4 -40
- data/lib/phusion_passenger/classic_rails_extensions/init.rb +5 -3
- data/lib/phusion_passenger/common_library.rb +441 -0
- data/lib/phusion_passenger/console_text_template.rb +4 -16
- data/lib/phusion_passenger/constants.rb +1 -8
- data/lib/phusion_passenger/debug_logging.rb +5 -2
- data/lib/phusion_passenger/dependencies.rb +51 -13
- data/lib/phusion_passenger/loader_shared_helpers.rb +318 -0
- data/lib/phusion_passenger/message_channel.rb +3 -47
- data/lib/phusion_passenger/message_client.rb +2 -2
- data/lib/phusion_passenger/native_support.rb +36 -15
- data/lib/phusion_passenger/packaging.rb +8 -11
- data/lib/phusion_passenger/platform_info.rb +25 -17
- data/lib/phusion_passenger/platform_info/apache.rb +10 -7
- data/lib/phusion_passenger/platform_info/binary_compatibility.rb +10 -30
- data/lib/phusion_passenger/platform_info/compiler.rb +93 -34
- data/lib/phusion_passenger/platform_info/ruby.rb +37 -97
- data/lib/phusion_passenger/preloader_shared_helpers.rb +121 -0
- data/lib/phusion_passenger/public_api.rb +1 -4
- data/lib/phusion_passenger/rack/{request_handler.rb → thread_handler_extension.rb} +14 -63
- data/lib/phusion_passenger/rails3_extensions/init.rb +9 -8
- data/lib/phusion_passenger/request_handler.rb +500 -0
- data/lib/phusion_passenger/request_handler/thread_handler.rb +360 -0
- data/lib/phusion_passenger/ruby_core_enhancements.rb +142 -0
- data/lib/phusion_passenger/standalone/command.rb +36 -15
- data/lib/phusion_passenger/standalone/package_runtime_command.rb +16 -8
- data/lib/phusion_passenger/standalone/runtime_installer.rb +169 -72
- data/lib/phusion_passenger/standalone/start_command.rb +44 -39
- data/lib/phusion_passenger/standalone/utils.rb +5 -5
- data/lib/phusion_passenger/utils.rb +35 -914
- data/lib/phusion_passenger/utils/ansi_colors.rb +59 -0
- data/lib/phusion_passenger/utils/file_system_watcher.rb +1 -1
- data/lib/phusion_passenger/utils/robust_interruption.rb +134 -0
- data/lib/phusion_passenger/utils/tee_input.rb +174 -0
- data/lib/phusion_passenger/utils/tmpio.rb +33 -0
- data/lib/phusion_passenger/utils/unseekable_socket.rb +6 -0
- data/resources/mime.types +5 -1
- data/{lib/phusion_passenger/templates → resources}/standalone_default_root/index.html +0 -0
- data/{lib/phusion_passenger → resources}/templates/apache2/apache_must_be_compiled_with_compatible_mpm.txt.erb +0 -0
- data/{lib/phusion_passenger → resources}/templates/apache2/config_snippets.txt.erb +0 -0
- data/{lib/phusion_passenger → resources}/templates/apache2/deployment_example.txt.erb +0 -0
- data/{lib/phusion_passenger → resources}/templates/apache2/no_write_permission_to_passenger_root.txt.erb +0 -0
- data/{lib/phusion_passenger → resources}/templates/apache2/possible_solutions_for_compilation_and_installation_problems.txt.erb +0 -0
- data/{lib/phusion_passenger → resources}/templates/apache2/run_installer_as_root.txt.erb +0 -0
- data/{lib/phusion_passenger → resources}/templates/apache2/welcome.txt.erb +0 -0
- data/{lib/phusion_passenger → resources}/templates/error_layout.css +6 -0
- data/resources/templates/error_layout.html.template +89 -0
- data/resources/templates/general_error.html.template +1 -0
- data/resources/templates/general_error_with_html.html.template +1 -0
- data/{lib/phusion_passenger → resources}/templates/nginx/ask_for_extra_configure_flags.txt.erb +0 -0
- data/{lib/phusion_passenger → resources}/templates/nginx/cannot_write_to_dir.txt.erb +0 -0
- data/{lib/phusion_passenger → resources}/templates/nginx/config_snippets.txt.erb +0 -0
- data/{lib/phusion_passenger → resources}/templates/nginx/config_snippets_inserted.txt.erb +0 -0
- data/{lib/phusion_passenger → resources}/templates/nginx/confirm_extra_configure_flags.txt.erb +0 -0
- data/{lib/phusion_passenger → resources}/templates/nginx/deployment_example.txt.erb +0 -0
- data/resources/templates/nginx/not_available_when_natively_packaged.txt.erb +8 -0
- data/{lib/phusion_passenger → resources}/templates/nginx/pcre_could_not_be_downloaded.txt.erb +0 -0
- data/{lib/phusion_passenger → resources}/templates/nginx/pcre_could_not_be_extracted.txt.erb +0 -0
- data/{lib/phusion_passenger → resources}/templates/nginx/possible_solutions_for_compilation_and_installation_problems.txt.erb +0 -0
- data/{lib/phusion_passenger → resources}/templates/nginx/possible_solutions_for_download_and_extraction_problems.txt.erb +0 -0
- data/{lib/phusion_passenger → resources}/templates/nginx/query_download_and_install.txt.erb +0 -0
- data/{lib/phusion_passenger → resources}/templates/nginx/run_installer_as_root.txt.erb +0 -0
- data/{lib/phusion_passenger → resources}/templates/nginx/welcome.txt.erb +0 -0
- data/{lib/phusion_passenger → resources}/templates/standalone/cannot_write_to_dir.txt.erb +0 -0
- data/{lib/phusion_passenger → resources}/templates/standalone/config.erb +26 -5
- data/{lib/phusion_passenger → resources}/templates/standalone/possible_solutions_for_download_and_extraction_problems.txt.erb +0 -0
- data/{lib/phusion_passenger → resources}/templates/standalone/run_installer_as_root.txt.erb +0 -0
- data/{lib/phusion_passenger → resources}/templates/standalone/welcome.txt.erb +0 -0
- data/resources/templates/undisclosed_error.html.template +25 -0
- data/test/config.json.example +42 -0
- data/test/cxx/ApplicationPool2/DirectSpawnerTest.cpp +86 -0
- data/test/cxx/ApplicationPool2/OptionsTest.cpp +44 -0
- data/test/cxx/ApplicationPool2/PoolTest.cpp +1234 -0
- data/test/cxx/ApplicationPool2/ProcessTest.cpp +131 -0
- data/test/cxx/ApplicationPool2/SmartSpawnerTest.cpp +229 -0
- data/test/cxx/ApplicationPool2/SpawnerTestCases.cpp +744 -0
- data/test/cxx/BufferedIOTest.cpp +7 -7
- data/test/cxx/CxxTestMain.cpp +65 -2
- data/test/cxx/FileBackedPipeTest.cpp +626 -0
- data/test/cxx/FileChangeCheckerTest.cpp +20 -18
- data/test/cxx/FilterSupportTest.cpp +5 -5
- data/test/cxx/IOUtilsTest.cpp +11 -4
- data/test/cxx/MessageReadersWritersTest.cpp +1 -1
- data/test/cxx/MessageServerTest.cpp +31 -30
- data/test/cxx/RequestHandlerTest.cpp +777 -0
- data/test/cxx/ScgiRequestParserTest.cpp +36 -16
- data/test/cxx/ServerInstanceDirTest.cpp +1 -1
- data/test/cxx/StringMapTest.cpp +61 -0
- data/test/cxx/TemplateTest.cpp +118 -0
- data/test/cxx/TestSupport.cpp +25 -68
- data/test/cxx/TestSupport.h +81 -41
- data/test/cxx/{LoggingTest.cpp → UnionStationTest.cpp} +79 -74
- data/test/cxx/UtilsTest.cpp +59 -5
- data/test/integration_tests/apache2_tests.rb +2 -2
- data/test/integration_tests/nginx_tests.rb +1 -1
- data/test/integration_tests/spec_helper.rb +7 -5
- data/test/oxt/oxt_test_main.cpp +2 -0
- data/test/oxt/syscall_interruption_test.cpp +1 -0
- data/test/ruby/classic_rails/loader_spec.rb +48 -0
- data/test/ruby/classic_rails/preloader_spec.rb +54 -0
- data/test/ruby/rack/loader_spec.rb +62 -0
- data/test/ruby/rack/preloader_spec.rb +74 -0
- data/test/ruby/{abstract_request_handler_spec.rb → request_handler_spec.rb} +31 -68
- data/test/ruby/shared/loader_spec.rb +241 -0
- data/test/ruby/shared/rails/analytics_logging_extensions_spec.rb +141 -182
- data/test/ruby/shared/ruby_loader_spec.rb +55 -0
- data/test/ruby/spec_helper.rb +8 -53
- data/test/ruby/utils/file_system_watcher_spec.rb +9 -1
- data/test/ruby/utils_spec.rb +10 -683
- data/test/stub/rack/config.ru +28 -3
- data/test/stub/rack/start.rb +47 -0
- data/test/stub/{rails_apps/2.3/foobar → rails2.3}/Rakefile +0 -0
- data/test/stub/{rails_apps/2.3/foobar → rails2.3}/app/controllers/application_controller.rb +0 -2
- data/test/stub/{rails_apps/2.3/foobar → rails2.3}/app/controllers/bar_controller_1.rb +0 -0
- data/test/stub/{rails_apps/2.3/foobar → rails2.3}/app/controllers/bar_controller_2.rb +0 -0
- data/test/stub/{rails_apps/2.3/foobar → rails2.3}/app/controllers/foo_controller.rb +0 -0
- data/test/stub/{rails_apps/2.3/foobar → rails2.3}/app/helpers/application_helper.rb +0 -0
- data/test/stub/{rails_apps/2.3/foobar → rails2.3}/config/boot.rb +0 -0
- data/test/stub/{rails_apps/2.3/foobar → rails2.3}/config/database.yml +3 -3
- data/test/stub/{rails_apps/2.3/foobar → rails2.3}/config/environment.rb +5 -2
- data/test/stub/{rails_apps/2.3/foobar → rails2.3}/config/environments/development.rb +0 -0
- data/test/stub/{rails_apps/2.3/foobar → rails2.3}/config/environments/production.rb +0 -0
- data/test/stub/{rails_apps/2.3/foobar → rails2.3}/config/environments/staging.rb +0 -0
- data/test/stub/{rails_apps/2.3/foobar → rails2.3}/config/initializers/inflections.rb +0 -0
- data/test/stub/{rails_apps/2.3/foobar → rails2.3}/config/initializers/mime_types.rb +0 -0
- data/test/stub/{rails_apps/2.3/foobar → rails2.3}/config/routes.rb +1 -0
- data/test/stub/{rails_apps/2.3/foobar → rails2.3}/script/about +0 -0
- data/test/stub/{rails_apps/2.3/foobar → rails2.3}/script/console +0 -0
- data/test/stub/{rails_apps/2.3/foobar → rails2.3}/script/dbconsole +0 -0
- data/test/stub/{rails_apps/2.3/foobar → rails2.3}/script/destroy +0 -0
- data/test/stub/{rails_apps/2.3/foobar → rails2.3}/script/generate +0 -0
- data/test/stub/{rails_apps/2.3/foobar → rails2.3}/script/performance/benchmarker +0 -0
- data/test/stub/{rails_apps/2.3/foobar → rails2.3}/script/performance/profiler +0 -0
- data/test/stub/{rails_apps/2.3/foobar → rails2.3}/script/performance/request +0 -0
- data/test/stub/{rails_apps/2.3/foobar → rails2.3}/script/plugin +0 -0
- data/test/stub/{rails_apps/2.3/foobar → rails2.3}/script/process/inspector +0 -0
- data/test/stub/{rails_apps/2.3/foobar → rails2.3}/script/process/reaper +0 -0
- data/test/stub/{rails_apps/2.3/foobar → rails2.3}/script/process/spawner +0 -0
- data/test/stub/{rails_apps/2.3/foobar → rails2.3}/script/runner +0 -0
- data/test/stub/{rails_apps/2.3/foobar → rails2.3}/script/server +0 -0
- data/test/stub/{rails_apps/3.0/empty → rails3.0}/Gemfile +0 -0
- data/test/stub/rails3.0/Gemfile.lock +80 -0
- data/test/stub/{rails_apps/3.0/empty → rails3.0}/Rakefile +0 -0
- data/test/stub/{rails_apps/3.0/empty → rails3.0}/app/controllers/application_controller.rb +0 -0
- data/test/stub/{rails_apps/3.0/empty → rails3.0}/app/helpers/application_helper.rb +0 -0
- data/test/stub/{rails_apps/3.0/empty → rails3.0}/app/views/layouts/application.html.erb +0 -0
- data/test/stub/{rails_apps/3.0/empty → rails3.0}/config.ru +0 -0
- data/test/stub/{rails_apps/3.0/empty → rails3.0}/config/application.rb +0 -0
- data/test/stub/{rails_apps/3.0/empty → rails3.0}/config/boot.rb +0 -0
- data/test/stub/{rails_apps/3.0/empty → rails3.0}/config/database.yml +0 -0
- data/test/stub/{rails_apps/3.0/empty → rails3.0}/config/environment.rb +0 -0
- data/test/stub/{rails_apps/3.0/empty → rails3.0}/config/environments/development.rb +0 -0
- data/test/stub/{rails_apps/3.0/empty → rails3.0}/config/environments/production.rb +0 -0
- data/test/stub/{rails_apps/3.0/empty → rails3.0}/config/environments/test.rb +0 -0
- data/test/stub/{rails_apps/3.0/empty → rails3.0}/config/initializers/backtrace_silencers.rb +0 -0
- data/test/stub/{rails_apps/3.0/empty → rails3.0}/config/initializers/inflections.rb +0 -0
- data/test/stub/{rails_apps/3.0/empty → rails3.0}/config/initializers/mime_types.rb +0 -0
- data/test/stub/{rails_apps/3.0/empty → rails3.0}/config/initializers/passenger.rb +0 -0
- data/test/stub/{rails_apps/3.0/empty → rails3.0}/config/initializers/secret_token.rb +0 -0
- data/test/stub/{rails_apps/3.0/empty → rails3.0}/config/initializers/session_store.rb +0 -0
- data/test/stub/{rails_apps/3.0/empty → rails3.0}/config/locales/en.yml +0 -0
- data/test/stub/{rails_apps/3.0/empty → rails3.0}/config/routes.rb +0 -0
- data/test/stub/{rails_apps/3.0/empty → rails3.0}/db/seeds.rb +0 -0
- data/test/stub/{rails_apps/3.0/empty → rails3.0}/doc/README_FOR_APP +0 -0
- data/test/stub/{rails_apps/3.0/empty → rails3.0}/public/404.html +0 -0
- data/test/stub/{rails_apps/3.0/empty → rails3.0}/public/422.html +0 -0
- data/test/stub/{rails_apps/3.0/empty → rails3.0}/public/500.html +0 -0
- data/test/stub/{rails_apps/3.0/empty → rails3.0}/public/favicon.ico +0 -0
- data/test/stub/{rails_apps/3.0/empty → rails3.0}/public/index.html +0 -0
- data/test/stub/{rails_apps/3.0/empty → rails3.0}/public/robots.txt +0 -0
- data/test/stub/{rails_apps/3.0/empty → rails3.0}/script/rails +0 -0
- data/test/stub/{rails_apps/3.0/empty → rails3.0}/test/performance/browsing_test.rb +0 -0
- data/test/stub/{rails_apps/3.0/empty → rails3.0}/test/test_helper.rb +0 -0
- data/test/stub/start_error.pl +24 -0
- data/test/stub/wsgi/passenger_wsgi.py +71 -3
- data/test/support/apache2_controller.rb +2 -2
- data/test/support/placebo-preloader.rb +88 -0
- data/test/support/test_helper.rb +1 -14
- data/test/tut/tut.h +11 -4
- metadata +590 -326
- data.tar.gz.asc +0 -12
- data/PACKAGING.TXT +0 -25
- data/build/config.rb +0 -46
- data/ext/apache2/HelperAgent.cpp +0 -364
- data/ext/boost/call_traits.hpp +0 -24
- data/ext/boost/detail/call_traits.hpp +0 -164
- data/ext/common/AbstractSpawnManager.h +0 -110
- data/ext/common/AgentBase.cpp +0 -432
- data/ext/common/ApplicationPool/Client.h +0 -788
- data/ext/common/ApplicationPool/Interface.h +0 -295
- data/ext/common/ApplicationPool/Pool.h +0 -1327
- data/ext/common/ApplicationPool/Server.h +0 -479
- data/ext/common/MessageChannel.h +0 -494
- data/ext/common/PoolOptions.h +0 -518
- data/ext/common/Process.h +0 -253
- data/ext/common/Session.h +0 -436
- data/ext/common/SpawnManager.h +0 -611
- data/ext/google/ChangeLog +0 -167
- data/ext/google/dense_hash_map +0 -310
- data/ext/google/dense_hash_set +0 -287
- data/ext/google/sparse_hash_map +0 -294
- data/ext/google/sparse_hash_set +0 -275
- data/ext/google/sparsehash/densehashtable.h +0 -1062
- data/ext/google/sparsehash/sparseconfig.h +0 -55
- data/ext/google/sparsehash/sparsehashtable.h +0 -1015
- data/ext/google/sparsetable +0 -1468
- data/ext/google/type_traits.h +0 -250
- data/ext/nginx/HelperAgent.cpp +0 -1355
- data/ext/nginx/ScgiRequestParser.h +0 -375
- data/ext/oxt/backtrace.cpp +0 -185
- data/ext/oxt/tracable_exception.cpp +0 -89
- data/helper-scripts/passenger-spawn-server +0 -106
- data/lib/phusion_passenger/abstract_request_handler.rb +0 -766
- data/lib/phusion_passenger/abstract_server.rb +0 -372
- data/lib/phusion_passenger/abstract_server_collection.rb +0 -335
- data/lib/phusion_passenger/app_process.rb +0 -174
- data/lib/phusion_passenger/classic_rails/application_spawner.rb +0 -344
- data/lib/phusion_passenger/classic_rails/framework_spawner.rb +0 -311
- data/lib/phusion_passenger/exceptions.rb +0 -103
- data/lib/phusion_passenger/html_template.rb +0 -107
- data/lib/phusion_passenger/rack/application_spawner.rb +0 -231
- data/lib/phusion_passenger/spawn_manager.rb +0 -359
- data/lib/phusion_passenger/templates/app_exited_during_initialization.html.erb +0 -38
- data/lib/phusion_passenger/templates/app_init_error.html.erb +0 -64
- data/lib/phusion_passenger/templates/database_error.html.erb +0 -66
- data/lib/phusion_passenger/templates/error_layout.html.erb +0 -39
- data/lib/phusion_passenger/templates/framework_init_error.html.erb +0 -39
- data/lib/phusion_passenger/templates/general_error.html.erb +0 -22
- data/lib/phusion_passenger/templates/load_error.html.erb +0 -46
- data/lib/phusion_passenger/templates/version_not_found.html.erb +0 -34
- data/lib/phusion_passenger/utils/rewindable_input.rb +0 -125
- data/lib/phusion_passenger/wsgi/application_spawner.rb +0 -108
- data/test/config.yml.example +0 -41
- data/test/cxx/ApplicationPool_PoolTest.cpp +0 -33
- data/test/cxx/ApplicationPool_PoolTestCases.cpp +0 -1029
- data/test/cxx/ApplicationPool_ServerTest.cpp +0 -308
- data/test/cxx/ApplicationPool_Server_PoolTest.cpp +0 -80
- data/test/cxx/MessageChannelTest.cpp +0 -557
- data/test/cxx/PoolOptionsTest.cpp +0 -116
- data/test/cxx/SpawnManagerTest.cpp +0 -161
- data/test/ruby/abstract_server_collection_spec.rb +0 -247
- data/test/ruby/abstract_server_spec.rb +0 -61
- data/test/ruby/app_process_spec.rb +0 -43
- data/test/ruby/classic_rails/application_spawner_spec.rb +0 -89
- data/test/ruby/classic_rails/framework_spawner_spec.rb +0 -92
- data/test/ruby/rack/application_spawner_spec.rb +0 -116
- data/test/ruby/shared/abstract_server_spec.rb +0 -23
- data/test/ruby/shared/spawners/classic_rails/framework_spawner_spec.rb +0 -38
- data/test/ruby/shared/spawners/classic_rails/lack_of_rails_gem_version_spec.rb +0 -19
- data/test/ruby/shared/spawners/classic_rails/spawner_spec.rb +0 -15
- data/test/ruby/shared/spawners/non_preloading_spawner_spec.rb +0 -27
- data/test/ruby/shared/spawners/preloading_spawner_spec.rb +0 -29
- data/test/ruby/shared/spawners/reload_all_spec.rb +0 -36
- data/test/ruby/shared/spawners/reload_single_spec.rb +0 -52
- data/test/ruby/shared/spawners/spawn_server_spec.rb +0 -28
- data/test/ruby/shared/spawners/spawner_spec.rb +0 -273
- data/test/ruby/shared/utils/pseudo_io_spec.rb +0 -60
- data/test/ruby/spawn_manager_spec.rb +0 -134
- data/test/ruby/wsgi/application_spawner_spec.rb +0 -50
- data/test/stub/message_channel.rb +0 -11
- data/test/stub/message_channel_2.rb +0 -12
- data/test/stub/message_channel_3.rb +0 -19
- data/test/stub/rails_apps/3.0/empty/Gemfile.lock +0 -73
- data/test/stub/spawn_server.rb +0 -22
- metadata.gz.asc +0 -12
@@ -58,7 +58,7 @@ class DirectoryMapper {
|
|
58
58
|
public:
|
59
59
|
enum ApplicationType {
|
60
60
|
NONE,
|
61
|
-
|
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
|
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 =
|
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 (
|
182
|
+
if (shouldAutoDetectClassicRails()
|
183
183
|
&& verifyRailsDir(config->getAppRoot(ap_document_root(r)), cstat, throttleRate)) {
|
184
184
|
baseURIKnown = true;
|
185
185
|
baseURI = "/";
|
186
|
-
appType =
|
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
|
266
|
-
return "rails";
|
265
|
+
case CLASSIC_RAILS:
|
266
|
+
return "classic-rails";
|
267
267
|
case RACK:
|
268
268
|
return "rack";
|
269
269
|
case WSGI:
|
data/ext/apache2/Hooks.cpp
CHANGED
@@ -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
|
-
*
|
267
|
-
*
|
268
|
-
*
|
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
|
-
|
226
|
+
FileDescriptor connectToHelperAgent() {
|
283
227
|
TRACE_POINT();
|
284
|
-
|
285
|
-
|
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
|
-
|
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
|
238
|
+
// Maybe the helper agent crashed. First wait 50 ms.
|
321
239
|
usleep(50000);
|
322
240
|
|
323
|
-
// Then try to reconnect to the helper
|
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
|
-
|
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() ==
|
331
|
-
// Looks like the helper
|
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
|
-
|
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
|
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
|
657
|
-
|
561
|
+
/********** Step 3: forwarding the request and request body
|
562
|
+
to the HelperAgent **********/
|
658
563
|
|
659
|
-
|
564
|
+
vector<StaticString> requestData;
|
565
|
+
string headerData;
|
566
|
+
unsigned int size;
|
567
|
+
char sizeString[16];
|
568
|
+
int ret;
|
660
569
|
|
661
|
-
|
662
|
-
|
663
|
-
|
664
|
-
|
665
|
-
|
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
|
-
|
708
|
-
|
576
|
+
ret = snprintf(sizeString, sizeof(sizeString) - 1, "%u:", size);
|
577
|
+
sizeString[ret] = '\0';
|
578
|
+
requestData[0] = StaticString(sizeString, ret);
|
709
579
|
|
710
|
-
{
|
711
|
-
|
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
|
-
|
716
|
-
|
717
|
-
|
718
|
-
|
719
|
-
|
720
|
-
|
721
|
-
|
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
|
-
|
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
|
841
|
+
void addHeader(string &headers, const char *name, const char *value) {
|
987
842
|
if (name != NULL && value != NULL) {
|
988
|
-
|
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
|
-
|
993
|
-
|
994
|
-
|
995
|
-
|
996
|
-
|
997
|
-
|
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(
|
879
|
+
addHeader(output, "SERVER_SOFTWARE", ap_get_server_banner());
|
1016
880
|
#else
|
1017
|
-
addHeader(
|
881
|
+
addHeader(output, "SERVER_SOFTWARE", ap_get_server_version());
|
1018
882
|
#endif
|
1019
|
-
addHeader(
|
1020
|
-
addHeader(
|
1021
|
-
addHeader(
|
1022
|
-
addHeader(
|
1023
|
-
addHeader(
|
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(
|
1026
|
-
addHeader(
|
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(
|
1029
|
-
addHeader(
|
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(
|
1032
|
-
addHeader(
|
1033
|
-
addHeader(
|
1034
|
-
addHeader(
|
1035
|
-
addHeader(
|
1036
|
-
addHeader(
|
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(
|
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(
|
920
|
+
addHeader(output, "REQUEST_URI", request_uri);
|
1057
921
|
}
|
1058
922
|
|
1059
923
|
if (strcmp(baseURI, "/") == 0) {
|
1060
|
-
addHeader(
|
1061
|
-
addHeader(
|
924
|
+
addHeader(output, "SCRIPT_NAME", "");
|
925
|
+
addHeader(output, "PATH_INFO", escapedUri);
|
1062
926
|
} else {
|
1063
|
-
addHeader(
|
1064
|
-
addHeader(
|
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(
|
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(
|
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
|
-
//
|
1098
|
-
|
1099
|
-
|
1100
|
-
|
1101
|
-
|
1102
|
-
|
1103
|
-
|
1104
|
-
|
1105
|
-
|
1106
|
-
|
1107
|
-
|
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
|
-
|
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(
|
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::
|
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,
|
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
|
-
|
1609
|
+
system("uname -a >&2");
|
1773
1610
|
|
1774
1611
|
fprintf(stderr, "\nOutput of 'ulimit -a' follows:\n");
|
1775
1612
|
fflush(stderr);
|
1776
|
-
|
1613
|
+
system("ulimit -a >&2");
|
1777
1614
|
|
1778
1615
|
return DECLINED;
|
1779
1616
|
|