passenger 3.0.0 → 3.0.1
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 +9 -6
- data/NEWS +50 -0
- data/Rakefile +2 -1
- data/bin/passenger-install-apache2-module +4 -4
- data/bin/passenger-install-nginx-module +1 -1
- data/bin/passenger-make-enterprisey +1 -1
- data/build/agents.rb +26 -19
- data/build/apache2.rb +49 -46
- data/build/basics.rb +37 -13
- data/build/common_library.rb +134 -64
- data/build/config.rb +18 -11
- data/build/cplusplus_support.rb +4 -0
- data/build/cxx_tests.rb +26 -12
- data/build/documentation.rb +18 -11
- data/build/integration_tests.rb +18 -11
- data/build/misc.rb +18 -11
- data/build/nginx.rb +27 -19
- data/build/oxt_tests.rb +18 -11
- data/build/packaging.rb +45 -37
- data/build/rpm.rb +98 -0
- data/build/ruby_extension.rb +19 -13
- data/build/ruby_tests.rb +19 -12
- data/build/test_basics.rb +23 -11
- data/debian/README.Debian +15 -0
- data/debian/changelog +185 -0
- data/debian/control +47 -19
- data/debian/copyright +20 -0
- data/debian/libapache2-mod-passenger.install +1 -0
- data/debian/libapache2-mod-passenger.postinst +36 -0
- data/debian/libapache2-mod-passenger.prerm +15 -0
- data/debian/passenger-common.install +4 -0
- data/debian/passenger.conf +4 -0
- data/debian/passenger.load +1 -0
- data/debian/rules +37 -0
- data/debian/watch +3 -0
- data/{misc → dev}/copy_boost_headers.rb +3 -0
- data/{misc → dev}/find_owner_pipe_leaks.rb +0 -0
- data/{misc → dev}/render_error_pages.rb +0 -0
- data/doc/Users guide Apache.html +39 -1
- data/doc/Users guide Apache.txt +40 -0
- data/doc/Users guide Nginx.html +1 -1
- data/doc/Users guide Standalone.html +1 -1
- data/doc/cxxapi/Constants_8h_source.html +1 -1
- data/doc/cxxapi/DirectoryMapper_8h_source.html +6 -22
- data/doc/cxxapi/EventedClient_8h_source.html +572 -468
- data/doc/cxxapi/Exceptions_8h_source.html +142 -129
- data/doc/cxxapi/FileDescriptor_8h_source.html +263 -199
- data/doc/cxxapi/MessageChannel_8h_source.html +686 -770
- data/doc/cxxapi/MessageServer_8h_source.html +1 -1
- data/doc/cxxapi/PoolOptions_8h_source.html +79 -78
- data/doc/cxxapi/ResourceLocator_8h_source.html +105 -55
- data/doc/cxxapi/SafeLibev_8h_source.html +180 -0
- data/doc/cxxapi/ServerInstanceDir_8h_source.html +114 -110
- data/doc/cxxapi/Session_8h_source.html +1 -1
- data/doc/cxxapi/SpawnManager_8h_source.html +208 -208
- data/doc/cxxapi/StaticString_8h_source.html +258 -183
- data/doc/cxxapi/Utils_8h_source.html +71 -54
- data/doc/cxxapi/annotated.html +3 -0
- data/doc/cxxapi/classAgentWatcher.html +2 -2
- data/doc/cxxapi/classPassenger_1_1DirectoryMapper-members.html +0 -1
- data/doc/cxxapi/classPassenger_1_1DirectoryMapper.html +0 -27
- data/doc/cxxapi/classPassenger_1_1EventedClient-members.html +5 -0
- data/doc/cxxapi/classPassenger_1_1EventedClient.html +102 -7
- data/doc/cxxapi/classPassenger_1_1FileDescriptor-members.html +2 -1
- data/doc/cxxapi/classPassenger_1_1FileDescriptor.html +34 -8
- data/doc/cxxapi/classPassenger_1_1FileDescriptorPair-members.html +36 -0
- data/doc/cxxapi/classPassenger_1_1FileDescriptorPair.html +52 -0
- data/doc/cxxapi/classPassenger_1_1MessageChannel-members.html +0 -3
- data/doc/cxxapi/classPassenger_1_1MessageChannel.html +0 -120
- data/doc/cxxapi/classPassenger_1_1SafeLibev-members.html +36 -0
- data/doc/cxxapi/classPassenger_1_1SafeLibev.html +51 -0
- data/doc/cxxapi/classPassenger_1_1SpawnException-members.html +1 -0
- data/doc/cxxapi/classPassenger_1_1SpawnException.html +22 -0
- data/doc/cxxapi/classes.html +14 -14
- data/doc/cxxapi/files.html +2 -0
- data/doc/cxxapi/functions_0x63.html +6 -3
- data/doc/cxxapi/functions_0x64.html +9 -2
- data/doc/cxxapi/functions_0x67.html +6 -9
- data/doc/cxxapi/functions_0x69.html +3 -0
- data/doc/cxxapi/functions_0x77.html +8 -8
- data/doc/cxxapi/functions_eval.html +6 -0
- data/doc/cxxapi/functions_func.html +18 -17
- data/doc/cxxapi/functions_vars.html +8 -0
- data/doc/cxxapi/graph_legend.png +0 -0
- data/doc/cxxapi/group__Core.png +0 -0
- data/doc/cxxapi/group__Hooks.png +0 -0
- data/doc/cxxapi/hierarchy.html +3 -0
- data/doc/cxxapi/inherit__graph__14.map +1 -1
- data/doc/cxxapi/inherit__graph__14.md5 +1 -1
- data/doc/cxxapi/inherit__graph__14.png +0 -0
- data/doc/cxxapi/inherit__graph__15.map +1 -3
- data/doc/cxxapi/inherit__graph__15.md5 +1 -1
- data/doc/cxxapi/inherit__graph__15.png +0 -0
- data/doc/cxxapi/inherit__graph__16.map +3 -1
- data/doc/cxxapi/inherit__graph__16.md5 +1 -1
- data/doc/cxxapi/inherit__graph__16.png +0 -0
- data/doc/cxxapi/inherit__graph__17.map +1 -1
- data/doc/cxxapi/inherit__graph__17.md5 +1 -1
- data/doc/cxxapi/inherit__graph__17.png +0 -0
- data/doc/cxxapi/inherit__graph__18.map +1 -2
- data/doc/cxxapi/inherit__graph__18.md5 +1 -1
- data/doc/cxxapi/inherit__graph__18.png +0 -0
- data/doc/cxxapi/inherit__graph__19.map +2 -1
- data/doc/cxxapi/inherit__graph__19.md5 +1 -1
- data/doc/cxxapi/inherit__graph__19.png +0 -0
- data/doc/cxxapi/inherit__graph__20.map +1 -1
- data/doc/cxxapi/inherit__graph__20.md5 +1 -1
- data/doc/cxxapi/inherit__graph__20.png +0 -0
- data/doc/cxxapi/inherit__graph__21.map +1 -1
- data/doc/cxxapi/inherit__graph__21.md5 +1 -1
- data/doc/cxxapi/inherit__graph__21.png +0 -0
- data/doc/cxxapi/inherit__graph__22.map +1 -1
- data/doc/cxxapi/inherit__graph__22.md5 +1 -1
- data/doc/cxxapi/inherit__graph__22.png +0 -0
- data/doc/cxxapi/inherit__graph__23.map +1 -1
- data/doc/cxxapi/inherit__graph__23.md5 +1 -1
- data/doc/cxxapi/inherit__graph__23.png +0 -0
- data/doc/cxxapi/inherit__graph__24.map +1 -1
- data/doc/cxxapi/inherit__graph__24.md5 +1 -1
- data/doc/cxxapi/inherit__graph__24.png +0 -0
- data/doc/cxxapi/inherit__graph__25.map +1 -1
- data/doc/cxxapi/inherit__graph__25.md5 +1 -1
- data/doc/cxxapi/inherit__graph__25.png +0 -0
- data/doc/cxxapi/inherit__graph__26.map +1 -1
- data/doc/cxxapi/inherit__graph__26.md5 +1 -1
- data/doc/cxxapi/inherit__graph__26.png +0 -0
- data/doc/cxxapi/inherit__graph__27.map +1 -1
- data/doc/cxxapi/inherit__graph__27.md5 +1 -1
- data/doc/cxxapi/inherit__graph__27.png +0 -0
- data/doc/cxxapi/inherit__graph__28.map +1 -2
- data/doc/cxxapi/inherit__graph__28.md5 +1 -1
- data/doc/cxxapi/inherit__graph__28.png +0 -0
- data/doc/cxxapi/inherit__graph__29.map +1 -1
- data/doc/cxxapi/inherit__graph__29.md5 +1 -1
- data/doc/cxxapi/inherit__graph__29.png +0 -0
- data/doc/cxxapi/inherit__graph__30.map +1 -1
- data/doc/cxxapi/inherit__graph__30.md5 +1 -1
- data/doc/cxxapi/inherit__graph__30.png +0 -0
- data/doc/cxxapi/inherit__graph__31.map +2 -1
- data/doc/cxxapi/inherit__graph__31.md5 +1 -1
- data/doc/cxxapi/inherit__graph__31.png +0 -0
- data/doc/cxxapi/inherit__graph__32.map +1 -3
- data/doc/cxxapi/inherit__graph__32.md5 +1 -1
- data/doc/cxxapi/inherit__graph__32.png +0 -0
- data/doc/cxxapi/inherit__graph__33.map +1 -1
- data/doc/cxxapi/inherit__graph__33.md5 +1 -1
- data/doc/cxxapi/inherit__graph__33.png +0 -0
- data/doc/cxxapi/inherit__graph__34.map +1 -1
- data/doc/cxxapi/inherit__graph__34.md5 +1 -1
- data/doc/cxxapi/inherit__graph__34.png +0 -0
- data/doc/cxxapi/inherit__graph__35.map +3 -1
- data/doc/cxxapi/inherit__graph__35.md5 +1 -1
- data/doc/cxxapi/inherit__graph__35.png +0 -0
- data/doc/cxxapi/inherit__graph__36.map +1 -1
- data/doc/cxxapi/inherit__graph__36.md5 +1 -1
- data/doc/cxxapi/inherit__graph__36.png +0 -0
- data/doc/cxxapi/inherit__graph__37.map +1 -1
- data/doc/cxxapi/inherit__graph__37.md5 +1 -1
- data/doc/cxxapi/inherit__graph__37.png +0 -0
- data/doc/cxxapi/inherit__graph__38.map +3 -1
- data/doc/cxxapi/inherit__graph__38.md5 +1 -1
- data/doc/cxxapi/inherit__graph__38.png +0 -0
- data/doc/cxxapi/inherit__graph__39.map +3 -1
- data/doc/cxxapi/inherit__graph__39.md5 +1 -1
- data/doc/cxxapi/inherit__graph__39.png +0 -0
- data/doc/cxxapi/inherits.html +33 -24
- data/doc/cxxapi/namespacePassenger.html +52 -0
- data/doc/cxxapi/namespacemembers.html +6 -0
- data/doc/cxxapi/namespacemembers_func.html +6 -0
- data/doc/cxxapi/tree.html +8 -0
- data/ext/apache2/Configuration.cpp +30 -8
- data/ext/apache2/Configuration.hpp +15 -14
- data/ext/apache2/DirectoryMapper.h +0 -16
- data/ext/apache2/Hooks.cpp +30 -29
- data/ext/boost/algorithm/string/detail/case_conv.hpp +6 -6
- data/ext/boost/algorithm/string/detail/find_format.hpp +14 -4
- data/ext/boost/algorithm/string/detail/find_format_all.hpp +13 -3
- data/ext/boost/algorithm/string/detail/find_format_store.hpp +11 -0
- data/ext/boost/algorithm/string/erase.hpp +2 -2
- data/ext/boost/bind/placeholders.hpp +2 -2
- data/ext/boost/concept/detail/backward_compatibility.hpp +16 -0
- data/ext/boost/concept/detail/general.hpp +15 -6
- data/ext/boost/concept/detail/has_constraints.hpp +5 -3
- data/ext/boost/concept/usage.hpp +5 -4
- data/ext/boost/concept_check.hpp +10 -1
- data/ext/boost/config/abi/borland_prefix.hpp +1 -1
- data/ext/boost/config/auto_link.hpp +68 -21
- data/ext/boost/config/compiler/borland.hpp +11 -3
- data/ext/boost/config/compiler/clang.hpp +62 -0
- data/ext/boost/config/compiler/codegear.hpp +21 -7
- data/ext/boost/config/compiler/common_edg.hpp +4 -2
- data/ext/boost/config/compiler/digitalmars.hpp +1 -1
- data/ext/boost/config/compiler/gcc.hpp +46 -7
- data/ext/boost/config/compiler/gcc_xml.hpp +25 -0
- data/ext/boost/config/compiler/intel.hpp +23 -0
- data/ext/boost/config/compiler/kai.hpp +1 -1
- data/ext/boost/config/compiler/metrowerks.hpp +1 -1
- data/ext/boost/config/compiler/nvcc.hpp +86 -0
- data/ext/boost/config/compiler/pgi.hpp +18 -3
- data/ext/boost/config/compiler/sunpro_cc.hpp +19 -5
- data/ext/boost/config/compiler/vacpp.hpp +8 -0
- data/ext/boost/config/compiler/visualc.hpp +27 -11
- data/ext/boost/config/platform/cygwin.hpp +0 -3
- data/ext/boost/config/platform/symbian.hpp +94 -0
- data/ext/boost/config/platform/win32.hpp +8 -1
- data/ext/boost/config/select_compiler_config.hpp +10 -0
- data/ext/boost/config/select_platform_config.hpp +4 -0
- data/ext/boost/config/stdlib/dinkumware.hpp +11 -1
- data/ext/boost/config/stdlib/libcomo.hpp +1 -0
- data/ext/boost/config/stdlib/libstdcpp3.hpp +1 -0
- data/ext/boost/config/stdlib/modena.hpp +1 -0
- data/ext/boost/config/stdlib/msl.hpp +1 -0
- data/ext/boost/config/stdlib/roguewave.hpp +1 -0
- data/ext/boost/config/stdlib/sgi.hpp +1 -0
- data/ext/boost/config/stdlib/stlport.hpp +1 -0
- data/ext/boost/config/stdlib/vacpp.hpp +1 -0
- data/ext/boost/config/suffix.hpp +40 -2
- data/ext/boost/cstdint.hpp +36 -7
- data/ext/boost/date_time/gregorian/conversion.hpp +4 -2
- data/ext/boost/date_time/microsec_time_clock.hpp +7 -7
- data/ext/boost/date_time/posix_time/conversion.hpp +4 -2
- data/ext/boost/date_time/time_facet.hpp +43 -4
- data/ext/boost/detail/endian.hpp +5 -2
- data/ext/boost/detail/lcast_precision.hpp +2 -2
- data/ext/boost/detail/sp_typeinfo.hpp +1 -1
- data/ext/boost/detail/workaround.hpp +5 -0
- data/ext/boost/exception/detail/error_info_impl.hpp +3 -3
- data/ext/boost/exception/detail/exception_ptr.hpp +76 -135
- data/ext/boost/exception/detail/is_output_streamable.hpp +15 -2
- data/ext/boost/exception/detail/type_info.hpp +9 -5
- data/ext/boost/exception/diagnostic_information.hpp +5 -3
- data/ext/boost/exception/exception.hpp +60 -46
- data/ext/boost/exception/info.hpp +47 -14
- data/ext/boost/function/function_base.hpp +4 -4
- data/ext/boost/integer.hpp +4 -0
- data/ext/boost/integer_fwd.hpp +9 -3
- data/ext/boost/iterator/iterator_concepts.hpp +284 -0
- data/ext/boost/iterator/transform_iterator.hpp +0 -1
- data/ext/boost/make_shared.hpp +17 -0
- data/ext/boost/mpl/aux_/config/has_xxx.hpp +4 -3
- data/ext/boost/mpl/aux_/preprocessed/gcc/template_arity.hpp +2 -6
- data/ext/boost/mpl/aux_/template_arity.hpp +4 -4
- data/ext/boost/mpl/eval_if.hpp +3 -3
- data/ext/boost/mpl/has_xxx.hpp +369 -3
- data/ext/boost/optional/optional.hpp +3 -1
- data/ext/boost/optional/optional_fwd.hpp +1 -1
- data/ext/boost/preprocessor/repetition/enum_trailing_params.hpp +38 -0
- data/ext/boost/range/algorithm/equal.hpp +188 -0
- data/ext/boost/range/as_literal.hpp +15 -15
- data/ext/boost/range/concepts.hpp +331 -0
- data/ext/boost/range/const_iterator.hpp +7 -4
- data/ext/boost/range/detail/extract_optional_type.hpp +52 -0
- data/ext/boost/range/detail/implementation_help.hpp +7 -7
- data/ext/boost/range/detail/misc_concept.hpp +33 -0
- data/ext/boost/range/iterator.hpp +32 -32
- data/ext/boost/range/iterator_range.hpp +8 -651
- data/ext/boost/range/iterator_range_core.hpp +542 -0
- data/ext/boost/range/iterator_range_io.hpp +93 -0
- data/ext/boost/range/mutable_iterator.hpp +7 -4
- data/ext/boost/range/size.hpp +1 -1
- data/ext/boost/range/size_type.hpp +2 -1
- data/ext/boost/shared_array.hpp +19 -0
- data/ext/boost/smart_ptr/detail/sp_convertible.hpp +2 -2
- data/ext/boost/smart_ptr/detail/yield_k.hpp +1 -1
- data/ext/boost/smart_ptr/make_shared.hpp +508 -0
- data/ext/boost/smart_ptr/shared_array.hpp +147 -0
- data/ext/boost/src/pthread/thread.cpp +16 -21
- data/ext/boost/src/pthread/timeconv.inl +7 -4
- data/ext/boost/thread/barrier.hpp +2 -1
- data/ext/boost/thread/detail/config.hpp +7 -1
- data/ext/boost/thread/detail/platform.hpp +1 -1
- data/ext/boost/thread/detail/thread.hpp +62 -18
- data/ext/boost/thread/detail/thread_group.hpp +5 -2
- data/ext/boost/thread/detail/tss_hooks.hpp +8 -25
- data/ext/boost/thread/future.hpp +45 -34
- data/ext/boost/thread/locks.hpp +184 -55
- data/ext/boost/thread/pthread/condition_variable.hpp +7 -7
- data/ext/boost/thread/pthread/condition_variable_fwd.hpp +4 -2
- data/ext/boost/thread/pthread/mutex.hpp +29 -17
- data/ext/boost/thread/pthread/once.hpp +5 -0
- data/ext/boost/thread/pthread/recursive_mutex.hpp +97 -18
- data/ext/boost/thread/pthread/shared_mutex.hpp +1 -1
- data/ext/boost/thread/pthread/thread_heap_alloc.hpp +1 -1
- data/ext/boost/thread/tss.hpp +2 -0
- data/ext/boost/throw_exception.hpp +21 -5
- data/ext/boost/token_functions.hpp +111 -91
- data/ext/boost/type_traits/add_reference.hpp +19 -1
- data/ext/boost/type_traits/function_traits.hpp +2 -2
- data/ext/boost/type_traits/is_const.hpp +24 -5
- data/ext/boost/type_traits/is_convertible.hpp +1 -1
- data/ext/boost/type_traits/is_function.hpp +3 -0
- data/ext/boost/type_traits/is_lvalue_reference.hpp +118 -0
- data/ext/boost/type_traits/is_reference.hpp +8 -81
- data/ext/boost/type_traits/is_rvalue_reference.hpp +29 -0
- data/ext/boost/type_traits/is_same.hpp +2 -2
- data/ext/boost/type_traits/is_volatile.hpp +26 -7
- data/ext/boost/type_traits/remove_const.hpp +12 -0
- data/ext/boost/type_traits/remove_cv.hpp +23 -1
- data/ext/boost/type_traits/remove_reference.hpp +21 -1
- data/ext/boost/type_traits/type_with_alignment.hpp +10 -10
- data/ext/boost/units/detail/utility.hpp +104 -0
- data/ext/boost/utility/compare_pointees.hpp +1 -1
- data/ext/common/AgentsStarter.hpp +151 -161
- data/ext/common/ApplicationPool/Pool.h +16 -4
- data/ext/common/Constants.h +1 -1
- data/ext/common/EventedClient.h +130 -26
- data/ext/common/Exceptions.h +15 -2
- data/ext/common/FileDescriptor.h +76 -12
- data/ext/common/IniFile.h +488 -0
- data/ext/common/LoggingAgent/LoggingServer.h +2 -2
- data/ext/common/LoggingAgent/RemoteSender.h +15 -6
- data/ext/common/MessageChannel.h +17 -101
- data/ext/common/PoolOptions.h +1 -0
- data/ext/common/ResourceLocator.h +78 -28
- data/ext/common/SafeLibev.h +149 -0
- data/ext/common/ServerInstanceDir.h +11 -7
- data/ext/common/Session.h +1 -1
- data/ext/common/SpawnManager.h +14 -14
- data/ext/common/StaticString.h +75 -0
- data/ext/common/Utils.cpp +304 -12
- data/ext/common/Utils.h +17 -0
- data/ext/common/Utils/BufferedIO.h +196 -0
- data/ext/common/Utils/IOUtils.cpp +159 -0
- data/ext/common/Utils/IOUtils.h +118 -1
- data/ext/common/Utils/ProcessMetricsCollector.h +184 -56
- data/ext/common/Utils/StrIntUtils.cpp +45 -11
- data/ext/common/Utils/StrIntUtils.h +8 -5
- data/ext/common/Utils/Timer.h +22 -0
- data/ext/common/Utils/utf8.h +35 -0
- data/ext/common/Utils/utf8/checked.h +324 -0
- data/ext/common/Utils/utf8/core.h +359 -0
- data/ext/common/Utils/utf8/unchecked.h +229 -0
- data/ext/common/Watchdog.cpp +52 -85
- data/ext/libev/config.h +122 -0
- data/ext/nginx/Configuration.c +7 -1
- data/ext/nginx/HelperAgent.cpp +16 -18
- data/ext/nginx/config +6 -4
- data/ext/oxt/system_calls.cpp +10 -0
- data/ext/oxt/system_calls.hpp +2 -0
- data/lib/phusion_passenger.rb +6 -11
- data/lib/phusion_passenger/dependencies.rb +2 -0
- data/lib/phusion_passenger/packaging.rb +5 -5
- data/lib/phusion_passenger/platform_info.rb +88 -0
- data/lib/phusion_passenger/platform_info/binary_compatibility.rb +3 -17
- data/lib/phusion_passenger/platform_info/compiler.rb +14 -32
- data/lib/phusion_passenger/platform_info/curl.rb +6 -1
- data/lib/phusion_passenger/platform_info/operating_system.rb +107 -0
- data/lib/phusion_passenger/public_api.rb +2 -2
- data/lib/phusion_passenger/rails3_extensions/init.rb +5 -2
- data/lib/phusion_passenger/standalone/command.rb +6 -2
- data/lib/phusion_passenger/standalone/package_runtime_command.rb +2 -2
- data/lib/phusion_passenger/standalone/runtime_installer.rb +17 -5
- data/lib/phusion_passenger/standalone/start_command.rb +12 -12
- data/lib/phusion_passenger/standalone/stop_command.rb +3 -3
- data/lib/phusion_passenger/standalone/utils.rb +6 -2
- data/lib/phusion_passenger/templates/standalone/config.erb +37 -5
- data/lib/phusion_passenger/utils.rb +4 -7
- data/resources/mime.types +73 -0
- data/{misc → resources}/union_station_gateway.crt +0 -0
- data/test/cxx/BufferedIOTest.cpp +364 -0
- data/test/cxx/EventedClientTest.cpp +150 -13
- data/test/cxx/IOUtilsTest.cpp +399 -1
- data/test/cxx/MessageChannelTest.cpp +5 -120
- data/test/cxx/ProcessMetricsCollectorTest.cpp +121 -0
- data/test/cxx/StaticStringTest.cpp +134 -0
- data/test/cxx/UtilsTest.cpp +16 -46
- data/test/stub/rails_apps/2.3/mycook/public/dispatch.cgi +2 -2
- data/test/stub/rails_apps/2.3/mycook/public/dispatch.fcgi +1 -1
- data/test/stub/rails_apps/2.3/mycook/public/dispatch.rb +1 -1
- data/test/stub/rails_apps/3.0/empty/Gemfile.lock +73 -0
- data/test/support/allocate_memory.c +14 -0
- data/test/support/test_helper.rb +3 -0
- metadata +57 -174
- data/bin/passenger-stress-test +0 -345
- data/debian/postinst +0 -24
- data/doc/rdoc/classes/ConditionVariable.html +0 -215
- data/doc/rdoc/classes/Exception.html +0 -120
- data/doc/rdoc/classes/GC.html +0 -113
- data/doc/rdoc/classes/IO.html +0 -221
- data/doc/rdoc/classes/PhusionPassenger.html +0 -397
- data/doc/rdoc/classes/PhusionPassenger/AbstractInstaller.html +0 -180
- data/doc/rdoc/classes/PhusionPassenger/AbstractRequestHandler.html +0 -647
- data/doc/rdoc/classes/PhusionPassenger/AbstractServer.html +0 -654
- data/doc/rdoc/classes/PhusionPassenger/AbstractServer/InvalidPassword.html +0 -92
- data/doc/rdoc/classes/PhusionPassenger/AbstractServer/ServerAlreadyStarted.html +0 -97
- data/doc/rdoc/classes/PhusionPassenger/AbstractServer/ServerError.html +0 -96
- data/doc/rdoc/classes/PhusionPassenger/AbstractServer/ServerNotStarted.html +0 -97
- data/doc/rdoc/classes/PhusionPassenger/AbstractServer/UnknownMessage.html +0 -96
- data/doc/rdoc/classes/PhusionPassenger/AbstractServerCollection.html +0 -619
- data/doc/rdoc/classes/PhusionPassenger/AdminTools.html +0 -142
- data/doc/rdoc/classes/PhusionPassenger/AdminTools/MemoryStats.html +0 -368
- data/doc/rdoc/classes/PhusionPassenger/AdminTools/MemoryStats/Process.html +0 -231
- data/doc/rdoc/classes/PhusionPassenger/AdminTools/ServerInstance.html +0 -588
- data/doc/rdoc/classes/PhusionPassenger/AdminTools/ServerInstance/CorruptedDirectoryError.html +0 -92
- data/doc/rdoc/classes/PhusionPassenger/AdminTools/ServerInstance/GenerationsAbsentError.html +0 -92
- data/doc/rdoc/classes/PhusionPassenger/AdminTools/ServerInstance/Group.html +0 -147
- data/doc/rdoc/classes/PhusionPassenger/AdminTools/ServerInstance/Process.html +0 -279
- data/doc/rdoc/classes/PhusionPassenger/AdminTools/ServerInstance/RoleDeniedError.html +0 -92
- data/doc/rdoc/classes/PhusionPassenger/AdminTools/ServerInstance/StaleDirectoryError.html +0 -92
- data/doc/rdoc/classes/PhusionPassenger/AdminTools/ServerInstance/Stats.html +0 -123
- data/doc/rdoc/classes/PhusionPassenger/AdminTools/ServerInstance/UnsupportedGenerationStructureVersionError.html +0 -92
- data/doc/rdoc/classes/PhusionPassenger/AnalyticsLogger.html +0 -341
- data/doc/rdoc/classes/PhusionPassenger/AnalyticsLogger/Log.html +0 -294
- data/doc/rdoc/classes/PhusionPassenger/AnalyticsLogger/SharedData.html +0 -199
- data/doc/rdoc/classes/PhusionPassenger/AppInitError.html +0 -155
- data/doc/rdoc/classes/PhusionPassenger/AppProcess.html +0 -367
- data/doc/rdoc/classes/PhusionPassenger/ClassicRails.html +0 -95
- data/doc/rdoc/classes/PhusionPassenger/ClassicRails/ApplicationSpawner.html +0 -351
- data/doc/rdoc/classes/PhusionPassenger/ClassicRails/ApplicationSpawner/Error.html +0 -98
- data/doc/rdoc/classes/PhusionPassenger/ClassicRails/CGIFixed.html +0 -200
- data/doc/rdoc/classes/PhusionPassenger/ClassicRails/FrameworkSpawner.html +0 -410
- data/doc/rdoc/classes/PhusionPassenger/ClassicRails/FrameworkSpawner/Error.html +0 -98
- data/doc/rdoc/classes/PhusionPassenger/ClassicRails/RequestHandler.html +0 -156
- data/doc/rdoc/classes/PhusionPassenger/ClassicRailsExtensions.html +0 -115
- data/doc/rdoc/classes/PhusionPassenger/ClassicRailsExtensions/AnalyticsLogging.html +0 -202
- data/doc/rdoc/classes/PhusionPassenger/ConsoleTextTemplate.html +0 -172
- data/doc/rdoc/classes/PhusionPassenger/DebugLogging.html +0 -273
- data/doc/rdoc/classes/PhusionPassenger/FrameworkInitError.html +0 -145
- data/doc/rdoc/classes/PhusionPassenger/HTMLTemplate.html +0 -162
- data/doc/rdoc/classes/PhusionPassenger/InitializationError.html +0 -141
- data/doc/rdoc/classes/PhusionPassenger/InvalidPath.html +0 -92
- data/doc/rdoc/classes/PhusionPassenger/MessageChannel.html +0 -673
- data/doc/rdoc/classes/PhusionPassenger/MessageChannel/InvalidHashError.html +0 -92
- data/doc/rdoc/classes/PhusionPassenger/MessageClient.html +0 -415
- data/doc/rdoc/classes/PhusionPassenger/NativeSupportLoader.html +0 -134
- data/doc/rdoc/classes/PhusionPassenger/Packaging.html +0 -129
- data/doc/rdoc/classes/PhusionPassenger/PlatformInfo.html +0 -1809
- data/doc/rdoc/classes/PhusionPassenger/Plugin.html +0 -237
- data/doc/rdoc/classes/PhusionPassenger/Rack.html +0 -91
- data/doc/rdoc/classes/PhusionPassenger/Rack/ApplicationSpawner.html +0 -312
- data/doc/rdoc/classes/PhusionPassenger/Rack/ApplicationSpawner/Error.html +0 -98
- data/doc/rdoc/classes/PhusionPassenger/Rack/RequestHandler.html +0 -218
- data/doc/rdoc/classes/PhusionPassenger/Rails3Extensions.html +0 -114
- data/doc/rdoc/classes/PhusionPassenger/Rails3Extensions/AnalyticsLogging.html +0 -256
- data/doc/rdoc/classes/PhusionPassenger/Rails3Extensions/AnalyticsLogging/ACExtension.html +0 -139
- data/doc/rdoc/classes/PhusionPassenger/Rails3Extensions/AnalyticsLogging/ASBenchmarkableExtension.html +0 -118
- data/doc/rdoc/classes/PhusionPassenger/Rails3Extensions/AnalyticsLogging/ExceptionLogger.html +0 -135
- data/doc/rdoc/classes/PhusionPassenger/SpawnManager.html +0 -378
- data/doc/rdoc/classes/PhusionPassenger/Standalone.html +0 -111
- data/doc/rdoc/classes/PhusionPassenger/Standalone/AppFinder.html +0 -252
- data/doc/rdoc/classes/PhusionPassenger/Standalone/Command.html +0 -161
- data/doc/rdoc/classes/PhusionPassenger/Standalone/ConfigFile.html +0 -368
- data/doc/rdoc/classes/PhusionPassenger/Standalone/ConfigFile/DisallowedContextError.html +0 -132
- data/doc/rdoc/classes/PhusionPassenger/Standalone/HelpCommand.html +0 -151
- data/doc/rdoc/classes/PhusionPassenger/Standalone/Main.html +0 -189
- data/doc/rdoc/classes/PhusionPassenger/Standalone/PackageRuntimeCommand.html +0 -177
- data/doc/rdoc/classes/PhusionPassenger/Standalone/RuntimeInstaller.html +0 -341
- data/doc/rdoc/classes/PhusionPassenger/Standalone/StartCommand.html +0 -203
- data/doc/rdoc/classes/PhusionPassenger/Standalone/StatusCommand.html +0 -156
- data/doc/rdoc/classes/PhusionPassenger/Standalone/StopCommand.html +0 -168
- data/doc/rdoc/classes/PhusionPassenger/Standalone/Utils.html +0 -86
- data/doc/rdoc/classes/PhusionPassenger/Standalone/VersionCommand.html +0 -135
- data/doc/rdoc/classes/PhusionPassenger/UnknownError.html +0 -125
- data/doc/rdoc/classes/PhusionPassenger/Utils.html +0 -1550
- data/doc/rdoc/classes/PhusionPassenger/Utils/FileSystemWatcher.html +0 -204
- data/doc/rdoc/classes/PhusionPassenger/Utils/FileSystemWatcher/DirInfo.html +0 -171
- data/doc/rdoc/classes/PhusionPassenger/Utils/FileSystemWatcher/FileInfo.html +0 -140
- data/doc/rdoc/classes/PhusionPassenger/Utils/HostsFileParser.html +0 -260
- data/doc/rdoc/classes/PhusionPassenger/Utils/PseudoIO.html +0 -169
- data/doc/rdoc/classes/PhusionPassenger/Utils/RewindableInput.html +0 -265
- data/doc/rdoc/classes/PhusionPassenger/Utils/RewindableInput/Tempfile.html +0 -120
- data/doc/rdoc/classes/PhusionPassenger/Utils/UnseekableSocket.html +0 -561
- data/doc/rdoc/classes/PhusionPassenger/VersionNotFound.html +0 -140
- data/doc/rdoc/classes/PhusionPassenger/WSGI.html +0 -89
- data/doc/rdoc/classes/PhusionPassenger/WSGI/ApplicationSpawner.html +0 -182
- data/doc/rdoc/classes/Process.html +0 -115
- data/doc/rdoc/classes/Signal.html +0 -139
- data/doc/rdoc/created.rid +0 -1
- data/doc/rdoc/files/DEVELOPERS_TXT.html +0 -276
- data/doc/rdoc/files/README.html +0 -157
- data/doc/rdoc/files/lib/phusion_passenger/abstract_installer_rb.html +0 -130
- data/doc/rdoc/files/lib/phusion_passenger/abstract_request_handler_rb.html +0 -135
- data/doc/rdoc/files/lib/phusion_passenger/abstract_server_collection_rb.html +0 -126
- data/doc/rdoc/files/lib/phusion_passenger/abstract_server_rb.html +0 -128
- data/doc/rdoc/files/lib/phusion_passenger/admin_tools/memory_stats_rb.html +0 -126
- data/doc/rdoc/files/lib/phusion_passenger/admin_tools/server_instance_rb.html +0 -132
- data/doc/rdoc/files/lib/phusion_passenger/admin_tools_rb.html +0 -122
- data/doc/rdoc/files/lib/phusion_passenger/analytics_logger_rb.html +0 -129
- data/doc/rdoc/files/lib/phusion_passenger/app_process_rb.html +0 -127
- data/doc/rdoc/files/lib/phusion_passenger/classic_rails/application_spawner_rb.html +0 -141
- data/doc/rdoc/files/lib/phusion_passenger/classic_rails/cgi_fixed_rb.html +0 -126
- data/doc/rdoc/files/lib/phusion_passenger/classic_rails/framework_spawner_rb.html +0 -146
- data/doc/rdoc/files/lib/phusion_passenger/classic_rails/request_handler_rb.html +0 -125
- data/doc/rdoc/files/lib/phusion_passenger/classic_rails_extensions/init_rb.html +0 -132
- data/doc/rdoc/files/lib/phusion_passenger/console_text_template_rb.html +0 -126
- data/doc/rdoc/files/lib/phusion_passenger/constants_rb.html +0 -122
- data/doc/rdoc/files/lib/phusion_passenger/debug_logging_rb.html +0 -122
- data/doc/rdoc/files/lib/phusion_passenger/dependencies_rb.html +0 -147
- data/doc/rdoc/files/lib/phusion_passenger/exceptions_rb.html +0 -122
- data/doc/rdoc/files/lib/phusion_passenger/html_template_rb.html +0 -127
- data/doc/rdoc/files/lib/phusion_passenger/message_channel_rb.html +0 -120
- data/doc/rdoc/files/lib/phusion_passenger/message_client_rb.html +0 -127
- data/doc/rdoc/files/lib/phusion_passenger/native_support_rb.html +0 -132
- data/doc/rdoc/files/lib/phusion_passenger/packaging_rb.html +0 -122
- data/doc/rdoc/files/lib/phusion_passenger/platform_info/apache_rb.html +0 -127
- data/doc/rdoc/files/lib/phusion_passenger/platform_info/binary_compatibility_rb.html +0 -129
- data/doc/rdoc/files/lib/phusion_passenger/platform_info/compiler_rb.html +0 -126
- data/doc/rdoc/files/lib/phusion_passenger/platform_info/curl_rb.html +0 -126
- data/doc/rdoc/files/lib/phusion_passenger/platform_info/documentation_tools_rb.html +0 -126
- data/doc/rdoc/files/lib/phusion_passenger/platform_info/linux_rb.html +0 -126
- data/doc/rdoc/files/lib/phusion_passenger/platform_info/operating_system_rb.html +0 -127
- data/doc/rdoc/files/lib/phusion_passenger/platform_info/ruby_rb.html +0 -128
- data/doc/rdoc/files/lib/phusion_passenger/platform_info/zlib_rb.html +0 -126
- data/doc/rdoc/files/lib/phusion_passenger/platform_info_rb.html +0 -122
- data/doc/rdoc/files/lib/phusion_passenger/plugin_rb.html +0 -127
- data/doc/rdoc/files/lib/phusion_passenger/public_api_rb.html +0 -127
- data/doc/rdoc/files/lib/phusion_passenger/rack/application_spawner_rb.html +0 -137
- data/doc/rdoc/files/lib/phusion_passenger/rack/request_handler_rb.html +0 -125
- data/doc/rdoc/files/lib/phusion_passenger/rails3_extensions/init_rb.html +0 -127
- data/doc/rdoc/files/lib/phusion_passenger/simple_benchmarking_rb.html +0 -122
- data/doc/rdoc/files/lib/phusion_passenger/spawn_manager_rb.html +0 -160
- data/doc/rdoc/files/lib/phusion_passenger/standalone/app_finder_rb.html +0 -127
- data/doc/rdoc/files/lib/phusion_passenger/standalone/command_rb.html +0 -135
- data/doc/rdoc/files/lib/phusion_passenger/standalone/config_file_rb.html +0 -126
- data/doc/rdoc/files/lib/phusion_passenger/standalone/help_command_rb.html +0 -126
- data/doc/rdoc/files/lib/phusion_passenger/standalone/main_rb.html +0 -126
- data/doc/rdoc/files/lib/phusion_passenger/standalone/package_runtime_command_rb.html +0 -127
- data/doc/rdoc/files/lib/phusion_passenger/standalone/runtime_installer_rb.html +0 -133
- data/doc/rdoc/files/lib/phusion_passenger/standalone/start_command_rb.html +0 -136
- data/doc/rdoc/files/lib/phusion_passenger/standalone/status_command_rb.html +0 -126
- data/doc/rdoc/files/lib/phusion_passenger/standalone/stop_command_rb.html +0 -126
- data/doc/rdoc/files/lib/phusion_passenger/standalone/utils_rb.html +0 -126
- data/doc/rdoc/files/lib/phusion_passenger/standalone/version_command_rb.html +0 -127
- data/doc/rdoc/files/lib/phusion_passenger/utils/file_system_watcher_rb.html +0 -126
- data/doc/rdoc/files/lib/phusion_passenger/utils/hosts_file_parser_rb.html +0 -120
- data/doc/rdoc/files/lib/phusion_passenger/utils/rewindable_input_rb.html +0 -100
- data/doc/rdoc/files/lib/phusion_passenger/utils/tmpdir_rb.html +0 -122
- data/doc/rdoc/files/lib/phusion_passenger/utils/unseekable_socket_rb.html +0 -126
- data/doc/rdoc/files/lib/phusion_passenger/utils_rb.html +0 -179
- data/doc/rdoc/files/lib/phusion_passenger/wsgi/application_spawner_rb.html +0 -132
- data/doc/rdoc/fr_class_index.html +0 -138
- data/doc/rdoc/fr_file_index.html +0 -108
- data/doc/rdoc/fr_method_index.html +0 -430
- data/doc/rdoc/index.html +0 -26
- data/doc/rdoc/rdoc-style.css +0 -187
- data/ext/apache2/LICENSE-CNRI.TXT +0 -79
- data/ext/common/Utils/BlockingScalar.h +0 -50
- data/ext/common/Utils/FileHandleGuard.h +0 -81
@@ -501,7 +501,7 @@
|
|
501
501
|
<a name="l00476"></a>00476 }
|
502
502
|
<a name="l00477"></a>00477
|
503
503
|
<a name="l00478"></a>00478 P_TRACE(4, <span class="stringliteral">"MessageServer client thread "</span> << (<span class="keywordtype">int</span>) client << <span class="stringliteral">" exited."</span>);
|
504
|
-
<a name="l00479"></a>00479 client.<a class="code" href="classPassenger_1_1FileDescriptor.html#
|
504
|
+
<a name="l00479"></a>00479 client.<a class="code" href="classPassenger_1_1FileDescriptor.html#a02062f3cfb689b32781e11114c0abe5b" title="Close the underlying file descriptor.">close</a>();
|
505
505
|
<a name="l00480"></a>00480 } <span class="keywordflow">catch</span> (<span class="keyword">const</span> boost::thread_interrupted &) {
|
506
506
|
<a name="l00481"></a>00481 P_TRACE(2, <span class="stringliteral">"MessageServer client thread "</span> << (<span class="keywordtype">int</span>) client << <span class="stringliteral">" interrupted."</span>);
|
507
507
|
<a name="l00482"></a>00482 } <span class="keywordflow">catch</span> (<span class="keyword">const</span> tracable_exception &e) {
|
@@ -462,84 +462,85 @@
|
|
462
462
|
<a name="l00437"></a>00437 <span class="keywordflow">if</span> (copy.<a class="code" href="structPassenger_1_1PoolOptions.html#aaa4f5d4ae1534ada8613fbe497a38924" title="Environment variables which should be passed to the spawned application process.">environmentVariables</a> != NULL) {
|
463
463
|
<a name="l00438"></a>00438 copy.<a class="code" href="structPassenger_1_1PoolOptions.html#aaa4f5d4ae1534ada8613fbe497a38924" title="Environment variables which should be passed to the spawned application process.">environmentVariables</a>->getItems(); <span class="comment">// Prefetch items now while we still can.</span>
|
464
464
|
<a name="l00439"></a>00439 }
|
465
|
-
<a name="l00440"></a>00440
|
466
|
-
<a name="l00441"></a>00441
|
467
|
-
<a name="l00442"></a>00442
|
468
|
-
<a name="l00443"></a>00443
|
469
|
-
<a name="l00444"></a>00444 <span class="comment">
|
470
|
-
<a name="l00445"></a>00445 <span class="comment"> *
|
471
|
-
<a name="l00446"></a>00446 <span class="comment">
|
472
|
-
<a name="l00447"></a
|
473
|
-
<a name="l00448"></a>00448
|
474
|
-
<a name="l00449"></a>00449
|
475
|
-
<a name="l00450"></a>00450
|
476
|
-
<a name="l00451"></a>00451
|
477
|
-
<a name="l00452"></a>00452
|
478
|
-
<a name="l00453"></a>00453
|
479
|
-
<a name="l00454"></a>00454
|
480
|
-
<a name="l00455"></a>00455
|
481
|
-
<a name="l00456"></a>00456 <span class="comment">
|
482
|
-
<a name="l00457"></a>00457 <span class="comment"> *
|
483
|
-
<a name="l00458"></a>00458 <span class="comment">
|
484
|
-
<a name="l00459"></a>00459 <span class="comment">
|
485
|
-
<a name="l00460"></a>00460 <span class="comment">
|
486
|
-
<a name="l00461"></a
|
487
|
-
<a name="l00462"></a>00462
|
488
|
-
<a name="l00463"></a>00463
|
489
|
-
<a name="l00464"></a>00464
|
490
|
-
<a name="l00465"></a>00465
|
491
|
-
<a name="l00466"></a>00466
|
492
|
-
<a name="l00467"></a>00467
|
493
|
-
<a name="l00468"></a>00468
|
494
|
-
<a name="l00469"></a>00469
|
495
|
-
<a name="l00470"></a>00470
|
496
|
-
<a name="l00471"></a>00471
|
497
|
-
<a name="l00472"></a>00472
|
498
|
-
<a name="l00473"></a>00473 result.append(
|
499
|
-
<a name="l00474"></a>00474
|
500
|
-
<a name="l00475"></a>00475
|
501
|
-
<a name="l00476"></a>00476 result.append(
|
502
|
-
<a name="l00477"></a>00477
|
503
|
-
<a name="l00478"></a>00478
|
504
|
-
<a name="l00479"></a>00479
|
505
|
-
<a name="l00480"></a>00480
|
506
|
-
<a name="l00481"></a>00481
|
507
|
-
<a name="l00482"></a>00482
|
508
|
-
<a name="l00483"></a>00483
|
509
|
-
<a name="l00484"></a>00484
|
510
|
-
<a name="l00485"></a>00485
|
511
|
-
<a name="l00486"></a>00486 vec.push_back(
|
512
|
-
<a name="l00487"></a>00487
|
513
|
-
<a name="l00488"></a>00488
|
514
|
-
<a name="l00489"></a>00489
|
515
|
-
<a name="l00490"></a>00490
|
516
|
-
<a name="l00491"></a>00491
|
517
|
-
<a name="l00492"></a>00492 vec.push_back(
|
518
|
-
<a name="l00493"></a>00493
|
519
|
-
<a name="l00494"></a>00494
|
520
|
-
<a name="l00495"></a>00495
|
521
|
-
<a name="l00496"></a>00496
|
522
|
-
<a name="l00497"></a>00497
|
523
|
-
<a name="l00498"></a>00498 vec.push_back(
|
524
|
-
<a name="l00499"></a>00499
|
525
|
-
<a name="l00500"></a>00500
|
526
|
-
<a name="l00501"></a>00501
|
527
|
-
<a name="l00502"></a>00502
|
528
|
-
<a name="l00503"></a>00503
|
529
|
-
<a name="l00504"></a>00504 vec.push_back(
|
530
|
-
<a name="l00505"></a>00505
|
531
|
-
<a name="l00506"></a>00506
|
532
|
-
<a name="l00507"></a>00507
|
533
|
-
<a name="l00508"></a>00508
|
534
|
-
<a name="l00509"></a>00509
|
535
|
-
<a name="l00510"></a>00510 vec.push_back(
|
536
|
-
<a name="l00511"></a>00511
|
537
|
-
<a name="l00512"></a>00512
|
538
|
-
<a name="l00513"></a>00513
|
539
|
-
<a name="l00514"></a>00514
|
540
|
-
<a name="l00515"></a>00515
|
541
|
-
<a name="l00516"></a>00516
|
542
|
-
<a name="l00517"></a>00517
|
465
|
+
<a name="l00440"></a>00440 copy.<a class="code" href="structPassenger_1_1PoolOptions.html#ace54185a9981f103a036a7ac3e768612" title="An analytics log object to log things to.">log</a>.reset();
|
466
|
+
<a name="l00441"></a>00441 <span class="keywordflow">return</span> copy;
|
467
|
+
<a name="l00442"></a>00442 }
|
468
|
+
<a name="l00443"></a>00443 <span class="comment"></span>
|
469
|
+
<a name="l00444"></a>00444 <span class="comment"> /**</span>
|
470
|
+
<a name="l00445"></a>00445 <span class="comment"> * Returns the app group name. If there is no explicitly set app group name</span>
|
471
|
+
<a name="l00446"></a>00446 <span class="comment"> * then the app root is considered to be the app group name.</span>
|
472
|
+
<a name="l00447"></a>00447 <span class="comment"> */</span>
|
473
|
+
<a name="l00448"></a><a class="code" href="structPassenger_1_1PoolOptions.html#a43eb2294bff16bbcbafec569babca883">00448</a> <span class="keywordtype">string</span> <a class="code" href="structPassenger_1_1PoolOptions.html#a43eb2294bff16bbcbafec569babca883" title="Returns the app group name.">getAppGroupName</a>()<span class="keyword"> const </span>{
|
474
|
+
<a name="l00449"></a>00449 <span class="keywordflow">if</span> (<a class="code" href="structPassenger_1_1PoolOptions.html#adce57f30c4f33d8b55726d0eaa15addf" title="A name used by ApplicationPool to uniquely identify an application.">appGroupName</a>.empty()) {
|
475
|
+
<a name="l00450"></a>00450 <span class="keywordflow">return</span> appRoot;
|
476
|
+
<a name="l00451"></a>00451 } <span class="keywordflow">else</span> {
|
477
|
+
<a name="l00452"></a>00452 <span class="keywordflow">return</span> <a class="code" href="structPassenger_1_1PoolOptions.html#adce57f30c4f33d8b55726d0eaa15addf" title="A name used by ApplicationPool to uniquely identify an application.">appGroupName</a>;
|
478
|
+
<a name="l00453"></a>00453 }
|
479
|
+
<a name="l00454"></a>00454 }
|
480
|
+
<a name="l00455"></a>00455 <span class="comment"></span>
|
481
|
+
<a name="l00456"></a>00456 <span class="comment"> /**</span>
|
482
|
+
<a name="l00457"></a>00457 <span class="comment"> * Serializes the items in environmentVariables into a string, which</span>
|
483
|
+
<a name="l00458"></a>00458 <span class="comment"> * can be used to create a SimpleStringListCreator object.</span>
|
484
|
+
<a name="l00459"></a>00459 <span class="comment"> *</span>
|
485
|
+
<a name="l00460"></a>00460 <span class="comment"> * @throws Anything thrown by environmentVariables->getItems().</span>
|
486
|
+
<a name="l00461"></a>00461 <span class="comment"> */</span>
|
487
|
+
<a name="l00462"></a><a class="code" href="structPassenger_1_1PoolOptions.html#acb2df1a0b558e7fa457e46373c17b679">00462</a> <span class="keywordtype">string</span> <a class="code" href="structPassenger_1_1PoolOptions.html#acb2df1a0b558e7fa457e46373c17b679" title="Serializes the items in environmentVariables into a string, which can be used to...">serializeEnvironmentVariables</a>()<span class="keyword"> const </span>{
|
488
|
+
<a name="l00463"></a>00463 vector<string>::const_iterator it, end;
|
489
|
+
<a name="l00464"></a>00464 <span class="keywordtype">string</span> result;
|
490
|
+
<a name="l00465"></a>00465
|
491
|
+
<a name="l00466"></a>00466 <span class="keywordflow">if</span> (<a class="code" href="structPassenger_1_1PoolOptions.html#aaa4f5d4ae1534ada8613fbe497a38924" title="Environment variables which should be passed to the spawned application process.">environmentVariables</a>) {
|
492
|
+
<a name="l00467"></a>00467 result.reserve(1024);
|
493
|
+
<a name="l00468"></a>00468
|
494
|
+
<a name="l00469"></a>00469 StringListPtr items = <a class="code" href="structPassenger_1_1PoolOptions.html#aaa4f5d4ae1534ada8613fbe497a38924" title="Environment variables which should be passed to the spawned application process.">environmentVariables</a>->getItems();
|
495
|
+
<a name="l00470"></a>00470 end = items->end();
|
496
|
+
<a name="l00471"></a>00471
|
497
|
+
<a name="l00472"></a>00472 <span class="keywordflow">for</span> (it = items->begin(); it != end; it++) {
|
498
|
+
<a name="l00473"></a>00473 result.append(*it);
|
499
|
+
<a name="l00474"></a>00474 result.append(1, <span class="charliteral">'\0'</span>);
|
500
|
+
<a name="l00475"></a>00475 it++;
|
501
|
+
<a name="l00476"></a>00476 result.append(*it);
|
502
|
+
<a name="l00477"></a>00477 result.append(1, <span class="charliteral">'\0'</span>);
|
503
|
+
<a name="l00478"></a>00478 }
|
504
|
+
<a name="l00479"></a>00479 }
|
505
|
+
<a name="l00480"></a>00480 <span class="keywordflow">return</span> Base64::encode(result);
|
506
|
+
<a name="l00481"></a>00481 }
|
507
|
+
<a name="l00482"></a>00482
|
508
|
+
<a name="l00483"></a>00483 <span class="keyword">private</span>:
|
509
|
+
<a name="l00484"></a>00484 <span class="keyword">static</span> <span class="keyword">inline</span> <span class="keywordtype">void</span>
|
510
|
+
<a name="l00485"></a>00485 appendKeyValue(vector<string> &vec, <span class="keyword">const</span> <span class="keywordtype">char</span> *key, <span class="keyword">const</span> <span class="keywordtype">string</span> &value) {
|
511
|
+
<a name="l00486"></a>00486 vec.push_back(key);
|
512
|
+
<a name="l00487"></a>00487 vec.push_back(const_cast<string &>(value));
|
513
|
+
<a name="l00488"></a>00488 }
|
514
|
+
<a name="l00489"></a>00489
|
515
|
+
<a name="l00490"></a>00490 <span class="keyword">static</span> <span class="keyword">inline</span> <span class="keywordtype">void</span>
|
516
|
+
<a name="l00491"></a>00491 appendKeyValue(vector<string> &vec, <span class="keyword">const</span> <span class="keywordtype">char</span> *key, <span class="keyword">const</span> <span class="keywordtype">char</span> *value) {
|
517
|
+
<a name="l00492"></a>00492 vec.push_back(key);
|
518
|
+
<a name="l00493"></a>00493 vec.push_back(value);
|
519
|
+
<a name="l00494"></a>00494 }
|
520
|
+
<a name="l00495"></a>00495
|
521
|
+
<a name="l00496"></a>00496 <span class="keyword">static</span> <span class="keyword">inline</span> <span class="keywordtype">void</span>
|
522
|
+
<a name="l00497"></a>00497 appendKeyValue2(vector<string> &vec, <span class="keyword">const</span> <span class="keywordtype">char</span> *key, <span class="keywordtype">long</span> value) {
|
523
|
+
<a name="l00498"></a>00498 vec.push_back(key);
|
524
|
+
<a name="l00499"></a>00499 vec.push_back(toString(value));
|
525
|
+
<a name="l00500"></a>00500 }
|
526
|
+
<a name="l00501"></a>00501
|
527
|
+
<a name="l00502"></a>00502 <span class="keyword">static</span> <span class="keyword">inline</span> <span class="keywordtype">void</span>
|
528
|
+
<a name="l00503"></a>00503 appendKeyValue3(vector<string> &vec, <span class="keyword">const</span> <span class="keywordtype">char</span> *key, <span class="keywordtype">unsigned</span> <span class="keywordtype">long</span> value) {
|
529
|
+
<a name="l00504"></a>00504 vec.push_back(key);
|
530
|
+
<a name="l00505"></a>00505 vec.push_back(toString(value));
|
531
|
+
<a name="l00506"></a>00506 }
|
532
|
+
<a name="l00507"></a>00507
|
533
|
+
<a name="l00508"></a>00508 <span class="keyword">static</span> <span class="keyword">inline</span> <span class="keywordtype">void</span>
|
534
|
+
<a name="l00509"></a>00509 appendKeyValue4(vector<string> &vec, <span class="keyword">const</span> <span class="keywordtype">char</span> *key, <span class="keywordtype">bool</span> value) {
|
535
|
+
<a name="l00510"></a>00510 vec.push_back(key);
|
536
|
+
<a name="l00511"></a>00511 vec.push_back(value ? <span class="stringliteral">"true"</span> : <span class="stringliteral">"false"</span>);
|
537
|
+
<a name="l00512"></a>00512 }
|
538
|
+
<a name="l00513"></a>00513 };
|
539
|
+
<a name="l00514"></a>00514
|
540
|
+
<a name="l00515"></a>00515 } <span class="comment">// namespace Passenger</span>
|
541
|
+
<a name="l00516"></a>00516
|
542
|
+
<a name="l00517"></a>00517 <span class="preprocessor">#endif </span><span class="comment">/* _PASSENGER_SPAWN_OPTIONS_H_ */</span>
|
543
|
+
<a name="l00518"></a>00518
|
543
544
|
</pre></div></div>
|
544
545
|
<hr size="1"/><address style="text-align: right;"><small>Generated by
|
545
546
|
<a href="http://www.doxygen.org/index.html">
|
@@ -51,62 +51,112 @@
|
|
51
51
|
<a name="l00026"></a>00026 <span class="preprocessor"></span><span class="preprocessor">#define _PASSENGER_RESOURCE_LOCATOR_H_</span>
|
52
52
|
<a name="l00027"></a>00027 <span class="preprocessor"></span>
|
53
53
|
<a name="l00028"></a>00028 <span class="preprocessor">#include <string></span>
|
54
|
-
<a name="l00029"></a>00029 <span class="preprocessor">#include &
|
55
|
-
<a name="l00030"></a>00030
|
56
|
-
<a name="l00031"></a>00031 <span class="
|
54
|
+
<a name="l00029"></a>00029 <span class="preprocessor">#include <IniFile.h></span>
|
55
|
+
<a name="l00030"></a>00030 <span class="preprocessor">#include <Exceptions.h></span>
|
56
|
+
<a name="l00031"></a>00031 <span class="preprocessor">#include <Utils.h></span>
|
57
57
|
<a name="l00032"></a>00032
|
58
|
-
<a name="l00033"></a>00033 <span class="keyword">
|
59
|
-
<a name="l00034"></a>00034
|
60
|
-
<a name="l00035"></a>00035
|
61
|
-
<a name="l00036"></a>00036
|
62
|
-
<a name="l00037"></a>00037
|
63
|
-
<a name="l00038"></a>00038 <span class="
|
64
|
-
<a name="l00039"></a>00039
|
65
|
-
<a name="l00040"></a>00040
|
66
|
-
<a name="l00041"></a>00041
|
67
|
-
<a name="l00042"></a>00042
|
68
|
-
<a name="l00043"></a>00043
|
69
|
-
<a name="l00044"></a>00044
|
70
|
-
<a name="l00045"></a>00045 <span class="keywordtype">string</span>
|
71
|
-
<a name="l00046"></a>00046
|
72
|
-
<a name="l00047"></a>00047
|
73
|
-
<a name="l00048"></a>00048
|
74
|
-
<a name="l00049"></a>00049
|
75
|
-
<a name="l00050"></a>00050
|
76
|
-
<a name="l00051"></a>00051
|
77
|
-
<a name="l00052"></a>00052
|
78
|
-
<a name="l00053"></a>00053
|
79
|
-
<a name="l00054"></a>00054 <span class="keywordflow">
|
80
|
-
<a name="l00055"></a>00055 <span class="keywordflow">
|
81
|
-
<a name="l00056"></a>00056 }
|
82
|
-
<a name="l00057"></a>00057
|
83
|
-
<a name="l00058"></a>00058
|
84
|
-
<a name="l00059"></a>00059
|
85
|
-
<a name="l00060"></a>00060
|
86
|
-
<a name="l00061"></a>00061
|
87
|
-
<a name="l00062"></a>00062
|
88
|
-
<a name="l00063"></a>00063 <span class="
|
89
|
-
<a name="l00064"></a>00064
|
90
|
-
<a name="l00065"></a>00065
|
91
|
-
<a name="l00066"></a>00066
|
92
|
-
<a name="l00067"></a>00067
|
93
|
-
<a name="l00068"></a>00068
|
94
|
-
<a name="l00069"></a>00069
|
95
|
-
<a name="l00070"></a>00070
|
96
|
-
<a name="l00071"></a>00071
|
97
|
-
<a name="l00072"></a>00072
|
98
|
-
<a name="l00073"></a>00073
|
99
|
-
<a name="l00074"></a>00074
|
100
|
-
<a name="l00075"></a>00075
|
101
|
-
<a name="l00076"></a>00076
|
102
|
-
<a name="l00077"></a>00077
|
103
|
-
<a name="l00078"></a>00078
|
104
|
-
<a name="l00079"></a>00079
|
105
|
-
<a name="l00080"></a>00080
|
106
|
-
<a name="l00081"></a>00081
|
107
|
-
<a name="l00082"></a>00082
|
108
|
-
<a name="l00083"></a>00083
|
109
|
-
<a name="l00084"></a>00084 <span class="
|
58
|
+
<a name="l00033"></a>00033 <span class="keyword">namespace </span>Passenger {
|
59
|
+
<a name="l00034"></a>00034
|
60
|
+
<a name="l00035"></a>00035 <span class="keyword">using namespace </span>boost;
|
61
|
+
<a name="l00036"></a>00036
|
62
|
+
<a name="l00037"></a>00037 <span class="comment"></span>
|
63
|
+
<a name="l00038"></a>00038 <span class="comment">/**</span>
|
64
|
+
<a name="l00039"></a>00039 <span class="comment"> * Locates various Phusion Passenger resources on the filesystem.</span>
|
65
|
+
<a name="l00040"></a>00040 <span class="comment"> */</span>
|
66
|
+
<a name="l00041"></a><a class="code" href="classPassenger_1_1ResourceLocator.html">00041</a> <span class="keyword">class </span><a class="code" href="classPassenger_1_1ResourceLocator.html" title="Locates various Phusion Passenger resources on the filesystem.">ResourceLocator</a> {
|
67
|
+
<a name="l00042"></a>00042 <span class="keyword">private</span>:
|
68
|
+
<a name="l00043"></a>00043 <span class="keywordtype">string</span> agentsDir;
|
69
|
+
<a name="l00044"></a>00044 <span class="keywordtype">string</span> helperScriptsDir;
|
70
|
+
<a name="l00045"></a>00045 <span class="keywordtype">string</span> resourcesDir;
|
71
|
+
<a name="l00046"></a>00046 <span class="keywordtype">string</span> docDir;
|
72
|
+
<a name="l00047"></a>00047 <span class="keywordtype">string</span> rubyLibDir;
|
73
|
+
<a name="l00048"></a>00048 <span class="keywordtype">string</span> compilableSourceDir;
|
74
|
+
<a name="l00049"></a>00049 <span class="keywordtype">string</span> apache2Module;
|
75
|
+
<a name="l00050"></a>00050
|
76
|
+
<a name="l00051"></a>00051 <span class="keywordtype">string</span> getOption(<span class="keyword">const</span> <span class="keywordtype">string</span> &file, <span class="keyword">const</span> IniFileSectionPtr &section, <span class="keyword">const</span> <span class="keywordtype">string</span> &key)<span class="keyword"> const </span>{
|
77
|
+
<a name="l00052"></a>00052 <span class="keywordflow">if</span> (section->hasKey(key)) {
|
78
|
+
<a name="l00053"></a>00053 <span class="keywordflow">return</span> section->get(key);
|
79
|
+
<a name="l00054"></a>00054 } <span class="keywordflow">else</span> {
|
80
|
+
<a name="l00055"></a>00055 <span class="keywordflow">throw</span> <a class="code" href="classPassenger_1_1RuntimeException.html" title="A generic runtime exception.">RuntimeException</a>(<span class="stringliteral">"Option '"</span> + key + <span class="stringliteral">"' missing in file "</span> + file);
|
81
|
+
<a name="l00056"></a>00056 }
|
82
|
+
<a name="l00057"></a>00057 }
|
83
|
+
<a name="l00058"></a>00058
|
84
|
+
<a name="l00059"></a>00059 <span class="keyword">public</span>:
|
85
|
+
<a name="l00060"></a>00060 <a class="code" href="classPassenger_1_1ResourceLocator.html" title="Locates various Phusion Passenger resources on the filesystem.">ResourceLocator</a>(<span class="keyword">const</span> <span class="keywordtype">string</span> &rootOrFile) {
|
86
|
+
<a name="l00061"></a>00061 <span class="keywordflow">if</span> (<a class="code" href="group__Support.html#ga15298b031377d3ecb80295bd5b1a8180" title="Check whether &#39;filename&#39; exists and what kind of file it is.">getFileType</a>(rootOrFile) == <a class="code" href="namespacePassenger.html#a14174b712df6046cb823cde43d7ef07dabb09dbba1071b4770913363db2462eee" title="A directory.">FT_DIRECTORY</a>) {
|
87
|
+
<a name="l00062"></a>00062 <span class="keywordtype">string</span> root = rootOrFile;
|
88
|
+
<a name="l00063"></a>00063 <span class="keywordtype">bool</span> nativelyPackaged = !<a class="code" href="group__Support.html#ga2a62e38a72c6c65992e3361f6d80c7ef" title="Check whether the specified file exists.">fileExists</a>(root + <span class="stringliteral">"/Rakefile"</span>) ||
|
89
|
+
<a name="l00064"></a>00064 !<a class="code" href="group__Support.html#ga2a62e38a72c6c65992e3361f6d80c7ef" title="Check whether the specified file exists.">fileExists</a>(root + <span class="stringliteral">"/DEVELOPERS.TXT"</span>);
|
90
|
+
<a name="l00065"></a>00065
|
91
|
+
<a name="l00066"></a>00066 <span class="keywordflow">if</span> (nativelyPackaged) {
|
92
|
+
<a name="l00067"></a>00067 agentsDir = <span class="stringliteral">"/usr/lib/phusion-passenger/agents"</span>;
|
93
|
+
<a name="l00068"></a>00068 helperScriptsDir = <span class="stringliteral">"/usr/share/phusion-passenger/helper-scripts"</span>;
|
94
|
+
<a name="l00069"></a>00069 resourcesDir = <span class="stringliteral">"/usr/share/phusion-passenger"</span>;
|
95
|
+
<a name="l00070"></a>00070 docDir = <span class="stringliteral">"/usr/share/doc/phusion-passenger"</span>;
|
96
|
+
<a name="l00071"></a>00071 rubyLibDir = <span class="stringliteral">""</span>;
|
97
|
+
<a name="l00072"></a>00072 compilableSourceDir = <span class="stringliteral">"/usr/share/phusion-passenger/compilable-source"</span>;
|
98
|
+
<a name="l00073"></a>00073 apache2Module = <span class="stringliteral">"/usr/lib/apache2/modules/mod_passenger.so"</span>;
|
99
|
+
<a name="l00074"></a>00074 } <span class="keywordflow">else</span> {
|
100
|
+
<a name="l00075"></a>00075 agentsDir = root + <span class="stringliteral">"/agents"</span>;
|
101
|
+
<a name="l00076"></a>00076 helperScriptsDir = root + <span class="stringliteral">"/helper-scripts"</span>;
|
102
|
+
<a name="l00077"></a>00077 resourcesDir = root + <span class="stringliteral">"/resources"</span>;
|
103
|
+
<a name="l00078"></a>00078 docDir = root + <span class="stringliteral">"/doc"</span>;
|
104
|
+
<a name="l00079"></a>00079 rubyLibDir = root + <span class="stringliteral">"/lib"</span>;
|
105
|
+
<a name="l00080"></a>00080 compilableSourceDir = root;
|
106
|
+
<a name="l00081"></a>00081 apache2Module = root + <span class="stringliteral">"ext/apache2/mod_passenger.so"</span>;
|
107
|
+
<a name="l00082"></a>00082 }
|
108
|
+
<a name="l00083"></a>00083
|
109
|
+
<a name="l00084"></a>00084 } <span class="keywordflow">else</span> {
|
110
|
+
<a name="l00085"></a>00085 <span class="keywordtype">string</span> file = rootOrFile;
|
111
|
+
<a name="l00086"></a>00086 IniFileSectionPtr options = IniFile(file).section(<span class="stringliteral">"locations"</span>);
|
112
|
+
<a name="l00087"></a>00087 agentsDir = getOption(file, options, <span class="stringliteral">"agents"</span>);
|
113
|
+
<a name="l00088"></a>00088 helperScriptsDir = getOption(file, options, <span class="stringliteral">"helper_scripts"</span>);
|
114
|
+
<a name="l00089"></a>00089 resourcesDir = getOption(file, options, <span class="stringliteral">"resources"</span>);
|
115
|
+
<a name="l00090"></a>00090 docDir = getOption(file, options, <span class="stringliteral">"doc"</span>);
|
116
|
+
<a name="l00091"></a>00091 rubyLibDir = getOption(file, options, <span class="stringliteral">"rubylib"</span>);
|
117
|
+
<a name="l00092"></a>00092 compilableSourceDir = getOption(file, options, <span class="stringliteral">"compilable_source"</span>);
|
118
|
+
<a name="l00093"></a>00093 apache2Module = getOption(file, options, <span class="stringliteral">"apache2_module"</span>);
|
119
|
+
<a name="l00094"></a>00094 }
|
120
|
+
<a name="l00095"></a>00095 }
|
121
|
+
<a name="l00096"></a>00096
|
122
|
+
<a name="l00097"></a>00097 <span class="keywordtype">string</span> getAgentsDir()<span class="keyword"> const </span>{
|
123
|
+
<a name="l00098"></a>00098 <span class="keywordflow">return</span> agentsDir;
|
124
|
+
<a name="l00099"></a>00099 }
|
125
|
+
<a name="l00100"></a>00100
|
126
|
+
<a name="l00101"></a>00101 <span class="keywordtype">string</span> getHelperScriptsDir()<span class="keyword"> const </span>{
|
127
|
+
<a name="l00102"></a>00102 <span class="keywordflow">return</span> helperScriptsDir;
|
128
|
+
<a name="l00103"></a>00103 }
|
129
|
+
<a name="l00104"></a>00104
|
130
|
+
<a name="l00105"></a>00105 <span class="keywordtype">string</span> getSpawnServerFilename()<span class="keyword"> const </span>{
|
131
|
+
<a name="l00106"></a>00106 <span class="keywordflow">return</span> getHelperScriptsDir() + <span class="stringliteral">"/passenger-spawn-server"</span>;
|
132
|
+
<a name="l00107"></a>00107 }
|
133
|
+
<a name="l00108"></a>00108
|
134
|
+
<a name="l00109"></a>00109 <span class="keywordtype">string</span> getResourcesDir()<span class="keyword"> const </span>{
|
135
|
+
<a name="l00110"></a>00110 <span class="keywordflow">return</span> resourcesDir;
|
136
|
+
<a name="l00111"></a>00111 }
|
137
|
+
<a name="l00112"></a>00112
|
138
|
+
<a name="l00113"></a>00113 <span class="keywordtype">string</span> getDocDir()<span class="keyword"> const </span>{
|
139
|
+
<a name="l00114"></a>00114 <span class="keywordflow">return</span> docDir;
|
140
|
+
<a name="l00115"></a>00115 }
|
141
|
+
<a name="l00116"></a>00116
|
142
|
+
<a name="l00117"></a>00117 <span class="comment">// Can be empty.</span>
|
143
|
+
<a name="l00118"></a>00118 <span class="keywordtype">string</span> getRubyLibDir()<span class="keyword"> const </span>{
|
144
|
+
<a name="l00119"></a>00119 <span class="keywordflow">return</span> rubyLibDir;
|
145
|
+
<a name="l00120"></a>00120 }
|
146
|
+
<a name="l00121"></a>00121
|
147
|
+
<a name="l00122"></a>00122 <span class="keywordtype">string</span> getCompilableSourceDir()<span class="keyword"> const </span>{
|
148
|
+
<a name="l00123"></a>00123 <span class="keywordflow">return</span> compilableSourceDir;
|
149
|
+
<a name="l00124"></a>00124 }
|
150
|
+
<a name="l00125"></a>00125
|
151
|
+
<a name="l00126"></a>00126 <span class="keywordtype">string</span> getApache2ModuleFilename()<span class="keyword"> const </span>{
|
152
|
+
<a name="l00127"></a>00127 <span class="keywordflow">return</span> apache2Module;
|
153
|
+
<a name="l00128"></a>00128 }
|
154
|
+
<a name="l00129"></a>00129 };
|
155
|
+
<a name="l00130"></a>00130
|
156
|
+
<a name="l00131"></a>00131
|
157
|
+
<a name="l00132"></a>00132 }
|
158
|
+
<a name="l00133"></a>00133
|
159
|
+
<a name="l00134"></a>00134 <span class="preprocessor">#endif </span><span class="comment">/* _PASSENGER_RESOURCE_LOCATOR_H_ */</span>
|
110
160
|
</pre></div></div>
|
111
161
|
<hr size="1"/><address style="text-align: right;"><small>Generated by
|
112
162
|
<a href="http://www.doxygen.org/index.html">
|
@@ -0,0 +1,180 @@
|
|
1
|
+
<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
|
2
|
+
<html xmlns="http://www.w3.org/1999/xhtml">
|
3
|
+
<head>
|
4
|
+
<meta http-equiv="Content-Type" content="text/xhtml;charset=UTF-8"/>
|
5
|
+
<title>Passenger: SafeLibev.h Source File</title>
|
6
|
+
<link href="tabs.css" rel="stylesheet" type="text/css"/>
|
7
|
+
<link href="doxygen.css" rel="stylesheet" type="text/css"/>
|
8
|
+
</head>
|
9
|
+
<body>
|
10
|
+
<!-- Generated by Doxygen 1.6.2 -->
|
11
|
+
<div class="navigation" id="top">
|
12
|
+
<div class="tabs">
|
13
|
+
<ul>
|
14
|
+
<li><a href="main.html"><span>Main Page</span></a></li>
|
15
|
+
<li><a href="modules.html"><span>Modules</span></a></li>
|
16
|
+
<li><a href="namespaces.html"><span>Namespaces</span></a></li>
|
17
|
+
<li><a href="annotated.html"><span>Classes</span></a></li>
|
18
|
+
<li class="current"><a href="files.html"><span>Files</span></a></li>
|
19
|
+
</ul>
|
20
|
+
</div>
|
21
|
+
<div class="tabs">
|
22
|
+
<ul>
|
23
|
+
<li><a href="files.html"><span>File List</span></a></li>
|
24
|
+
</ul>
|
25
|
+
</div>
|
26
|
+
<h1>SafeLibev.h</h1><div class="fragment"><pre class="fragment"><a name="l00001"></a>00001 <span class="comment">/*</span>
|
27
|
+
<a name="l00002"></a>00002 <span class="comment"> * Phusion Passenger - http://www.modrails.com/</span>
|
28
|
+
<a name="l00003"></a>00003 <span class="comment"> * Copyright (c) 2010 Phusion</span>
|
29
|
+
<a name="l00004"></a>00004 <span class="comment"> *</span>
|
30
|
+
<a name="l00005"></a>00005 <span class="comment"> * "Phusion Passenger" is a trademark of Hongli Lai & Ninh Bui.</span>
|
31
|
+
<a name="l00006"></a>00006 <span class="comment"> *</span>
|
32
|
+
<a name="l00007"></a>00007 <span class="comment"> * Permission is hereby granted, free of charge, to any person obtaining a copy</span>
|
33
|
+
<a name="l00008"></a>00008 <span class="comment"> * of this software and associated documentation files (the "Software"), to deal</span>
|
34
|
+
<a name="l00009"></a>00009 <span class="comment"> * in the Software without restriction, including without limitation the rights</span>
|
35
|
+
<a name="l00010"></a>00010 <span class="comment"> * to use, copy, modify, merge, publish, distribute, sublicense, and/or sell</span>
|
36
|
+
<a name="l00011"></a>00011 <span class="comment"> * copies of the Software, and to permit persons to whom the Software is</span>
|
37
|
+
<a name="l00012"></a>00012 <span class="comment"> * furnished to do so, subject to the following conditions:</span>
|
38
|
+
<a name="l00013"></a>00013 <span class="comment"> *</span>
|
39
|
+
<a name="l00014"></a>00014 <span class="comment"> * The above copyright notice and this permission notice shall be included in</span>
|
40
|
+
<a name="l00015"></a>00015 <span class="comment"> * all copies or substantial portions of the Software.</span>
|
41
|
+
<a name="l00016"></a>00016 <span class="comment"> *</span>
|
42
|
+
<a name="l00017"></a>00017 <span class="comment"> * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR</span>
|
43
|
+
<a name="l00018"></a>00018 <span class="comment"> * IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,</span>
|
44
|
+
<a name="l00019"></a>00019 <span class="comment"> * FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE</span>
|
45
|
+
<a name="l00020"></a>00020 <span class="comment"> * AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER</span>
|
46
|
+
<a name="l00021"></a>00021 <span class="comment"> * LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,</span>
|
47
|
+
<a name="l00022"></a>00022 <span class="comment"> * OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN</span>
|
48
|
+
<a name="l00023"></a>00023 <span class="comment"> * THE SOFTWARE.</span>
|
49
|
+
<a name="l00024"></a>00024 <span class="comment"> */</span>
|
50
|
+
<a name="l00025"></a>00025 <span class="preprocessor">#ifndef _PASSENGER_SAFE_LIBEV_H_</span>
|
51
|
+
<a name="l00026"></a>00026 <span class="preprocessor"></span><span class="preprocessor">#define _PASSENGER_SAFE_LIBEV_H_</span>
|
52
|
+
<a name="l00027"></a>00027 <span class="preprocessor"></span>
|
53
|
+
<a name="l00028"></a>00028 <span class="preprocessor">#include <ev++.h></span>
|
54
|
+
<a name="l00029"></a>00029 <span class="preprocessor">#include <vector></span>
|
55
|
+
<a name="l00030"></a>00030 <span class="preprocessor">#include <boost/thread.hpp></span>
|
56
|
+
<a name="l00031"></a>00031 <span class="preprocessor">#include <boost/function.hpp></span>
|
57
|
+
<a name="l00032"></a>00032 <span class="preprocessor">#include <boost/bind.hpp></span>
|
58
|
+
<a name="l00033"></a>00033
|
59
|
+
<a name="l00034"></a>00034 <span class="keyword">namespace </span>Passenger {
|
60
|
+
<a name="l00035"></a>00035
|
61
|
+
<a name="l00036"></a>00036 <span class="keyword">using namespace </span>std;
|
62
|
+
<a name="l00037"></a>00037 <span class="keyword">using namespace </span>boost;
|
63
|
+
<a name="l00038"></a>00038
|
64
|
+
<a name="l00039"></a>00039 <span class="comment"></span>
|
65
|
+
<a name="l00040"></a>00040 <span class="comment">/**</span>
|
66
|
+
<a name="l00041"></a>00041 <span class="comment"> * Class for thread-safely using libev.</span>
|
67
|
+
<a name="l00042"></a>00042 <span class="comment"> */</span>
|
68
|
+
<a name="l00043"></a><a class="code" href="classPassenger_1_1SafeLibev.html">00043</a> <span class="keyword">class </span><a class="code" href="classPassenger_1_1SafeLibev.html" title="Class for thread-safely using libev.">SafeLibev</a> {
|
69
|
+
<a name="l00044"></a>00044 <span class="keyword">private</span>:
|
70
|
+
<a name="l00045"></a>00045 <span class="keyword">typedef</span> function<void ()> Callback;
|
71
|
+
<a name="l00046"></a>00046
|
72
|
+
<a name="l00047"></a>00047 <span class="keyword">struct </span>ev_loop *loop;
|
73
|
+
<a name="l00048"></a>00048 pthread_t loopThread;
|
74
|
+
<a name="l00049"></a>00049 ev_async async;
|
75
|
+
<a name="l00050"></a>00050
|
76
|
+
<a name="l00051"></a>00051 boost::mutex syncher;
|
77
|
+
<a name="l00052"></a>00052 condition_variable cond;
|
78
|
+
<a name="l00053"></a>00053 vector<Callback> commands;
|
79
|
+
<a name="l00054"></a>00054
|
80
|
+
<a name="l00055"></a>00055 <span class="keyword">static</span> <span class="keywordtype">void</span> asyncHandler(EV_P_ ev_async *w, <span class="keywordtype">int</span> revents) {
|
81
|
+
<a name="l00056"></a>00056 <a class="code" href="classPassenger_1_1SafeLibev.html" title="Class for thread-safely using libev.">SafeLibev</a> *<span class="keyword">self</span> = (<a class="code" href="classPassenger_1_1SafeLibev.html" title="Class for thread-safely using libev.">SafeLibev</a> *) w->data;
|
82
|
+
<a name="l00057"></a>00057 unique_lock<boost::mutex> l(self->syncher);
|
83
|
+
<a name="l00058"></a>00058 vector<Callback> commands = <span class="keyword">self</span>->commands;
|
84
|
+
<a name="l00059"></a>00059 <span class="keyword">self</span>->commands.clear();
|
85
|
+
<a name="l00060"></a>00060 l.unlock();
|
86
|
+
<a name="l00061"></a>00061
|
87
|
+
<a name="l00062"></a>00062 vector<Callback>::const_iterator it, end = commands.end();
|
88
|
+
<a name="l00063"></a>00063 <span class="keywordflow">for</span> (it = commands.begin(); it != commands.end(); it++) {
|
89
|
+
<a name="l00064"></a>00064 (*it)();
|
90
|
+
<a name="l00065"></a>00065 }
|
91
|
+
<a name="l00066"></a>00066 }
|
92
|
+
<a name="l00067"></a>00067
|
93
|
+
<a name="l00068"></a>00068 <span class="keyword">template</span><<span class="keyword">typename</span> Watcher>
|
94
|
+
<a name="l00069"></a>00069 <span class="keywordtype">void</span> startWatcherAndNotify(Watcher *watcher, <span class="keywordtype">bool</span> *done) {
|
95
|
+
<a name="l00070"></a>00070 watcher->set(loop);
|
96
|
+
<a name="l00071"></a>00071 watcher->start();
|
97
|
+
<a name="l00072"></a>00072 unique_lock<boost::mutex> l(syncher);
|
98
|
+
<a name="l00073"></a>00073 *done = <span class="keyword">true</span>;
|
99
|
+
<a name="l00074"></a>00074 cond.notify_all();
|
100
|
+
<a name="l00075"></a>00075 }
|
101
|
+
<a name="l00076"></a>00076
|
102
|
+
<a name="l00077"></a>00077 <span class="keyword">template</span><<span class="keyword">typename</span> Watcher>
|
103
|
+
<a name="l00078"></a>00078 <span class="keywordtype">void</span> stopWatcherAndNotify(Watcher *watcher, <span class="keywordtype">bool</span> *done) {
|
104
|
+
<a name="l00079"></a>00079 watcher->stop();
|
105
|
+
<a name="l00080"></a>00080 unique_lock<boost::mutex> l(syncher);
|
106
|
+
<a name="l00081"></a>00081 *done = <span class="keyword">true</span>;
|
107
|
+
<a name="l00082"></a>00082 cond.notify_all();
|
108
|
+
<a name="l00083"></a>00083 }
|
109
|
+
<a name="l00084"></a>00084
|
110
|
+
<a name="l00085"></a>00085 <span class="keyword">public</span>:
|
111
|
+
<a name="l00086"></a>00086 <a class="code" href="classPassenger_1_1SafeLibev.html" title="Class for thread-safely using libev.">SafeLibev</a>(<span class="keyword">struct</span> ev_loop *loop) {
|
112
|
+
<a name="l00087"></a>00087 this->loop = loop;
|
113
|
+
<a name="l00088"></a>00088 loopThread = pthread_self();
|
114
|
+
<a name="l00089"></a>00089 ev_async_init(&async, asyncHandler);
|
115
|
+
<a name="l00090"></a>00090 async.data = <span class="keyword">this</span>;
|
116
|
+
<a name="l00091"></a>00091 ev_async_start(loop, &async);
|
117
|
+
<a name="l00092"></a>00092 }
|
118
|
+
<a name="l00093"></a>00093
|
119
|
+
<a name="l00094"></a>00094 ~<a class="code" href="classPassenger_1_1SafeLibev.html" title="Class for thread-safely using libev.">SafeLibev</a>() {
|
120
|
+
<a name="l00095"></a>00095 ev_async_stop(loop, &async);
|
121
|
+
<a name="l00096"></a>00096 }
|
122
|
+
<a name="l00097"></a>00097
|
123
|
+
<a name="l00098"></a>00098 <span class="keyword">struct </span>ev_loop *getLoop()<span class="keyword"> const </span>{
|
124
|
+
<a name="l00099"></a>00099 <span class="keywordflow">return</span> loop;
|
125
|
+
<a name="l00100"></a>00100 }
|
126
|
+
<a name="l00101"></a>00101
|
127
|
+
<a name="l00102"></a>00102 <span class="keyword">template</span><<span class="keyword">typename</span> Watcher>
|
128
|
+
<a name="l00103"></a>00103 <span class="keywordtype">void</span> start(Watcher &watcher) {
|
129
|
+
<a name="l00104"></a>00104 <span class="keywordflow">if</span> (pthread_equal(pthread_self(), loopThread)) {
|
130
|
+
<a name="l00105"></a>00105 watcher.set(loop);
|
131
|
+
<a name="l00106"></a>00106 watcher.start();
|
132
|
+
<a name="l00107"></a>00107 } <span class="keywordflow">else</span> {
|
133
|
+
<a name="l00108"></a>00108 unique_lock<boost::mutex> l(syncher);
|
134
|
+
<a name="l00109"></a>00109 <span class="keywordtype">bool</span> done = <span class="keyword">false</span>;
|
135
|
+
<a name="l00110"></a>00110 commands.push_back(boost::bind(&SafeLibev::startWatcherAndNotify<Watcher>,
|
136
|
+
<a name="l00111"></a>00111 <span class="keyword">this</span>, &watcher, &done));
|
137
|
+
<a name="l00112"></a>00112 ev_async_send(loop, &async);
|
138
|
+
<a name="l00113"></a>00113 <span class="keywordflow">while</span> (!done) {
|
139
|
+
<a name="l00114"></a>00114 cond.wait(l);
|
140
|
+
<a name="l00115"></a>00115 }
|
141
|
+
<a name="l00116"></a>00116 }
|
142
|
+
<a name="l00117"></a>00117 }
|
143
|
+
<a name="l00118"></a>00118
|
144
|
+
<a name="l00119"></a>00119 <span class="keyword">template</span><<span class="keyword">typename</span> Watcher>
|
145
|
+
<a name="l00120"></a>00120 <span class="keywordtype">void</span> stop(Watcher &watcher) {
|
146
|
+
<a name="l00121"></a>00121 <span class="keywordflow">if</span> (pthread_equal(pthread_self(), loopThread)) {
|
147
|
+
<a name="l00122"></a>00122 watcher.stop();
|
148
|
+
<a name="l00123"></a>00123 } <span class="keywordflow">else</span> {
|
149
|
+
<a name="l00124"></a>00124 unique_lock<boost::mutex> l(syncher);
|
150
|
+
<a name="l00125"></a>00125 <span class="keywordtype">bool</span> done = <span class="keyword">false</span>;
|
151
|
+
<a name="l00126"></a>00126 commands.push_back(boost::bind(&SafeLibev::stopWatcherAndNotify<Watcher>,
|
152
|
+
<a name="l00127"></a>00127 <span class="keyword">this</span>, &watcher, &done));
|
153
|
+
<a name="l00128"></a>00128 ev_async_send(loop, &async);
|
154
|
+
<a name="l00129"></a>00129 <span class="keywordflow">while</span> (!done) {
|
155
|
+
<a name="l00130"></a>00130 cond.wait(l);
|
156
|
+
<a name="l00131"></a>00131 }
|
157
|
+
<a name="l00132"></a>00132 }
|
158
|
+
<a name="l00133"></a>00133 }
|
159
|
+
<a name="l00134"></a>00134
|
160
|
+
<a name="l00135"></a>00135 <span class="keywordtype">void</span> run(<span class="keyword">const</span> Callback &callback) {
|
161
|
+
<a name="l00136"></a>00136 <span class="keywordflow">if</span> (pthread_equal(pthread_self(), loopThread)) {
|
162
|
+
<a name="l00137"></a>00137 callback();
|
163
|
+
<a name="l00138"></a>00138 } <span class="keywordflow">else</span> {
|
164
|
+
<a name="l00139"></a>00139 unique_lock<boost::mutex> l(syncher);
|
165
|
+
<a name="l00140"></a>00140 commands.push_back(callback);
|
166
|
+
<a name="l00141"></a>00141 ev_async_send(loop, &async);
|
167
|
+
<a name="l00142"></a>00142 }
|
168
|
+
<a name="l00143"></a>00143 }
|
169
|
+
<a name="l00144"></a>00144 };
|
170
|
+
<a name="l00145"></a>00145
|
171
|
+
<a name="l00146"></a>00146
|
172
|
+
<a name="l00147"></a>00147 } <span class="comment">// namespace Passenger</span>
|
173
|
+
<a name="l00148"></a>00148
|
174
|
+
<a name="l00149"></a>00149 <span class="preprocessor">#endif </span><span class="comment">/* _PASSENGER_SAFE_LIBEV_H_ */</span>
|
175
|
+
</pre></div></div>
|
176
|
+
<hr size="1"/><address style="text-align: right;"><small>Generated by
|
177
|
+
<a href="http://www.doxygen.org/index.html">
|
178
|
+
<img class="footer" src="doxygen.png" alt="doxygen"/></a> 1.6.2 </small></address>
|
179
|
+
</body>
|
180
|
+
</html>
|