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
data/ext/boost/call_traits.hpp
DELETED
@@ -1,24 +0,0 @@
|
|
1
|
-
// (C) Copyright Steve Cleary, Beman Dawes, Howard Hinnant & John Maddock 2000.
|
2
|
-
// Use, modification and distribution are subject to the Boost Software License,
|
3
|
-
// Version 1.0. (See accompanying file LICENSE_1_0.txt or copy at
|
4
|
-
// http://www.boost.org/LICENSE_1_0.txt).
|
5
|
-
//
|
6
|
-
// See http://www.boost.org/libs/utility for most recent version including documentation.
|
7
|
-
|
8
|
-
// See boost/detail/call_traits.hpp and boost/detail/ob_call_traits.hpp
|
9
|
-
// for full copyright notices.
|
10
|
-
|
11
|
-
#ifndef BOOST_CALL_TRAITS_HPP
|
12
|
-
#define BOOST_CALL_TRAITS_HPP
|
13
|
-
|
14
|
-
#ifndef BOOST_CONFIG_HPP
|
15
|
-
#include <boost/config.hpp>
|
16
|
-
#endif
|
17
|
-
|
18
|
-
#ifdef BOOST_NO_TEMPLATE_PARTIAL_SPECIALIZATION
|
19
|
-
#include <boost/detail/ob_call_traits.hpp>
|
20
|
-
#else
|
21
|
-
#include <boost/detail/call_traits.hpp>
|
22
|
-
#endif
|
23
|
-
|
24
|
-
#endif // BOOST_CALL_TRAITS_HPP
|
@@ -1,164 +0,0 @@
|
|
1
|
-
// (C) Copyright Steve Cleary, Beman Dawes, Howard Hinnant & John Maddock 2000.
|
2
|
-
// Use, modification and distribution are subject to the Boost Software License,
|
3
|
-
// Version 1.0. (See accompanying file LICENSE_1_0.txt or copy at
|
4
|
-
// http://www.boost.org/LICENSE_1_0.txt).
|
5
|
-
//
|
6
|
-
// See http://www.boost.org/libs/utility for most recent version including documentation.
|
7
|
-
|
8
|
-
// call_traits: defines typedefs for function usage
|
9
|
-
// (see libs/utility/call_traits.htm)
|
10
|
-
|
11
|
-
/* Release notes:
|
12
|
-
23rd July 2000:
|
13
|
-
Fixed array specialization. (JM)
|
14
|
-
Added Borland specific fixes for reference types
|
15
|
-
(issue raised by Steve Cleary).
|
16
|
-
*/
|
17
|
-
|
18
|
-
#ifndef BOOST_DETAIL_CALL_TRAITS_HPP
|
19
|
-
#define BOOST_DETAIL_CALL_TRAITS_HPP
|
20
|
-
|
21
|
-
#ifndef BOOST_CONFIG_HPP
|
22
|
-
#include <boost/config.hpp>
|
23
|
-
#endif
|
24
|
-
#include <cstddef>
|
25
|
-
|
26
|
-
#include <boost/type_traits/is_arithmetic.hpp>
|
27
|
-
#include <boost/type_traits/is_pointer.hpp>
|
28
|
-
#include <boost/detail/workaround.hpp>
|
29
|
-
|
30
|
-
namespace boost{
|
31
|
-
|
32
|
-
namespace detail{
|
33
|
-
|
34
|
-
template <typename T, bool small_>
|
35
|
-
struct ct_imp2
|
36
|
-
{
|
37
|
-
typedef const T& param_type;
|
38
|
-
};
|
39
|
-
|
40
|
-
template <typename T>
|
41
|
-
struct ct_imp2<T, true>
|
42
|
-
{
|
43
|
-
typedef const T param_type;
|
44
|
-
};
|
45
|
-
|
46
|
-
template <typename T, bool isp, bool b1>
|
47
|
-
struct ct_imp
|
48
|
-
{
|
49
|
-
typedef const T& param_type;
|
50
|
-
};
|
51
|
-
|
52
|
-
template <typename T, bool isp>
|
53
|
-
struct ct_imp<T, isp, true>
|
54
|
-
{
|
55
|
-
typedef typename ct_imp2<T, sizeof(T) <= sizeof(void*)>::param_type param_type;
|
56
|
-
};
|
57
|
-
|
58
|
-
template <typename T, bool b1>
|
59
|
-
struct ct_imp<T, true, b1>
|
60
|
-
{
|
61
|
-
typedef const T param_type;
|
62
|
-
};
|
63
|
-
|
64
|
-
}
|
65
|
-
|
66
|
-
template <typename T>
|
67
|
-
struct call_traits
|
68
|
-
{
|
69
|
-
public:
|
70
|
-
typedef T value_type;
|
71
|
-
typedef T& reference;
|
72
|
-
typedef const T& const_reference;
|
73
|
-
//
|
74
|
-
// C++ Builder workaround: we should be able to define a compile time
|
75
|
-
// constant and pass that as a single template parameter to ct_imp<T,bool>,
|
76
|
-
// however compiler bugs prevent this - instead pass three bool's to
|
77
|
-
// ct_imp<T,bool,bool,bool> and add an extra partial specialisation
|
78
|
-
// of ct_imp to handle the logic. (JM)
|
79
|
-
typedef typename boost::detail::ct_imp<
|
80
|
-
T,
|
81
|
-
::boost::is_pointer<T>::value,
|
82
|
-
::boost::is_arithmetic<T>::value
|
83
|
-
>::param_type param_type;
|
84
|
-
};
|
85
|
-
|
86
|
-
template <typename T>
|
87
|
-
struct call_traits<T&>
|
88
|
-
{
|
89
|
-
typedef T& value_type;
|
90
|
-
typedef T& reference;
|
91
|
-
typedef const T& const_reference;
|
92
|
-
typedef T& param_type; // hh removed const
|
93
|
-
};
|
94
|
-
|
95
|
-
#if BOOST_WORKAROUND( __BORLANDC__, < 0x5A0 )
|
96
|
-
// these are illegal specialisations; cv-qualifies applied to
|
97
|
-
// references have no effect according to [8.3.2p1],
|
98
|
-
// C++ Builder requires them though as it treats cv-qualified
|
99
|
-
// references as distinct types...
|
100
|
-
template <typename T>
|
101
|
-
struct call_traits<T&const>
|
102
|
-
{
|
103
|
-
typedef T& value_type;
|
104
|
-
typedef T& reference;
|
105
|
-
typedef const T& const_reference;
|
106
|
-
typedef T& param_type; // hh removed const
|
107
|
-
};
|
108
|
-
template <typename T>
|
109
|
-
struct call_traits<T&volatile>
|
110
|
-
{
|
111
|
-
typedef T& value_type;
|
112
|
-
typedef T& reference;
|
113
|
-
typedef const T& const_reference;
|
114
|
-
typedef T& param_type; // hh removed const
|
115
|
-
};
|
116
|
-
template <typename T>
|
117
|
-
struct call_traits<T&const volatile>
|
118
|
-
{
|
119
|
-
typedef T& value_type;
|
120
|
-
typedef T& reference;
|
121
|
-
typedef const T& const_reference;
|
122
|
-
typedef T& param_type; // hh removed const
|
123
|
-
};
|
124
|
-
|
125
|
-
template <typename T>
|
126
|
-
struct call_traits< T * >
|
127
|
-
{
|
128
|
-
typedef T * value_type;
|
129
|
-
typedef T * & reference;
|
130
|
-
typedef T * const & const_reference;
|
131
|
-
typedef T * const param_type; // hh removed const
|
132
|
-
};
|
133
|
-
#endif
|
134
|
-
#if !defined(BOOST_NO_ARRAY_TYPE_SPECIALIZATIONS)
|
135
|
-
template <typename T, std::size_t N>
|
136
|
-
struct call_traits<T [N]>
|
137
|
-
{
|
138
|
-
private:
|
139
|
-
typedef T array_type[N];
|
140
|
-
public:
|
141
|
-
// degrades array to pointer:
|
142
|
-
typedef const T* value_type;
|
143
|
-
typedef array_type& reference;
|
144
|
-
typedef const array_type& const_reference;
|
145
|
-
typedef const T* const param_type;
|
146
|
-
};
|
147
|
-
|
148
|
-
template <typename T, std::size_t N>
|
149
|
-
struct call_traits<const T [N]>
|
150
|
-
{
|
151
|
-
private:
|
152
|
-
typedef const T array_type[N];
|
153
|
-
public:
|
154
|
-
// degrades array to pointer:
|
155
|
-
typedef const T* value_type;
|
156
|
-
typedef array_type& reference;
|
157
|
-
typedef const array_type& const_reference;
|
158
|
-
typedef const T* const param_type;
|
159
|
-
};
|
160
|
-
#endif
|
161
|
-
|
162
|
-
}
|
163
|
-
|
164
|
-
#endif // BOOST_DETAIL_CALL_TRAITS_HPP
|
@@ -1,110 +0,0 @@
|
|
1
|
-
/*
|
2
|
-
* Phusion Passenger - http://www.modrails.com/
|
3
|
-
* Copyright (c) 2010 Phusion
|
4
|
-
*
|
5
|
-
* "Phusion Passenger" is a trademark of Hongli Lai & Ninh Bui.
|
6
|
-
*
|
7
|
-
* Permission is hereby granted, free of charge, to any person obtaining a copy
|
8
|
-
* of this software and associated documentation files (the "Software"), to deal
|
9
|
-
* in the Software without restriction, including without limitation the rights
|
10
|
-
* to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
|
11
|
-
* copies of the Software, and to permit persons to whom the Software is
|
12
|
-
* furnished to do so, subject to the following conditions:
|
13
|
-
*
|
14
|
-
* The above copyright notice and this permission notice shall be included in
|
15
|
-
* all copies or substantial portions of the Software.
|
16
|
-
*
|
17
|
-
* THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
|
18
|
-
* IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
|
19
|
-
* FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
|
20
|
-
* AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
|
21
|
-
* LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
|
22
|
-
* OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN
|
23
|
-
* THE SOFTWARE.
|
24
|
-
*/
|
25
|
-
#ifndef _PASSENGER_ABSTRACT_SPAWN_MANAGER_H_
|
26
|
-
#define _PASSENGER_ABSTRACT_SPAWN_MANAGER_H_
|
27
|
-
|
28
|
-
#include <string>
|
29
|
-
|
30
|
-
#include <boost/shared_ptr.hpp>
|
31
|
-
|
32
|
-
#include <unistd.h>
|
33
|
-
|
34
|
-
#include "Process.h"
|
35
|
-
#include "PoolOptions.h"
|
36
|
-
|
37
|
-
namespace Passenger {
|
38
|
-
|
39
|
-
using namespace std;
|
40
|
-
using namespace boost;
|
41
|
-
|
42
|
-
/**
|
43
|
-
* @brief Spawning of application processes.
|
44
|
-
*
|
45
|
-
* An AbstractSpawnManager is responsible for spawning new application processes.
|
46
|
-
* Use the spawn() method to do so. AbstractSpawnManager is guaranteed to be thread-safe.
|
47
|
-
*
|
48
|
-
* AbstractSpawnManager is just an interface. There are two concrete implementations,
|
49
|
-
* namely SpawnManager and StubSpawnManager. The former is the one that's usually used,
|
50
|
-
* while the latter exists for unit testing purposes.
|
51
|
-
*
|
52
|
-
* @ingroup Support
|
53
|
-
*/
|
54
|
-
class AbstractSpawnManager {
|
55
|
-
public:
|
56
|
-
virtual ~AbstractSpawnManager() { }
|
57
|
-
|
58
|
-
/**
|
59
|
-
* Spawn a new application process. Spawning details are to be passed
|
60
|
-
* via the <tt>options</tt> argument.
|
61
|
-
*
|
62
|
-
* If the spawn server died during the spawning process, then the server
|
63
|
-
* will be automatically restarted, and another spawn attempt will be made.
|
64
|
-
* If restarting the server fails, or if the second spawn attempt fails,
|
65
|
-
* then an exception will be thrown.
|
66
|
-
*
|
67
|
-
* @param options An object containing the details for this spawn operation,
|
68
|
-
* such as which application to spawn. See PoolOptions for details.
|
69
|
-
* @return A smart pointer to a Process object, which represents the application
|
70
|
-
* process that has been spawned. Use this object to communicate with the
|
71
|
-
* spawned process.
|
72
|
-
* @throws SpawnException Something went wrong.
|
73
|
-
* @throws boost::thread_interrupted
|
74
|
-
* @throws Anything thrown by options.environmentVariables->getItems().
|
75
|
-
*/
|
76
|
-
virtual ProcessPtr spawn(const PoolOptions &options) = 0;
|
77
|
-
|
78
|
-
/**
|
79
|
-
* Shutdown the ApplicationSpawner server that's running at the given
|
80
|
-
* application root. This method should be called when it's time to reload
|
81
|
-
* an application.
|
82
|
-
*
|
83
|
-
* @throws SystemException Unable to communicate with the spawn server,
|
84
|
-
* even after a restart.
|
85
|
-
* @throws SpawnException The spawn server died unexpectedly, and a
|
86
|
-
* restart was attempted, but it failed.
|
87
|
-
*/
|
88
|
-
virtual void reload(const string &appRoot) = 0;
|
89
|
-
|
90
|
-
/**
|
91
|
-
* Forcefully kill the spawn server. This AbstractSpawnManager's state will
|
92
|
-
* not be modified, so that it won't know that the spawn server is killed
|
93
|
-
* until next time it sends a command to it.
|
94
|
-
*
|
95
|
-
* Used within unit tests.
|
96
|
-
*/
|
97
|
-
virtual void killSpawnServer() const = 0;
|
98
|
-
|
99
|
-
/**
|
100
|
-
* Returns the spawn server's PID. Used within unit tests.
|
101
|
-
*/
|
102
|
-
virtual pid_t getServerPid() const = 0;
|
103
|
-
};
|
104
|
-
|
105
|
-
/** Convenient alias for AbstractSpawnManager smart pointer. */
|
106
|
-
typedef shared_ptr<AbstractSpawnManager> AbstractSpawnManagerPtr;
|
107
|
-
|
108
|
-
} // namespace Passenger
|
109
|
-
|
110
|
-
#endif /* _PASSENGER_ABSTRACT_SPAWN_MANAGER_H_ */
|
data/ext/common/AgentBase.cpp
DELETED
@@ -1,432 +0,0 @@
|
|
1
|
-
/*
|
2
|
-
* Phusion Passenger - http://www.modrails.com/
|
3
|
-
* Copyright (c) 2010 Phusion
|
4
|
-
*
|
5
|
-
* "Phusion Passenger" is a trademark of Hongli Lai & Ninh Bui.
|
6
|
-
*
|
7
|
-
* Permission is hereby granted, free of charge, to any person obtaining a copy
|
8
|
-
* of this software and associated documentation files (the "Software"), to deal
|
9
|
-
* in the Software without restriction, including without limitation the rights
|
10
|
-
* to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
|
11
|
-
* copies of the Software, and to permit persons to whom the Software is
|
12
|
-
* furnished to do so, subject to the following conditions:
|
13
|
-
*
|
14
|
-
* The above copyright notice and this permission notice shall be included in
|
15
|
-
* all copies or substantial portions of the Software.
|
16
|
-
*
|
17
|
-
* THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
|
18
|
-
* IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
|
19
|
-
* FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
|
20
|
-
* AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
|
21
|
-
* LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
|
22
|
-
* OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN
|
23
|
-
* THE SOFTWARE.
|
24
|
-
*/
|
25
|
-
#include <oxt/system_calls.hpp>
|
26
|
-
#include <oxt/backtrace.hpp>
|
27
|
-
#include <sys/types.h>
|
28
|
-
#include <cstdio>
|
29
|
-
#include <cstdlib>
|
30
|
-
#include <cstring>
|
31
|
-
#include <cerrno>
|
32
|
-
#include <fcntl.h>
|
33
|
-
#include <unistd.h>
|
34
|
-
#include <signal.h>
|
35
|
-
|
36
|
-
#if defined(__APPLE__) || defined(__linux__)
|
37
|
-
#define LIBC_HAS_BACKTRACE_FUNC
|
38
|
-
#endif
|
39
|
-
#ifdef LIBC_HAS_BACKTRACE_FUNC
|
40
|
-
#include <execinfo.h>
|
41
|
-
#endif
|
42
|
-
|
43
|
-
#include "Constants.h"
|
44
|
-
#include "AgentBase.h"
|
45
|
-
#include "Exceptions.h"
|
46
|
-
#include "Logging.h"
|
47
|
-
|
48
|
-
namespace Passenger {
|
49
|
-
|
50
|
-
static bool _feedbackFdAvailable = false;
|
51
|
-
static const char digits[] = {
|
52
|
-
'0', '1', '2', '3', '4', '5', '6', '7', '8', '9'
|
53
|
-
};
|
54
|
-
|
55
|
-
// Pre-allocate an alternative stack for use in signal handlers in case
|
56
|
-
// the normal stack isn't usable.
|
57
|
-
static char *alternativeStack;
|
58
|
-
static unsigned int alternativeStackSize;
|
59
|
-
|
60
|
-
static void
|
61
|
-
ignoreSigpipe() {
|
62
|
-
struct sigaction action;
|
63
|
-
action.sa_handler = SIG_IGN;
|
64
|
-
action.sa_flags = 0;
|
65
|
-
sigemptyset(&action.sa_mask);
|
66
|
-
sigaction(SIGPIPE, &action, NULL);
|
67
|
-
}
|
68
|
-
|
69
|
-
static bool
|
70
|
-
hasEnvOption(const char *name, bool defaultValue = false) {
|
71
|
-
const char *value = getenv(name);
|
72
|
-
if (value != NULL) {
|
73
|
-
if (*value != '\0') {
|
74
|
-
return strcmp(value, "yes") == 0
|
75
|
-
|| strcmp(value, "y") == 0
|
76
|
-
|| strcmp(value, "1") == 0
|
77
|
-
|| strcmp(value, "on") == 0
|
78
|
-
|| strcmp(value, "true") == 0;
|
79
|
-
} else {
|
80
|
-
return defaultValue;
|
81
|
-
}
|
82
|
-
} else {
|
83
|
-
return defaultValue;
|
84
|
-
}
|
85
|
-
}
|
86
|
-
|
87
|
-
// No idea whether strlen() is async signal safe, but let's not risk it
|
88
|
-
// and write our own version instead that's guaranteed to be safe.
|
89
|
-
static size_t
|
90
|
-
safeStrlen(const char *str) {
|
91
|
-
size_t size = 0;
|
92
|
-
while (*str != '\0') {
|
93
|
-
str++;
|
94
|
-
size++;
|
95
|
-
}
|
96
|
-
return size;
|
97
|
-
}
|
98
|
-
|
99
|
-
// Must be async signal safe.
|
100
|
-
static char *
|
101
|
-
appendText(char *buf, const char *text) {
|
102
|
-
size_t len = safeStrlen(text);
|
103
|
-
strcpy(buf, text);
|
104
|
-
return buf + len;
|
105
|
-
}
|
106
|
-
|
107
|
-
// Must be async signal safe.
|
108
|
-
static void
|
109
|
-
reverse(char *str, size_t len) {
|
110
|
-
char *p1, *p2;
|
111
|
-
if (*str == '\0') {
|
112
|
-
return;
|
113
|
-
}
|
114
|
-
for (p1 = str, p2 = str + len - 1; p2 > p1; ++p1, --p2) {
|
115
|
-
*p1 ^= *p2;
|
116
|
-
*p2 ^= *p1;
|
117
|
-
*p1 ^= *p2;
|
118
|
-
}
|
119
|
-
}
|
120
|
-
|
121
|
-
// Must be async signal safe.
|
122
|
-
static char *
|
123
|
-
appendULL(char *buf, unsigned long long value) {
|
124
|
-
unsigned long long remainder = value;
|
125
|
-
unsigned int size = 0;
|
126
|
-
|
127
|
-
do {
|
128
|
-
buf[size] = digits[remainder % 10];
|
129
|
-
remainder = remainder / 10;
|
130
|
-
size++;
|
131
|
-
} while (remainder != 0);
|
132
|
-
|
133
|
-
reverse(buf, size);
|
134
|
-
return buf + size;
|
135
|
-
}
|
136
|
-
|
137
|
-
static char *
|
138
|
-
appendSignalName(char *buf, int signo) {
|
139
|
-
switch (signo) {
|
140
|
-
case SIGABRT:
|
141
|
-
buf = appendText(buf, "SIGABRT");
|
142
|
-
break;
|
143
|
-
case SIGSEGV:
|
144
|
-
buf = appendText(buf, "SIGSEGV");
|
145
|
-
break;
|
146
|
-
case SIGBUS:
|
147
|
-
buf = appendText(buf, "SIGBUS");
|
148
|
-
break;
|
149
|
-
default:
|
150
|
-
return appendULL(buf, (unsigned long long) signo);
|
151
|
-
}
|
152
|
-
buf = appendText(buf, "(");
|
153
|
-
buf = appendULL(buf, (unsigned long long) signo);
|
154
|
-
buf = appendText(buf, ")");
|
155
|
-
return buf;
|
156
|
-
}
|
157
|
-
|
158
|
-
#define SI_CODE_HANDLER(name) \
|
159
|
-
case name: \
|
160
|
-
buf = appendText(buf, #name); \
|
161
|
-
break
|
162
|
-
|
163
|
-
// Must be async signal safe.
|
164
|
-
static char *
|
165
|
-
appendSignalReason(char *buf, siginfo_t *info) {
|
166
|
-
bool handled = true;
|
167
|
-
|
168
|
-
switch (info->si_code) {
|
169
|
-
SI_CODE_HANDLER(SI_USER);
|
170
|
-
#ifdef SI_KERNEL
|
171
|
-
SI_CODE_HANDLER(SI_KERNEL);
|
172
|
-
#endif
|
173
|
-
SI_CODE_HANDLER(SI_QUEUE);
|
174
|
-
SI_CODE_HANDLER(SI_TIMER);
|
175
|
-
#ifdef SI_ASYNCIO
|
176
|
-
SI_CODE_HANDLER(SI_ASYNCIO);
|
177
|
-
#endif
|
178
|
-
#ifdef SI_MESGQ
|
179
|
-
SI_CODE_HANDLER(SI_MESGQ);
|
180
|
-
#endif
|
181
|
-
#ifdef SI_SIGIO
|
182
|
-
SI_CODE_HANDLER(SI_SIGIO);
|
183
|
-
#endif
|
184
|
-
#ifdef SI_TKILL
|
185
|
-
SI_CODE_HANDLER(SI_TKILL);
|
186
|
-
#endif
|
187
|
-
default:
|
188
|
-
switch (info->si_signo) {
|
189
|
-
case SIGSEGV:
|
190
|
-
switch (info->si_code) {
|
191
|
-
#ifdef SEGV_MAPERR
|
192
|
-
SI_CODE_HANDLER(SEGV_MAPERR);
|
193
|
-
#endif
|
194
|
-
#ifdef SEGV_ACCERR
|
195
|
-
SI_CODE_HANDLER(SEGV_ACCERR);
|
196
|
-
#endif
|
197
|
-
default:
|
198
|
-
handled = false;
|
199
|
-
break;
|
200
|
-
}
|
201
|
-
break;
|
202
|
-
case SIGBUS:
|
203
|
-
switch (info->si_code) {
|
204
|
-
#ifdef BUS_ADRALN
|
205
|
-
SI_CODE_HANDLER(BUS_ADRALN);
|
206
|
-
#endif
|
207
|
-
#ifdef BUS_ADRERR
|
208
|
-
SI_CODE_HANDLER(BUS_ADRERR);
|
209
|
-
#endif
|
210
|
-
#ifdef BUS_OBJERR
|
211
|
-
SI_CODE_HANDLER(BUS_OBJERR);
|
212
|
-
#endif
|
213
|
-
default:
|
214
|
-
handled = false;
|
215
|
-
break;
|
216
|
-
}
|
217
|
-
break;
|
218
|
-
};
|
219
|
-
if (!handled) {
|
220
|
-
buf = appendText(buf, "#");
|
221
|
-
buf = appendULL(buf, (unsigned long long) info->si_code);
|
222
|
-
}
|
223
|
-
break;
|
224
|
-
}
|
225
|
-
|
226
|
-
if (info->si_code <= 0) {
|
227
|
-
buf = appendText(buf, ", signal sent by PID ");
|
228
|
-
buf = appendULL(buf, (unsigned long long) info->si_pid);
|
229
|
-
buf = appendText(buf, " with UID ");
|
230
|
-
buf = appendULL(buf, (unsigned long long) info->si_uid);
|
231
|
-
}
|
232
|
-
|
233
|
-
return buf;
|
234
|
-
}
|
235
|
-
|
236
|
-
static void
|
237
|
-
abortHandler(int signo, siginfo_t *info, void *ctx) {
|
238
|
-
pid_t pid = getpid();
|
239
|
-
char messageBuf[1024];
|
240
|
-
#ifdef LIBC_HAS_BACKTRACE_FUNC
|
241
|
-
void *backtraceStore[512];
|
242
|
-
backtraceStore[0] = '\0'; // Don't let gdb print uninitialized contents.
|
243
|
-
#endif
|
244
|
-
|
245
|
-
char *end = messageBuf;
|
246
|
-
end = appendText(end, "[ pid=");
|
247
|
-
end = appendULL(end, (unsigned long long) pid);
|
248
|
-
end = appendText(end, ", timestamp=");
|
249
|
-
end = appendULL(end, (unsigned long long) time(NULL));
|
250
|
-
end = appendText(end, " ] Process aborted! signo=");
|
251
|
-
end = appendSignalName(end, signo);
|
252
|
-
end = appendText(end, ", reason=");
|
253
|
-
end = appendSignalReason(end, info);
|
254
|
-
|
255
|
-
// It is important that writing the message and the backtrace are two
|
256
|
-
// seperate operations because it's not entirely clear whether the
|
257
|
-
// latter is async signal safe and thus can crash.
|
258
|
-
#ifdef LIBC_HAS_BACKTRACE_FUNC
|
259
|
-
end = appendText(end, ", backtrace available.\n");
|
260
|
-
#else
|
261
|
-
end = appendText(end, "\n");
|
262
|
-
#endif
|
263
|
-
write(STDERR_FILENO, messageBuf, end - messageBuf);
|
264
|
-
|
265
|
-
#ifdef LIBC_HAS_BACKTRACE_FUNC
|
266
|
-
/* For some reason, it would appear that fatal signal
|
267
|
-
* handlers have a deadline on some systems: the process will
|
268
|
-
* be killed if the signal handler doesn't finish in time.
|
269
|
-
* This killing appears to be triggered at some system calls,
|
270
|
-
* including but not limited to nanosleep().
|
271
|
-
* backtrace() might be slow and running crash-watch is
|
272
|
-
* definitely slow, so we do our work in a child process
|
273
|
-
* in order not to be affected by the deadline. But preferably
|
274
|
-
* we don't fork because forking will cause us to lose
|
275
|
-
* thread information.
|
276
|
-
*/
|
277
|
-
#ifdef __linux__
|
278
|
-
bool hasDeadline = false;
|
279
|
-
#else
|
280
|
-
// Mac OS X has a deadline. Not sure about other systems.
|
281
|
-
bool hasDeadline = true;
|
282
|
-
#endif
|
283
|
-
if (!hasDeadline || fork() == 0) {
|
284
|
-
int frames = backtrace(backtraceStore, sizeof(backtraceStore) / sizeof(void *));
|
285
|
-
end = messageBuf;
|
286
|
-
end = appendText(end, "--------------------------------------\n");
|
287
|
-
end = appendText(end, "[ pid=");
|
288
|
-
end = appendULL(end, (unsigned long long) pid);
|
289
|
-
end = appendText(end, " ] Backtrace with ");
|
290
|
-
end = appendULL(end, (unsigned long long) frames);
|
291
|
-
end = appendText(end, " frames:\n");
|
292
|
-
write(STDERR_FILENO, messageBuf, end - messageBuf);
|
293
|
-
backtrace_symbols_fd(backtraceStore, frames, STDERR_FILENO);
|
294
|
-
|
295
|
-
end = messageBuf;
|
296
|
-
end = appendText(end, "--------------------------------------\n");
|
297
|
-
end = appendText(end, "[ pid=");
|
298
|
-
end = appendULL(end, (unsigned long long) pid);
|
299
|
-
end = appendText(end, " ] Dumping a more detailed backtrace with crash-watch "
|
300
|
-
"('gem install crash-watch' if you don't have it)...\n");
|
301
|
-
write(STDERR_FILENO, messageBuf, end - messageBuf);
|
302
|
-
|
303
|
-
end = messageBuf;
|
304
|
-
end = appendText(end, "crash-watch --dump ");
|
305
|
-
end = appendULL(end, (unsigned long long) getpid());
|
306
|
-
*end = '\0';
|
307
|
-
::system(messageBuf);
|
308
|
-
_exit(1);
|
309
|
-
}
|
310
|
-
#endif
|
311
|
-
|
312
|
-
// Run default signal handler.
|
313
|
-
kill(getpid(), signo);
|
314
|
-
}
|
315
|
-
|
316
|
-
static void
|
317
|
-
installAbortHandler() {
|
318
|
-
alternativeStackSize = MINSIGSTKSZ + 64 * 1024;
|
319
|
-
alternativeStack = (char *) malloc(alternativeStackSize);
|
320
|
-
if (alternativeStack == NULL) {
|
321
|
-
fprintf(stderr, "Cannot allocate an alternative with a size of %u bytes!\n",
|
322
|
-
alternativeStackSize);
|
323
|
-
fflush(stderr);
|
324
|
-
abort();
|
325
|
-
}
|
326
|
-
|
327
|
-
stack_t stack;
|
328
|
-
stack.ss_sp = alternativeStack;
|
329
|
-
stack.ss_size = alternativeStackSize;
|
330
|
-
stack.ss_flags = 0;
|
331
|
-
if (sigaltstack(&stack, NULL) != 0) {
|
332
|
-
int e = errno;
|
333
|
-
fprintf(stderr, "Cannot install an alternative stack for use in signal handlers: %s (%d)\n",
|
334
|
-
strerror(e), e);
|
335
|
-
fflush(stderr);
|
336
|
-
abort();
|
337
|
-
}
|
338
|
-
|
339
|
-
struct sigaction action;
|
340
|
-
action.sa_sigaction = abortHandler;
|
341
|
-
action.sa_flags = SA_RESETHAND | SA_SIGINFO;
|
342
|
-
sigemptyset(&action.sa_mask);
|
343
|
-
sigaction(SIGABRT, &action, NULL);
|
344
|
-
sigaction(SIGSEGV, &action, NULL);
|
345
|
-
sigaction(SIGBUS, &action, NULL);
|
346
|
-
}
|
347
|
-
|
348
|
-
bool
|
349
|
-
feedbackFdAvailable() {
|
350
|
-
return _feedbackFdAvailable;
|
351
|
-
}
|
352
|
-
|
353
|
-
VariantMap
|
354
|
-
initializeAgent(int argc, char *argv[], const char *processName) {
|
355
|
-
TRACE_POINT();
|
356
|
-
VariantMap options;
|
357
|
-
|
358
|
-
ignoreSigpipe();
|
359
|
-
if (hasEnvOption("PASSENGER_ABORT_HANDLER", true)) {
|
360
|
-
installAbortHandler();
|
361
|
-
}
|
362
|
-
setup_syscall_interruption_support();
|
363
|
-
setvbuf(stdout, NULL, _IONBF, 0);
|
364
|
-
setvbuf(stderr, NULL, _IONBF, 0);
|
365
|
-
|
366
|
-
try {
|
367
|
-
if (argc == 1) {
|
368
|
-
int ret = fcntl(FEEDBACK_FD, F_GETFL);
|
369
|
-
if (ret == -1) {
|
370
|
-
if (errno == EBADF) {
|
371
|
-
fprintf(stderr,
|
372
|
-
"You're not supposed to start this program from the command line. "
|
373
|
-
"It's used internally by Phusion Passenger.\n");
|
374
|
-
exit(1);
|
375
|
-
} else {
|
376
|
-
int e = errno;
|
377
|
-
fprintf(stderr,
|
378
|
-
"Encountered an error in feedback file descriptor 3: %s (%d)\n",
|
379
|
-
strerror(e), e);
|
380
|
-
exit(1);
|
381
|
-
}
|
382
|
-
} else {
|
383
|
-
_feedbackFdAvailable = true;
|
384
|
-
options.readFrom(FEEDBACK_FD);
|
385
|
-
if (options.getBool("fire_and_forget", false)) {
|
386
|
-
_feedbackFdAvailable = false;
|
387
|
-
close(FEEDBACK_FD);
|
388
|
-
}
|
389
|
-
}
|
390
|
-
} else {
|
391
|
-
options.readFrom((const char **) argv + 1, argc - 1);
|
392
|
-
}
|
393
|
-
|
394
|
-
setLogLevel(options.getInt("log_level", false, 0));
|
395
|
-
if (!options.get("debug_log_file", false).empty()) {
|
396
|
-
if (strcmp(processName, "PassengerWatchdog") == 0) {
|
397
|
-
/* Have the watchdog set STDOUT and STDERR to the debug
|
398
|
-
* log file so that system abort() calls that stuff
|
399
|
-
* are properly logged.
|
400
|
-
*/
|
401
|
-
string filename = options.get("debug_log_file");
|
402
|
-
options.erase("debug_log_file");
|
403
|
-
|
404
|
-
int fd = open(filename.c_str(), O_CREAT | O_WRONLY | O_APPEND, 0644);
|
405
|
-
if (fd == -1) {
|
406
|
-
int e = errno;
|
407
|
-
throw FileSystemException("Cannot open debug log file " +
|
408
|
-
filename, e, filename);
|
409
|
-
}
|
410
|
-
|
411
|
-
dup2(fd, STDOUT_FILENO);
|
412
|
-
dup2(fd, STDERR_FILENO);
|
413
|
-
close(fd);
|
414
|
-
} else {
|
415
|
-
setDebugFile(options.get("debug_log_file").c_str());
|
416
|
-
}
|
417
|
-
}
|
418
|
-
} catch (const tracable_exception &e) {
|
419
|
-
P_ERROR("*** ERROR: " << e.what() << "\n" << e.backtrace());
|
420
|
-
exit(1);
|
421
|
-
}
|
422
|
-
|
423
|
-
// Change process title.
|
424
|
-
strncpy(argv[0], processName, strlen(argv[0]));
|
425
|
-
for (int i = 1; i < argc; i++) {
|
426
|
-
memset(argv[i], '\0', strlen(argv[i]));
|
427
|
-
}
|
428
|
-
|
429
|
-
return options;
|
430
|
-
}
|
431
|
-
|
432
|
-
} // namespace Passenger
|