colouringcode-passenger 0.1
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- data/DEVELOPERS.TXT +101 -0
- data/INSTALL +6 -0
- data/LICENSE +19 -0
- data/NEWS +174 -0
- data/README +59 -0
- data/Rakefile +921 -0
- data/benchmark/ApplicationPool.cpp +52 -0
- data/benchmark/accept_vs_socketpair_vs_named_pipes.rb +126 -0
- data/benchmark/dispatcher.rb +42 -0
- data/benchmark/overhead_of_password_checking.rb +81 -0
- data/benchmark/socket_connections_vs_persistent_pipe.rb +99 -0
- data/benchmark/unix_sockets_vs_pipes.rb +83 -0
- data/bin/passenger-config +46 -0
- data/bin/passenger-install-apache2-module +223 -0
- data/bin/passenger-install-nginx-module +472 -0
- data/bin/passenger-make-enterprisey +83 -0
- data/bin/passenger-memory-stats +301 -0
- data/bin/passenger-spawn-server +68 -0
- data/bin/passenger-status +125 -0
- data/bin/passenger-stress-test +344 -0
- data/debian/compat +1 -0
- data/debian/control +21 -0
- data/debian/postinst +24 -0
- data/debian/prerm +2 -0
- data/doc/ApplicationPool algorithm.txt +402 -0
- data/doc/Architectural overview.html +1 -0
- data/doc/Architectural overview.txt +334 -0
- data/doc/Doxyfile +241 -0
- data/doc/Security of user switching support.html +1 -0
- data/doc/Security of user switching support.txt +197 -0
- data/doc/Users guide Apache.html +1 -0
- data/doc/Users guide Apache.txt +1848 -0
- data/doc/Users guide Nginx.html +1 -0
- data/doc/Users guide Nginx.txt +769 -0
- data/doc/definitions.h +5 -0
- data/doc/images/by_sa.png +0 -0
- data/doc/images/conservative_spawning.png +0 -0
- data/doc/images/conservative_spawning.svg +248 -0
- data/doc/images/icons/README +5 -0
- data/doc/images/icons/callouts/1.png +0 -0
- data/doc/images/icons/callouts/10.png +0 -0
- data/doc/images/icons/callouts/11.png +0 -0
- data/doc/images/icons/callouts/12.png +0 -0
- data/doc/images/icons/callouts/13.png +0 -0
- data/doc/images/icons/callouts/14.png +0 -0
- data/doc/images/icons/callouts/15.png +0 -0
- data/doc/images/icons/callouts/2.png +0 -0
- data/doc/images/icons/callouts/3.png +0 -0
- data/doc/images/icons/callouts/4.png +0 -0
- data/doc/images/icons/callouts/5.png +0 -0
- data/doc/images/icons/callouts/6.png +0 -0
- data/doc/images/icons/callouts/7.png +0 -0
- data/doc/images/icons/callouts/8.png +0 -0
- data/doc/images/icons/callouts/9.png +0 -0
- data/doc/images/icons/caution.png +0 -0
- data/doc/images/icons/example.png +0 -0
- data/doc/images/icons/home.png +0 -0
- data/doc/images/icons/important.png +0 -0
- data/doc/images/icons/next.png +0 -0
- data/doc/images/icons/note.png +0 -0
- data/doc/images/icons/prev.png +0 -0
- data/doc/images/icons/tip.png +0 -0
- data/doc/images/icons/up.png +0 -0
- data/doc/images/icons/warning.png +0 -0
- data/doc/images/passenger_architecture.png +0 -0
- data/doc/images/passenger_architecture.svg +401 -0
- data/doc/images/phusion_banner.png +0 -0
- data/doc/images/smart-lv2.png +0 -0
- data/doc/images/smart-lv2.svg +320 -0
- data/doc/images/spawn_server_architecture.png +0 -0
- data/doc/images/spawn_server_architecture.svg +655 -0
- data/doc/images/typical_isolated_web_application.png +0 -0
- data/doc/images/typical_isolated_web_application.svg +213 -0
- data/doc/rdoc/classes/ConditionVariable.html +194 -0
- data/doc/rdoc/classes/Exception.html +120 -0
- data/doc/rdoc/classes/GC.html +113 -0
- data/doc/rdoc/classes/IO.html +169 -0
- data/doc/rdoc/classes/PhusionPassenger/AbstractInstaller.html +153 -0
- data/doc/rdoc/classes/PhusionPassenger/AbstractRequestHandler.html +517 -0
- data/doc/rdoc/classes/PhusionPassenger/AbstractServer/ServerAlreadyStarted.html +97 -0
- data/doc/rdoc/classes/PhusionPassenger/AbstractServer/ServerError.html +96 -0
- data/doc/rdoc/classes/PhusionPassenger/AbstractServer/ServerNotStarted.html +97 -0
- data/doc/rdoc/classes/PhusionPassenger/AbstractServer/UnknownMessage.html +96 -0
- data/doc/rdoc/classes/PhusionPassenger/AbstractServer.html +719 -0
- data/doc/rdoc/classes/PhusionPassenger/AbstractServerCollection.html +598 -0
- data/doc/rdoc/classes/PhusionPassenger/AdminTools/ControlProcess/Instance.html +138 -0
- data/doc/rdoc/classes/PhusionPassenger/AdminTools/ControlProcess.html +317 -0
- data/doc/rdoc/classes/PhusionPassenger/AdminTools.html +140 -0
- data/doc/rdoc/classes/PhusionPassenger/AppInitError.html +154 -0
- data/doc/rdoc/classes/PhusionPassenger/Application.html +283 -0
- data/doc/rdoc/classes/PhusionPassenger/ConsoleTextTemplate.html +172 -0
- data/doc/rdoc/classes/PhusionPassenger/FrameworkInitError.html +145 -0
- data/doc/rdoc/classes/PhusionPassenger/HTMLTemplate.html +181 -0
- data/doc/rdoc/classes/PhusionPassenger/InitializationError.html +141 -0
- data/doc/rdoc/classes/PhusionPassenger/InvalidPath.html +92 -0
- data/doc/rdoc/classes/PhusionPassenger/MessageChannel.html +489 -0
- data/doc/rdoc/classes/PhusionPassenger/NativeSupport.html +350 -0
- data/doc/rdoc/classes/PhusionPassenger/Rack/ApplicationSpawner.html +188 -0
- data/doc/rdoc/classes/PhusionPassenger/Rack/RequestHandler.html +199 -0
- data/doc/rdoc/classes/PhusionPassenger/Rack.html +91 -0
- data/doc/rdoc/classes/PhusionPassenger/Railz/ApplicationSpawner/Error.html +98 -0
- data/doc/rdoc/classes/PhusionPassenger/Railz/ApplicationSpawner.html +438 -0
- data/doc/rdoc/classes/PhusionPassenger/Railz/CGIFixed.html +200 -0
- data/doc/rdoc/classes/PhusionPassenger/Railz/FrameworkSpawner/Error.html +98 -0
- data/doc/rdoc/classes/PhusionPassenger/Railz/FrameworkSpawner.html +436 -0
- data/doc/rdoc/classes/PhusionPassenger/Railz/RequestHandler.html +155 -0
- data/doc/rdoc/classes/PhusionPassenger/Railz.html +95 -0
- data/doc/rdoc/classes/PhusionPassenger/SpawnManager.html +402 -0
- data/doc/rdoc/classes/PhusionPassenger/UnknownError.html +125 -0
- data/doc/rdoc/classes/PhusionPassenger/Utils/PseudoIO.html +169 -0
- data/doc/rdoc/classes/PhusionPassenger/Utils.html +803 -0
- data/doc/rdoc/classes/PhusionPassenger/VersionNotFound.html +140 -0
- data/doc/rdoc/classes/PhusionPassenger/WSGI/ApplicationSpawner.html +188 -0
- data/doc/rdoc/classes/PhusionPassenger/WSGI.html +89 -0
- data/doc/rdoc/classes/PhusionPassenger.html +238 -0
- data/doc/rdoc/classes/PlatformInfo.html +866 -0
- data/doc/rdoc/classes/RakeExtensions.html +197 -0
- data/doc/rdoc/classes/Signal.html +131 -0
- data/doc/rdoc/created.rid +1 -0
- data/doc/rdoc/files/DEVELOPERS_TXT.html +255 -0
- data/doc/rdoc/files/README.html +175 -0
- data/doc/rdoc/files/ext/phusion_passenger/native_support_c.html +92 -0
- data/doc/rdoc/files/lib/phusion_passenger/abstract_installer_rb.html +129 -0
- data/doc/rdoc/files/lib/phusion_passenger/abstract_request_handler_rb.html +129 -0
- data/doc/rdoc/files/lib/phusion_passenger/abstract_server_collection_rb.html +126 -0
- data/doc/rdoc/files/lib/phusion_passenger/abstract_server_rb.html +128 -0
- data/doc/rdoc/files/lib/phusion_passenger/admin_tools/control_process_rb.html +130 -0
- data/doc/rdoc/files/lib/phusion_passenger/admin_tools_rb.html +122 -0
- data/doc/rdoc/files/lib/phusion_passenger/application_rb.html +127 -0
- data/doc/rdoc/files/lib/phusion_passenger/console_text_template_rb.html +126 -0
- data/doc/rdoc/files/lib/phusion_passenger/constants_rb.html +122 -0
- data/doc/rdoc/files/lib/phusion_passenger/dependencies_rb.html +134 -0
- data/doc/rdoc/files/lib/phusion_passenger/events_rb.html +122 -0
- data/doc/rdoc/files/lib/phusion_passenger/exceptions_rb.html +122 -0
- data/doc/rdoc/files/lib/phusion_passenger/html_template_rb.html +126 -0
- data/doc/rdoc/files/lib/phusion_passenger/message_channel_rb.html +120 -0
- data/doc/rdoc/files/lib/phusion_passenger/packaging_rb.html +122 -0
- data/doc/rdoc/files/lib/phusion_passenger/platform_info_rb.html +127 -0
- data/doc/rdoc/files/lib/phusion_passenger/rack/application_spawner_rb.html +133 -0
- data/doc/rdoc/files/lib/phusion_passenger/rack/request_handler_rb.html +125 -0
- data/doc/rdoc/files/lib/phusion_passenger/railz/application_spawner_rb.html +140 -0
- data/doc/rdoc/files/lib/phusion_passenger/railz/cgi_fixed_rb.html +126 -0
- data/doc/rdoc/files/lib/phusion_passenger/railz/framework_spawner_rb.html +145 -0
- data/doc/rdoc/files/lib/phusion_passenger/railz/request_handler_rb.html +125 -0
- data/doc/rdoc/files/lib/phusion_passenger/simple_benchmarking_rb.html +122 -0
- data/doc/rdoc/files/lib/phusion_passenger/spawn_manager_rb.html +159 -0
- data/doc/rdoc/files/lib/phusion_passenger/utils_rb.html +174 -0
- data/doc/rdoc/files/lib/phusion_passenger/wsgi/application_spawner_rb.html +129 -0
- data/doc/rdoc/files/misc/rake/extensions_rb.html +130 -0
- data/doc/rdoc/fr_class_index.html +91 -0
- data/doc/rdoc/fr_file_index.html +76 -0
- data/doc/rdoc/fr_method_index.html +205 -0
- data/doc/rdoc/index.html +26 -0
- data/doc/rdoc/rdoc-style.css +187 -0
- data/doc/template/horo.rb +613 -0
- data/doc/users_guide_snippets/analysis_and_system_maintenance_tools.txt +144 -0
- data/doc/users_guide_snippets/appendix_a_about.txt +13 -0
- data/doc/users_guide_snippets/appendix_b_terminology.txt +63 -0
- data/doc/users_guide_snippets/appendix_c_spawning_methods.txt +304 -0
- data/doc/users_guide_snippets/global_queueing_explained.txt +78 -0
- data/doc/users_guide_snippets/rackup_specifications.txt +71 -0
- data/doc/users_guide_snippets/rails_spawn_method.txt +48 -0
- data/doc/users_guide_snippets/tips.txt +173 -0
- data/ext/apache2/Bucket.cpp +190 -0
- data/ext/apache2/Bucket.h +87 -0
- data/ext/apache2/Configuration.cpp +798 -0
- data/ext/apache2/Configuration.h +405 -0
- data/ext/apache2/DirectoryMapper.h +296 -0
- data/ext/apache2/Hooks.cpp +1615 -0
- data/ext/apache2/Hooks.h +45 -0
- data/ext/apache2/LICENSE-CNRI.TXT +79 -0
- data/ext/apache2/mod_passenger.c +38 -0
- data/ext/boost/LICENSE.TXT +23 -0
- data/ext/boost/VERSION.TXT +1 -0
- data/ext/boost/algorithm/string/case_conv.hpp +176 -0
- data/ext/boost/algorithm/string/compare.hpp +199 -0
- data/ext/boost/algorithm/string/concept.hpp +83 -0
- data/ext/boost/algorithm/string/config.hpp +28 -0
- data/ext/boost/algorithm/string/constants.hpp +36 -0
- data/ext/boost/algorithm/string/detail/case_conv.hpp +112 -0
- data/ext/boost/algorithm/string/detail/find_format.hpp +193 -0
- data/ext/boost/algorithm/string/detail/find_format_all.hpp +263 -0
- data/ext/boost/algorithm/string/detail/find_format_store.hpp +71 -0
- data/ext/boost/algorithm/string/detail/finder.hpp +646 -0
- data/ext/boost/algorithm/string/detail/formatter.hpp +94 -0
- data/ext/boost/algorithm/string/detail/replace_storage.hpp +159 -0
- data/ext/boost/algorithm/string/detail/sequence.hpp +200 -0
- data/ext/boost/algorithm/string/detail/util.hpp +106 -0
- data/ext/boost/algorithm/string/erase.hpp +844 -0
- data/ext/boost/algorithm/string/find_format.hpp +269 -0
- data/ext/boost/algorithm/string/finder.hpp +270 -0
- data/ext/boost/algorithm/string/formatter.hpp +103 -0
- data/ext/boost/algorithm/string/replace.hpp +928 -0
- data/ext/boost/algorithm/string/sequence_traits.hpp +193 -0
- data/ext/boost/algorithm/string/yes_no_type.hpp +33 -0
- data/ext/boost/assert.hpp +50 -0
- data/ext/boost/bind/arg.hpp +62 -0
- data/ext/boost/bind/bind_cc.hpp +117 -0
- data/ext/boost/bind/bind_mf_cc.hpp +227 -0
- data/ext/boost/bind/bind_template.hpp +345 -0
- data/ext/boost/bind/mem_fn_cc.hpp +103 -0
- data/ext/boost/bind/mem_fn_template.hpp +1020 -0
- data/ext/boost/bind/placeholders.hpp +68 -0
- data/ext/boost/bind/storage.hpp +475 -0
- data/ext/boost/bind.hpp +1689 -0
- data/ext/boost/call_traits.hpp +24 -0
- data/ext/boost/checked_delete.hpp +69 -0
- data/ext/boost/concept/assert.hpp +46 -0
- data/ext/boost/concept/detail/concept_def.hpp +51 -0
- data/ext/boost/concept/detail/concept_undef.hpp +5 -0
- data/ext/boost/concept/detail/general.hpp +66 -0
- data/ext/boost/concept/detail/has_constraints.hpp +48 -0
- data/ext/boost/concept/usage.hpp +43 -0
- data/ext/boost/concept_check.hpp +988 -0
- data/ext/boost/config/abi/borland_prefix.hpp +27 -0
- data/ext/boost/config/abi/borland_suffix.hpp +12 -0
- data/ext/boost/config/abi/msvc_prefix.hpp +8 -0
- data/ext/boost/config/abi/msvc_suffix.hpp +8 -0
- data/ext/boost/config/abi_prefix.hpp +25 -0
- data/ext/boost/config/abi_suffix.hpp +26 -0
- data/ext/boost/config/auto_link.hpp +368 -0
- data/ext/boost/config/compiler/borland.hpp +209 -0
- data/ext/boost/config/compiler/comeau.hpp +59 -0
- data/ext/boost/config/compiler/common_edg.hpp +62 -0
- data/ext/boost/config/compiler/compaq_cxx.hpp +19 -0
- data/ext/boost/config/compiler/digitalmars.hpp +67 -0
- data/ext/boost/config/compiler/gcc.hpp +149 -0
- data/ext/boost/config/compiler/gcc_xml.hpp +30 -0
- data/ext/boost/config/compiler/greenhills.hpp +28 -0
- data/ext/boost/config/compiler/hp_acc.hpp +95 -0
- data/ext/boost/config/compiler/intel.hpp +162 -0
- data/ext/boost/config/compiler/kai.hpp +35 -0
- data/ext/boost/config/compiler/metrowerks.hpp +111 -0
- data/ext/boost/config/compiler/mpw.hpp +51 -0
- data/ext/boost/config/compiler/pgi.hpp +25 -0
- data/ext/boost/config/compiler/sgi_mipspro.hpp +28 -0
- data/ext/boost/config/compiler/sunpro_cc.hpp +98 -0
- data/ext/boost/config/compiler/vacpp.hpp +60 -0
- data/ext/boost/config/compiler/visualc.hpp +191 -0
- data/ext/boost/config/no_tr1/complex.hpp +28 -0
- data/ext/boost/config/no_tr1/functional.hpp +28 -0
- data/ext/boost/config/no_tr1/memory.hpp +28 -0
- data/ext/boost/config/no_tr1/utility.hpp +28 -0
- data/ext/boost/config/platform/aix.hpp +33 -0
- data/ext/boost/config/platform/amigaos.hpp +15 -0
- data/ext/boost/config/platform/beos.hpp +26 -0
- data/ext/boost/config/platform/bsd.hpp +73 -0
- data/ext/boost/config/platform/cygwin.hpp +51 -0
- data/ext/boost/config/platform/hpux.hpp +84 -0
- data/ext/boost/config/platform/irix.hpp +31 -0
- data/ext/boost/config/platform/linux.hpp +98 -0
- data/ext/boost/config/platform/macos.hpp +78 -0
- data/ext/boost/config/platform/qnxnto.hpp +31 -0
- data/ext/boost/config/platform/solaris.hpp +21 -0
- data/ext/boost/config/platform/win32.hpp +58 -0
- data/ext/boost/config/posix_features.hpp +95 -0
- data/ext/boost/config/requires_threads.hpp +92 -0
- data/ext/boost/config/select_compiler_config.hpp +115 -0
- data/ext/boost/config/select_platform_config.hpp +90 -0
- data/ext/boost/config/select_stdlib_config.hpp +68 -0
- data/ext/boost/config/stdlib/dinkumware.hpp +106 -0
- data/ext/boost/config/stdlib/libcomo.hpp +46 -0
- data/ext/boost/config/stdlib/libstdcpp3.hpp +73 -0
- data/ext/boost/config/stdlib/modena.hpp +30 -0
- data/ext/boost/config/stdlib/msl.hpp +59 -0
- data/ext/boost/config/stdlib/roguewave.hpp +153 -0
- data/ext/boost/config/stdlib/sgi.hpp +111 -0
- data/ext/boost/config/stdlib/stlport.hpp +201 -0
- data/ext/boost/config/stdlib/vacpp.hpp +18 -0
- data/ext/boost/config/suffix.hpp +566 -0
- data/ext/boost/config/user.hpp +124 -0
- data/ext/boost/config.hpp +70 -0
- data/ext/boost/cstdint.hpp +449 -0
- data/ext/boost/current_function.hpp +67 -0
- data/ext/boost/date_time/adjust_functors.hpp +178 -0
- data/ext/boost/date_time/c_time.hpp +91 -0
- data/ext/boost/date_time/compiler_config.hpp +149 -0
- data/ext/boost/date_time/constrained_value.hpp +98 -0
- data/ext/boost/date_time/date.hpp +197 -0
- data/ext/boost/date_time/date_clock_device.hpp +77 -0
- data/ext/boost/date_time/date_defs.hpp +26 -0
- data/ext/boost/date_time/date_duration.hpp +147 -0
- data/ext/boost/date_time/date_duration_types.hpp +269 -0
- data/ext/boost/date_time/date_facet.hpp +775 -0
- data/ext/boost/date_time/date_format_simple.hpp +159 -0
- data/ext/boost/date_time/date_formatting.hpp +127 -0
- data/ext/boost/date_time/date_formatting_limited.hpp +121 -0
- data/ext/boost/date_time/date_formatting_locales.hpp +233 -0
- data/ext/boost/date_time/date_generator_formatter.hpp +263 -0
- data/ext/boost/date_time/date_generator_parser.hpp +329 -0
- data/ext/boost/date_time/date_generators.hpp +509 -0
- data/ext/boost/date_time/date_iterator.hpp +101 -0
- data/ext/boost/date_time/date_names_put.hpp +320 -0
- data/ext/boost/date_time/date_parsing.hpp +299 -0
- data/ext/boost/date_time/dst_rules.hpp +391 -0
- data/ext/boost/date_time/filetime_functions.hpp +78 -0
- data/ext/boost/date_time/format_date_parser.hpp +731 -0
- data/ext/boost/date_time/gregorian/conversion.hpp +73 -0
- data/ext/boost/date_time/gregorian/formatters.hpp +162 -0
- data/ext/boost/date_time/gregorian/formatters_limited.hpp +81 -0
- data/ext/boost/date_time/gregorian/greg_calendar.hpp +47 -0
- data/ext/boost/date_time/gregorian/greg_date.hpp +135 -0
- data/ext/boost/date_time/gregorian/greg_day.hpp +57 -0
- data/ext/boost/date_time/gregorian/greg_day_of_year.hpp +38 -0
- data/ext/boost/date_time/gregorian/greg_duration.hpp +38 -0
- data/ext/boost/date_time/gregorian/greg_duration_types.hpp +34 -0
- data/ext/boost/date_time/gregorian/greg_month.hpp +105 -0
- data/ext/boost/date_time/gregorian/greg_weekday.hpp +66 -0
- data/ext/boost/date_time/gregorian/greg_year.hpp +53 -0
- data/ext/boost/date_time/gregorian/greg_ymd.hpp +33 -0
- data/ext/boost/date_time/gregorian/gregorian.hpp +38 -0
- data/ext/boost/date_time/gregorian/gregorian_io.hpp +777 -0
- data/ext/boost/date_time/gregorian/gregorian_types.hpp +109 -0
- data/ext/boost/date_time/gregorian/parsers.hpp +91 -0
- data/ext/boost/date_time/gregorian_calendar.hpp +70 -0
- data/ext/boost/date_time/gregorian_calendar.ipp +219 -0
- data/ext/boost/date_time/int_adapter.hpp +507 -0
- data/ext/boost/date_time/iso_format.hpp +303 -0
- data/ext/boost/date_time/locale_config.hpp +31 -0
- data/ext/boost/date_time/microsec_time_clock.hpp +205 -0
- data/ext/boost/date_time/parse_format_base.hpp +29 -0
- data/ext/boost/date_time/period.hpp +377 -0
- data/ext/boost/date_time/period_formatter.hpp +196 -0
- data/ext/boost/date_time/period_parser.hpp +196 -0
- data/ext/boost/date_time/posix_time/conversion.hpp +93 -0
- data/ext/boost/date_time/posix_time/date_duration_operators.hpp +114 -0
- data/ext/boost/date_time/posix_time/posix_time.hpp +39 -0
- data/ext/boost/date_time/posix_time/posix_time_config.hpp +178 -0
- data/ext/boost/date_time/posix_time/posix_time_duration.hpp +82 -0
- data/ext/boost/date_time/posix_time/posix_time_io.hpp +246 -0
- data/ext/boost/date_time/posix_time/posix_time_system.hpp +68 -0
- data/ext/boost/date_time/posix_time/posix_time_types.hpp +55 -0
- data/ext/boost/date_time/posix_time/ptime.hpp +65 -0
- data/ext/boost/date_time/posix_time/time_formatters.hpp +289 -0
- data/ext/boost/date_time/posix_time/time_parsers.hpp +44 -0
- data/ext/boost/date_time/posix_time/time_period.hpp +29 -0
- data/ext/boost/date_time/special_defs.hpp +25 -0
- data/ext/boost/date_time/special_values_formatter.hpp +96 -0
- data/ext/boost/date_time/special_values_parser.hpp +159 -0
- data/ext/boost/date_time/string_convert.hpp +33 -0
- data/ext/boost/date_time/string_parse_tree.hpp +278 -0
- data/ext/boost/date_time/strings_from_facet.hpp +123 -0
- data/ext/boost/date_time/time.hpp +190 -0
- data/ext/boost/date_time/time_clock.hpp +83 -0
- data/ext/boost/date_time/time_defs.hpp +33 -0
- data/ext/boost/date_time/time_duration.hpp +281 -0
- data/ext/boost/date_time/time_facet.hpp +1263 -0
- data/ext/boost/date_time/time_formatting_streams.hpp +119 -0
- data/ext/boost/date_time/time_iterator.hpp +52 -0
- data/ext/boost/date_time/time_parsing.hpp +321 -0
- data/ext/boost/date_time/time_resolution_traits.hpp +140 -0
- data/ext/boost/date_time/time_system_counted.hpp +254 -0
- data/ext/boost/date_time/time_system_split.hpp +213 -0
- data/ext/boost/date_time/wrapping_int.hpp +163 -0
- data/ext/boost/date_time/year_month_day.hpp +45 -0
- data/ext/boost/detail/atomic_count.hpp +124 -0
- data/ext/boost/detail/atomic_count_gcc.hpp +68 -0
- data/ext/boost/detail/atomic_count_gcc_x86.hpp +84 -0
- data/ext/boost/detail/atomic_count_pthreads.hpp +96 -0
- data/ext/boost/detail/atomic_count_solaris.hpp +59 -0
- data/ext/boost/detail/atomic_count_sync.hpp +57 -0
- data/ext/boost/detail/atomic_count_win32.hpp +63 -0
- data/ext/boost/detail/bad_weak_ptr.hpp +59 -0
- data/ext/boost/detail/call_traits.hpp +164 -0
- data/ext/boost/detail/endian.hpp +73 -0
- data/ext/boost/detail/indirect_traits.hpp +487 -0
- data/ext/boost/detail/iterator.hpp +494 -0
- data/ext/boost/detail/lcast_precision.hpp +184 -0
- data/ext/boost/detail/limits.hpp +449 -0
- data/ext/boost/detail/reference_content.hpp +141 -0
- data/ext/boost/detail/shared_count.hpp +375 -0
- data/ext/boost/detail/sp_counted_base.hpp +81 -0
- data/ext/boost/detail/sp_counted_base_acc_ia64.hpp +150 -0
- data/ext/boost/detail/sp_counted_base_cw_ppc.hpp +170 -0
- data/ext/boost/detail/sp_counted_base_cw_x86.hpp +158 -0
- data/ext/boost/detail/sp_counted_base_gcc_ia64.hpp +157 -0
- data/ext/boost/detail/sp_counted_base_gcc_ppc.hpp +181 -0
- data/ext/boost/detail/sp_counted_base_gcc_sparc.hpp +166 -0
- data/ext/boost/detail/sp_counted_base_gcc_x86.hpp +173 -0
- data/ext/boost/detail/sp_counted_base_nt.hpp +107 -0
- data/ext/boost/detail/sp_counted_base_pt.hpp +135 -0
- data/ext/boost/detail/sp_counted_base_solaris.hpp +113 -0
- data/ext/boost/detail/sp_counted_base_sync.hpp +151 -0
- data/ext/boost/detail/sp_counted_base_w32.hpp +130 -0
- data/ext/boost/detail/sp_counted_impl.hpp +231 -0
- data/ext/boost/detail/sp_typeinfo.hpp +83 -0
- data/ext/boost/detail/workaround.hpp +202 -0
- data/ext/boost/enable_shared_from_this.hpp +73 -0
- data/ext/boost/function/detail/function_iterate.hpp +16 -0
- data/ext/boost/function/detail/maybe_include.hpp +267 -0
- data/ext/boost/function/detail/prologue.hpp +25 -0
- data/ext/boost/function/function_base.hpp +762 -0
- data/ext/boost/function/function_template.hpp +969 -0
- data/ext/boost/function.hpp +66 -0
- data/ext/boost/function_equal.hpp +28 -0
- data/ext/boost/get_pointer.hpp +29 -0
- data/ext/boost/implicit_cast.hpp +29 -0
- data/ext/boost/integer_traits.hpp +236 -0
- data/ext/boost/io/ios_state.hpp +431 -0
- data/ext/boost/io_fwd.hpp +67 -0
- data/ext/boost/is_placeholder.hpp +31 -0
- data/ext/boost/iterator/detail/config_def.hpp +135 -0
- data/ext/boost/iterator/detail/config_undef.hpp +25 -0
- data/ext/boost/iterator/detail/enable_if.hpp +86 -0
- data/ext/boost/iterator/detail/facade_iterator_category.hpp +200 -0
- data/ext/boost/iterator/detail/minimum_category.hpp +116 -0
- data/ext/boost/iterator/interoperable.hpp +50 -0
- data/ext/boost/iterator/iterator_adaptor.hpp +366 -0
- data/ext/boost/iterator/iterator_categories.hpp +188 -0
- data/ext/boost/iterator/iterator_facade.hpp +879 -0
- data/ext/boost/iterator/iterator_traits.hpp +92 -0
- data/ext/boost/iterator/reverse_iterator.hpp +69 -0
- data/ext/boost/iterator/transform_iterator.hpp +188 -0
- data/ext/boost/iterator.hpp +59 -0
- data/ext/boost/lexical_cast.hpp +1205 -0
- data/ext/boost/limits.hpp +146 -0
- data/ext/boost/mem_fn.hpp +389 -0
- data/ext/boost/mpl/always.hpp +39 -0
- data/ext/boost/mpl/and.hpp +60 -0
- data/ext/boost/mpl/apply.hpp +229 -0
- data/ext/boost/mpl/apply_fwd.hpp +107 -0
- data/ext/boost/mpl/apply_wrap.hpp +203 -0
- data/ext/boost/mpl/arg.hpp +131 -0
- data/ext/boost/mpl/arg_fwd.hpp +28 -0
- data/ext/boost/mpl/assert.hpp +370 -0
- data/ext/boost/mpl/aux_/adl_barrier.hpp +48 -0
- data/ext/boost/mpl/aux_/arg_typedef.hpp +31 -0
- data/ext/boost/mpl/aux_/arity.hpp +39 -0
- data/ext/boost/mpl/aux_/arity_spec.hpp +67 -0
- data/ext/boost/mpl/aux_/common_name_wknd.hpp +34 -0
- data/ext/boost/mpl/aux_/config/adl.hpp +40 -0
- data/ext/boost/mpl/aux_/config/arrays.hpp +30 -0
- data/ext/boost/mpl/aux_/config/bind.hpp +33 -0
- data/ext/boost/mpl/aux_/config/compiler.hpp +64 -0
- data/ext/boost/mpl/aux_/config/ctps.hpp +30 -0
- data/ext/boost/mpl/aux_/config/dtp.hpp +46 -0
- data/ext/boost/mpl/aux_/config/eti.hpp +47 -0
- data/ext/boost/mpl/aux_/config/gcc.hpp +23 -0
- data/ext/boost/mpl/aux_/config/has_apply.hpp +32 -0
- data/ext/boost/mpl/aux_/config/has_xxx.hpp +33 -0
- data/ext/boost/mpl/aux_/config/integral.hpp +38 -0
- data/ext/boost/mpl/aux_/config/intel.hpp +21 -0
- data/ext/boost/mpl/aux_/config/lambda.hpp +32 -0
- data/ext/boost/mpl/aux_/config/msvc.hpp +21 -0
- data/ext/boost/mpl/aux_/config/msvc_typename.hpp +26 -0
- data/ext/boost/mpl/aux_/config/nttp.hpp +41 -0
- data/ext/boost/mpl/aux_/config/overload_resolution.hpp +29 -0
- data/ext/boost/mpl/aux_/config/pp_counter.hpp +26 -0
- data/ext/boost/mpl/aux_/config/preprocessor.hpp +39 -0
- data/ext/boost/mpl/aux_/config/static_constant.hpp +25 -0
- data/ext/boost/mpl/aux_/config/ttp.hpp +41 -0
- data/ext/boost/mpl/aux_/config/use_preprocessed.hpp +19 -0
- data/ext/boost/mpl/aux_/config/workaround.hpp +19 -0
- data/ext/boost/mpl/aux_/full_lambda.hpp +354 -0
- data/ext/boost/mpl/aux_/has_apply.hpp +32 -0
- data/ext/boost/mpl/aux_/has_type.hpp +23 -0
- data/ext/boost/mpl/aux_/include_preprocessed.hpp +42 -0
- data/ext/boost/mpl/aux_/integral_wrapper.hpp +93 -0
- data/ext/boost/mpl/aux_/lambda_arity_param.hpp +25 -0
- data/ext/boost/mpl/aux_/lambda_support.hpp +169 -0
- data/ext/boost/mpl/aux_/msvc_never_true.hpp +34 -0
- data/ext/boost/mpl/aux_/na.hpp +95 -0
- data/ext/boost/mpl/aux_/na_assert.hpp +34 -0
- data/ext/boost/mpl/aux_/na_fwd.hpp +31 -0
- data/ext/boost/mpl/aux_/na_spec.hpp +175 -0
- data/ext/boost/mpl/aux_/nested_type_wknd.hpp +48 -0
- data/ext/boost/mpl/aux_/nttp_decl.hpp +35 -0
- data/ext/boost/mpl/aux_/preprocessed/gcc/and.hpp +69 -0
- data/ext/boost/mpl/aux_/preprocessed/gcc/apply.hpp +169 -0
- data/ext/boost/mpl/aux_/preprocessed/gcc/apply_fwd.hpp +52 -0
- data/ext/boost/mpl/aux_/preprocessed/gcc/apply_wrap.hpp +84 -0
- data/ext/boost/mpl/aux_/preprocessed/gcc/arg.hpp +123 -0
- data/ext/boost/mpl/aux_/preprocessed/gcc/bind.hpp +561 -0
- data/ext/boost/mpl/aux_/preprocessed/gcc/bind_fwd.hpp +52 -0
- data/ext/boost/mpl/aux_/preprocessed/gcc/full_lambda.hpp +558 -0
- data/ext/boost/mpl/aux_/preprocessed/gcc/or.hpp +69 -0
- data/ext/boost/mpl/aux_/preprocessed/gcc/placeholders.hpp +105 -0
- data/ext/boost/mpl/aux_/preprocessed/gcc/quote.hpp +123 -0
- data/ext/boost/mpl/aux_/preprocessed/gcc/template_arity.hpp +101 -0
- data/ext/boost/mpl/aux_/preprocessor/def_params_tail.hpp +105 -0
- data/ext/boost/mpl/aux_/preprocessor/enum.hpp +62 -0
- data/ext/boost/mpl/aux_/preprocessor/filter_params.hpp +28 -0
- data/ext/boost/mpl/aux_/preprocessor/params.hpp +65 -0
- data/ext/boost/mpl/aux_/preprocessor/sub.hpp +65 -0
- data/ext/boost/mpl/aux_/static_cast.hpp +27 -0
- data/ext/boost/mpl/aux_/template_arity.hpp +189 -0
- data/ext/boost/mpl/aux_/template_arity_fwd.hpp +23 -0
- data/ext/boost/mpl/aux_/type_wrapper.hpp +47 -0
- data/ext/boost/mpl/aux_/value_wknd.hpp +89 -0
- data/ext/boost/mpl/aux_/yes_no.hpp +58 -0
- data/ext/boost/mpl/bind.hpp +551 -0
- data/ext/boost/mpl/bind_fwd.hpp +99 -0
- data/ext/boost/mpl/bool.hpp +39 -0
- data/ext/boost/mpl/bool_fwd.hpp +33 -0
- data/ext/boost/mpl/eval_if.hpp +71 -0
- data/ext/boost/mpl/has_xxx.hpp +272 -0
- data/ext/boost/mpl/identity.hpp +45 -0
- data/ext/boost/mpl/if.hpp +135 -0
- data/ext/boost/mpl/int.hpp +22 -0
- data/ext/boost/mpl/int_fwd.hpp +27 -0
- data/ext/boost/mpl/integral_c.hpp +51 -0
- data/ext/boost/mpl/integral_c_fwd.hpp +32 -0
- data/ext/boost/mpl/integral_c_tag.hpp +26 -0
- data/ext/boost/mpl/lambda.hpp +29 -0
- data/ext/boost/mpl/lambda_fwd.hpp +57 -0
- data/ext/boost/mpl/limits/arity.hpp +21 -0
- data/ext/boost/mpl/logical.hpp +21 -0
- data/ext/boost/mpl/next.hpp +19 -0
- data/ext/boost/mpl/next_prior.hpp +49 -0
- data/ext/boost/mpl/not.hpp +51 -0
- data/ext/boost/mpl/or.hpp +61 -0
- data/ext/boost/mpl/placeholders.hpp +100 -0
- data/ext/boost/mpl/protect.hpp +55 -0
- data/ext/boost/mpl/quote.hpp +140 -0
- data/ext/boost/mpl/size_t.hpp +25 -0
- data/ext/boost/mpl/size_t_fwd.hpp +28 -0
- data/ext/boost/mpl/void.hpp +76 -0
- data/ext/boost/mpl/void_fwd.hpp +26 -0
- data/ext/boost/next_prior.hpp +51 -0
- data/ext/boost/non_type.hpp +27 -0
- data/ext/boost/noncopyable.hpp +36 -0
- data/ext/boost/none.hpp +28 -0
- data/ext/boost/none_t.hpp +24 -0
- data/ext/boost/operators.hpp +943 -0
- data/ext/boost/optional/optional.hpp +922 -0
- data/ext/boost/optional/optional_fwd.hpp +22 -0
- data/ext/boost/optional.hpp +18 -0
- data/ext/boost/preprocessor/arithmetic/add.hpp +51 -0
- data/ext/boost/preprocessor/arithmetic/dec.hpp +288 -0
- data/ext/boost/preprocessor/arithmetic/inc.hpp +288 -0
- data/ext/boost/preprocessor/arithmetic/sub.hpp +50 -0
- data/ext/boost/preprocessor/array/data.hpp +28 -0
- data/ext/boost/preprocessor/array/elem.hpp +29 -0
- data/ext/boost/preprocessor/array/size.hpp +28 -0
- data/ext/boost/preprocessor/cat.hpp +35 -0
- data/ext/boost/preprocessor/comma_if.hpp +17 -0
- data/ext/boost/preprocessor/config/config.hpp +70 -0
- data/ext/boost/preprocessor/control/detail/while.hpp +536 -0
- data/ext/boost/preprocessor/control/expr_iif.hpp +31 -0
- data/ext/boost/preprocessor/control/if.hpp +30 -0
- data/ext/boost/preprocessor/control/iif.hpp +34 -0
- data/ext/boost/preprocessor/control/while.hpp +312 -0
- data/ext/boost/preprocessor/debug/error.hpp +33 -0
- data/ext/boost/preprocessor/detail/auto_rec.hpp +293 -0
- data/ext/boost/preprocessor/detail/check.hpp +48 -0
- data/ext/boost/preprocessor/detail/is_binary.hpp +30 -0
- data/ext/boost/preprocessor/empty.hpp +17 -0
- data/ext/boost/preprocessor/enum.hpp +17 -0
- data/ext/boost/preprocessor/enum_params.hpp +17 -0
- data/ext/boost/preprocessor/facilities/empty.hpp +21 -0
- data/ext/boost/preprocessor/facilities/identity.hpp +23 -0
- data/ext/boost/preprocessor/identity.hpp +17 -0
- data/ext/boost/preprocessor/inc.hpp +17 -0
- data/ext/boost/preprocessor/iterate.hpp +17 -0
- data/ext/boost/preprocessor/iteration/detail/bounds/lower1.hpp +99 -0
- data/ext/boost/preprocessor/iteration/detail/bounds/upper1.hpp +99 -0
- data/ext/boost/preprocessor/iteration/detail/iter/forward1.hpp +1342 -0
- data/ext/boost/preprocessor/iteration/iterate.hpp +82 -0
- data/ext/boost/preprocessor/list/adt.hpp +73 -0
- data/ext/boost/preprocessor/list/append.hpp +40 -0
- data/ext/boost/preprocessor/list/detail/fold_left.hpp +279 -0
- data/ext/boost/preprocessor/list/detail/fold_right.hpp +277 -0
- data/ext/boost/preprocessor/list/fold_left.hpp +303 -0
- data/ext/boost/preprocessor/list/fold_right.hpp +40 -0
- data/ext/boost/preprocessor/list/for_each_i.hpp +65 -0
- data/ext/boost/preprocessor/list/reverse.hpp +40 -0
- data/ext/boost/preprocessor/list/transform.hpp +49 -0
- data/ext/boost/preprocessor/logical/and.hpp +30 -0
- data/ext/boost/preprocessor/logical/bitand.hpp +38 -0
- data/ext/boost/preprocessor/logical/bool.hpp +288 -0
- data/ext/boost/preprocessor/logical/compl.hpp +36 -0
- data/ext/boost/preprocessor/punctuation/comma.hpp +21 -0
- data/ext/boost/preprocessor/punctuation/comma_if.hpp +31 -0
- data/ext/boost/preprocessor/repeat.hpp +17 -0
- data/ext/boost/preprocessor/repetition/detail/for.hpp +536 -0
- data/ext/boost/preprocessor/repetition/enum.hpp +66 -0
- data/ext/boost/preprocessor/repetition/enum_binary_params.hpp +54 -0
- data/ext/boost/preprocessor/repetition/enum_params.hpp +41 -0
- data/ext/boost/preprocessor/repetition/for.hpp +306 -0
- data/ext/boost/preprocessor/repetition/repeat.hpp +825 -0
- data/ext/boost/preprocessor/repetition/repeat_from_to.hpp +87 -0
- data/ext/boost/preprocessor/seq/elem.hpp +304 -0
- data/ext/boost/preprocessor/seq/enum.hpp +288 -0
- data/ext/boost/preprocessor/seq/for_each_i.hpp +61 -0
- data/ext/boost/preprocessor/seq/seq.hpp +44 -0
- data/ext/boost/preprocessor/seq/size.hpp +548 -0
- data/ext/boost/preprocessor/slot/detail/def.hpp +49 -0
- data/ext/boost/preprocessor/slot/detail/shared.hpp +247 -0
- data/ext/boost/preprocessor/slot/slot.hpp +32 -0
- data/ext/boost/preprocessor/stringize.hpp +33 -0
- data/ext/boost/preprocessor/tuple/eat.hpp +57 -0
- data/ext/boost/preprocessor/tuple/elem.hpp +385 -0
- data/ext/boost/preprocessor/tuple/rem.hpp +72 -0
- data/ext/boost/preprocessor/tuple/to_list.hpp +62 -0
- data/ext/boost/range/as_literal.hpp +131 -0
- data/ext/boost/range/begin.hpp +132 -0
- data/ext/boost/range/config.hpp +54 -0
- data/ext/boost/range/const_iterator.hpp +64 -0
- data/ext/boost/range/detail/common.hpp +117 -0
- data/ext/boost/range/detail/implementation_help.hpp +99 -0
- data/ext/boost/range/detail/sfinae.hpp +77 -0
- data/ext/boost/range/detail/str_types.hpp +38 -0
- data/ext/boost/range/difference_type.hpp +29 -0
- data/ext/boost/range/distance.hpp +34 -0
- data/ext/boost/range/empty.hpp +34 -0
- data/ext/boost/range/end.hpp +131 -0
- data/ext/boost/range/functions.hpp +27 -0
- data/ext/boost/range/iterator.hpp +72 -0
- data/ext/boost/range/iterator_range.hpp +643 -0
- data/ext/boost/range/mutable_iterator.hpp +64 -0
- data/ext/boost/range/rbegin.hpp +65 -0
- data/ext/boost/range/rend.hpp +65 -0
- data/ext/boost/range/reverse_iterator.hpp +40 -0
- data/ext/boost/range/size.hpp +36 -0
- data/ext/boost/range/size_type.hpp +78 -0
- data/ext/boost/range/value_type.hpp +34 -0
- data/ext/boost/ref.hpp +178 -0
- data/ext/boost/shared_ptr.hpp +619 -0
- data/ext/boost/src/pthread/exceptions.cpp +146 -0
- data/ext/boost/src/pthread/once.cpp +51 -0
- data/ext/boost/src/pthread/thread.cpp +709 -0
- data/ext/boost/src/pthread/timeconv.inl +130 -0
- data/ext/boost/src/tss_null.cpp +34 -0
- data/ext/boost/src/win32/exceptions.cpp +124 -0
- data/ext/boost/src/win32/thread.cpp +629 -0
- data/ext/boost/src/win32/timeconv.inl +130 -0
- data/ext/boost/src/win32/tss_dll.cpp +72 -0
- data/ext/boost/src/win32/tss_pe.cpp +269 -0
- data/ext/boost/static_assert.hpp +122 -0
- data/ext/boost/thread/condition.hpp +16 -0
- data/ext/boost/thread/condition_variable.hpp +21 -0
- data/ext/boost/thread/detail/config.hpp +94 -0
- data/ext/boost/thread/detail/move.hpp +33 -0
- data/ext/boost/thread/detail/platform.hpp +71 -0
- data/ext/boost/thread/exceptions.hpp +109 -0
- data/ext/boost/thread/locks.hpp +589 -0
- data/ext/boost/thread/mutex.hpp +21 -0
- data/ext/boost/thread/once.hpp +29 -0
- data/ext/boost/thread/pthread/condition_variable.hpp +184 -0
- data/ext/boost/thread/pthread/condition_variable_fwd.hpp +66 -0
- data/ext/boost/thread/pthread/mutex.hpp +211 -0
- data/ext/boost/thread/pthread/once.hpp +85 -0
- data/ext/boost/thread/pthread/pthread_mutex_scoped_lock.hpp +50 -0
- data/ext/boost/thread/pthread/recursive_mutex.hpp +249 -0
- data/ext/boost/thread/pthread/thread.hpp +339 -0
- data/ext/boost/thread/pthread/thread_data.hpp +102 -0
- data/ext/boost/thread/pthread/timespec.hpp +28 -0
- data/ext/boost/thread/pthread/tss.hpp +103 -0
- data/ext/boost/thread/recursive_mutex.hpp +21 -0
- data/ext/boost/thread/thread.hpp +22 -0
- data/ext/boost/thread/thread_time.hpp +46 -0
- data/ext/boost/thread/tss.hpp +18 -0
- data/ext/boost/thread/xtime.hpp +88 -0
- data/ext/boost/thread.hpp +21 -0
- data/ext/boost/throw_exception.hpp +46 -0
- data/ext/boost/token_functions.hpp +621 -0
- data/ext/boost/token_iterator.hpp +128 -0
- data/ext/boost/tokenizer.hpp +98 -0
- data/ext/boost/type.hpp +18 -0
- data/ext/boost/type_traits/add_const.hpp +47 -0
- data/ext/boost/type_traits/add_pointer.hpp +72 -0
- data/ext/boost/type_traits/add_reference.hpp +89 -0
- data/ext/boost/type_traits/alignment_of.hpp +100 -0
- data/ext/boost/type_traits/broken_compiler_spec.hpp +117 -0
- data/ext/boost/type_traits/composite_traits.hpp +29 -0
- data/ext/boost/type_traits/config.hpp +76 -0
- data/ext/boost/type_traits/conversion_traits.hpp +17 -0
- data/ext/boost/type_traits/detail/bool_trait_def.hpp +173 -0
- data/ext/boost/type_traits/detail/bool_trait_undef.hpp +27 -0
- data/ext/boost/type_traits/detail/cv_traits_impl.hpp +97 -0
- data/ext/boost/type_traits/detail/false_result.hpp +28 -0
- data/ext/boost/type_traits/detail/ice_and.hpp +35 -0
- data/ext/boost/type_traits/detail/ice_eq.hpp +36 -0
- data/ext/boost/type_traits/detail/ice_not.hpp +31 -0
- data/ext/boost/type_traits/detail/ice_or.hpp +34 -0
- data/ext/boost/type_traits/detail/is_function_ptr_helper.hpp +220 -0
- data/ext/boost/type_traits/detail/is_mem_fun_pointer_impl.hpp +817 -0
- data/ext/boost/type_traits/detail/size_t_trait_def.hpp +58 -0
- data/ext/boost/type_traits/detail/size_t_trait_undef.hpp +16 -0
- data/ext/boost/type_traits/detail/template_arity_spec.hpp +31 -0
- data/ext/boost/type_traits/detail/type_trait_def.hpp +61 -0
- data/ext/boost/type_traits/detail/type_trait_undef.hpp +19 -0
- data/ext/boost/type_traits/detail/yes_no_type.hpp +26 -0
- data/ext/boost/type_traits/function_traits.hpp +236 -0
- data/ext/boost/type_traits/has_nothrow_copy.hpp +39 -0
- data/ext/boost/type_traits/has_trivial_copy.hpp +49 -0
- data/ext/boost/type_traits/ice.hpp +20 -0
- data/ext/boost/type_traits/integral_constant.hpp +53 -0
- data/ext/boost/type_traits/intrinsics.hpp +153 -0
- data/ext/boost/type_traits/is_abstract.hpp +144 -0
- data/ext/boost/type_traits/is_arithmetic.hpp +43 -0
- data/ext/boost/type_traits/is_array.hpp +90 -0
- data/ext/boost/type_traits/is_class.hpp +128 -0
- data/ext/boost/type_traits/is_const.hpp +142 -0
- data/ext/boost/type_traits/is_convertible.hpp +418 -0
- data/ext/boost/type_traits/is_enum.hpp +180 -0
- data/ext/boost/type_traits/is_float.hpp +27 -0
- data/ext/boost/type_traits/is_function.hpp +95 -0
- data/ext/boost/type_traits/is_integral.hpp +73 -0
- data/ext/boost/type_traits/is_member_function_pointer.hpp +134 -0
- data/ext/boost/type_traits/is_member_pointer.hpp +114 -0
- data/ext/boost/type_traits/is_pod.hpp +135 -0
- data/ext/boost/type_traits/is_pointer.hpp +160 -0
- data/ext/boost/type_traits/is_reference.hpp +116 -0
- data/ext/boost/type_traits/is_same.hpp +103 -0
- data/ext/boost/type_traits/is_scalar.hpp +55 -0
- data/ext/boost/type_traits/is_union.hpp +49 -0
- data/ext/boost/type_traits/is_void.hpp +33 -0
- data/ext/boost/type_traits/is_volatile.hpp +131 -0
- data/ext/boost/type_traits/remove_const.hpp +78 -0
- data/ext/boost/type_traits/remove_cv.hpp +61 -0
- data/ext/boost/type_traits/remove_pointer.hpp +43 -0
- data/ext/boost/type_traits/remove_reference.hpp +50 -0
- data/ext/boost/type_traits/type_with_alignment.hpp +288 -0
- data/ext/boost/utility/addressof.hpp +58 -0
- data/ext/boost/utility/base_from_member.hpp +87 -0
- data/ext/boost/utility/compare_pointees.hpp +68 -0
- data/ext/boost/utility/enable_if.hpp +119 -0
- data/ext/boost/utility.hpp +19 -0
- data/ext/boost/visit_each.hpp +29 -0
- data/ext/boost/weak_ptr.hpp +188 -0
- data/ext/common/Application.h +511 -0
- data/ext/common/ApplicationPool.h +205 -0
- data/ext/common/ApplicationPoolServer.h +794 -0
- data/ext/common/ApplicationPoolServerExecutable.cpp +743 -0
- data/ext/common/ApplicationPoolStatusReporter.h +336 -0
- data/ext/common/Base64.cpp +143 -0
- data/ext/common/Base64.h +57 -0
- data/ext/common/CachedFileStat.cpp +62 -0
- data/ext/common/CachedFileStat.h +51 -0
- data/ext/common/CachedFileStat.hpp +243 -0
- data/ext/common/DummySpawnManager.h +108 -0
- data/ext/common/Exceptions.h +258 -0
- data/ext/common/FileChangeChecker.h +209 -0
- data/ext/common/Logging.cpp +65 -0
- data/ext/common/Logging.h +123 -0
- data/ext/common/MessageChannel.h +615 -0
- data/ext/common/PoolOptions.h +355 -0
- data/ext/common/SpawnManager.h +561 -0
- data/ext/common/StandardApplicationPool.h +819 -0
- data/ext/common/StaticString.h +148 -0
- data/ext/common/StringListCreator.h +83 -0
- data/ext/common/SystemTime.cpp +33 -0
- data/ext/common/SystemTime.h +88 -0
- data/ext/common/Timer.h +90 -0
- data/ext/common/Utils.cpp +681 -0
- data/ext/common/Utils.h +497 -0
- data/ext/common/Version.h +31 -0
- data/ext/nginx/Configuration.c +1098 -0
- data/ext/nginx/Configuration.h +71 -0
- data/ext/nginx/ContentHandler.c +1225 -0
- data/ext/nginx/ContentHandler.h +64 -0
- data/ext/nginx/HelperServer.cpp +850 -0
- data/ext/nginx/HttpStatusExtractor.h +350 -0
- data/ext/nginx/ScgiRequestParser.h +317 -0
- data/ext/nginx/StaticContentHandler.c +257 -0
- data/ext/nginx/StaticContentHandler.h +37 -0
- data/ext/nginx/config +45 -0
- data/ext/nginx/ngx_http_passenger_module.c +653 -0
- data/ext/nginx/ngx_http_passenger_module.h +72 -0
- data/ext/oxt/backtrace.cpp +177 -0
- data/ext/oxt/backtrace.hpp +135 -0
- data/ext/oxt/detail/backtrace_disabled.hpp +39 -0
- data/ext/oxt/detail/backtrace_enabled.hpp +155 -0
- data/ext/oxt/detail/spin_lock_gcc_x86.hpp +82 -0
- data/ext/oxt/detail/spin_lock_portable.hpp +38 -0
- data/ext/oxt/detail/spin_lock_pthreads.hpp +97 -0
- data/ext/oxt/detail/tracable_exception_disabled.hpp +46 -0
- data/ext/oxt/detail/tracable_exception_enabled.hpp +48 -0
- data/ext/oxt/macros.hpp +58 -0
- data/ext/oxt/spin_lock.hpp +55 -0
- data/ext/oxt/system_calls.cpp +340 -0
- data/ext/oxt/system_calls.hpp +243 -0
- data/ext/oxt/thread.cpp +32 -0
- data/ext/oxt/thread.hpp +239 -0
- data/ext/oxt/tracable_exception.cpp +87 -0
- data/ext/oxt/tracable_exception.hpp +35 -0
- data/ext/phusion_passenger/extconf.rb +36 -0
- data/ext/phusion_passenger/native_support.c +308 -0
- data/generators/colouringcode-passenger/USAGE +1 -0
- data/generators/colouringcode-passenger/passenger_template_generator.rb +16 -0
- data/generators/colouringcode-passenger/templates/app_exited_during_initialization.html.erb +0 -0
- data/generators/colouringcode-passenger/templates/app_init_error.html.erb +0 -0
- data/generators/colouringcode-passenger/templates/database_error.html.erb +0 -0
- data/generators/colouringcode-passenger/templates/error_layout.html.erb +0 -0
- data/generators/colouringcode-passenger/templates/framework_init_error.html.erb +0 -0
- data/generators/colouringcode-passenger/templates/general_error.html.erb +0 -0
- data/generators/colouringcode-passenger/templates/invalid_app_root.html.erb +0 -0
- data/generators/colouringcode-passenger/templates/load_error.html.erb +0 -0
- data/generators/colouringcode-passenger/templates/version_not_found.html.erb +0 -0
- data/lib/phusion_passenger/abstract_installer.rb +196 -0
- data/lib/phusion_passenger/abstract_request_handler.rb +475 -0
- data/lib/phusion_passenger/abstract_server.rb +369 -0
- data/lib/phusion_passenger/abstract_server_collection.rb +306 -0
- data/lib/phusion_passenger/admin_tools/control_process.rb +150 -0
- data/lib/phusion_passenger/admin_tools.rb +48 -0
- data/lib/phusion_passenger/application.rb +113 -0
- data/lib/phusion_passenger/console_text_template.rb +66 -0
- data/lib/phusion_passenger/constants.rb +31 -0
- data/lib/phusion_passenger/dependencies.rb +393 -0
- data/lib/phusion_passenger/events.rb +50 -0
- data/lib/phusion_passenger/exceptions.rb +103 -0
- data/lib/phusion_passenger/html_template.rb +119 -0
- data/lib/phusion_passenger/message_channel.rb +229 -0
- data/lib/phusion_passenger/packaging.rb +39 -0
- data/lib/phusion_passenger/platform_info.rb +550 -0
- data/lib/phusion_passenger/rack/application_spawner.rb +146 -0
- data/lib/phusion_passenger/rack/request_handler.rb +125 -0
- data/lib/phusion_passenger/railz/application_spawner.rb +386 -0
- data/lib/phusion_passenger/railz/cgi_fixed.rb +68 -0
- data/lib/phusion_passenger/railz/framework_spawner.rb +334 -0
- data/lib/phusion_passenger/railz/request_handler.rb +73 -0
- data/lib/phusion_passenger/simple_benchmarking.rb +52 -0
- data/lib/phusion_passenger/spawn_manager.rb +372 -0
- data/lib/phusion_passenger/templates/apache2/apache_must_be_compiled_with_compatible_mpm.txt.erb +9 -0
- data/lib/phusion_passenger/templates/apache2/config_snippets.txt.erb +13 -0
- data/lib/phusion_passenger/templates/apache2/deployment_example.txt.erb +23 -0
- data/lib/phusion_passenger/templates/apache2/no_write_permission_to_passenger_root.txt.erb +9 -0
- data/lib/phusion_passenger/templates/apache2/possible_solutions_for_compilation_and_installation_problems.txt.erb +11 -0
- data/lib/phusion_passenger/templates/apache2/run_installer_as_root.txt.erb +8 -0
- data/lib/phusion_passenger/templates/apache2/welcome.txt.erb +15 -0
- data/lib/phusion_passenger/templates/app_exited_during_initialization.html.erb +38 -0
- data/lib/phusion_passenger/templates/app_init_error.html.erb +64 -0
- data/lib/phusion_passenger/templates/database_error.html.erb +66 -0
- data/lib/phusion_passenger/templates/error_layout.css +97 -0
- data/lib/phusion_passenger/templates/error_layout.html.erb +39 -0
- data/lib/phusion_passenger/templates/framework_init_error.html.erb +39 -0
- data/lib/phusion_passenger/templates/general_error.html.erb +22 -0
- data/lib/phusion_passenger/templates/invalid_app_root.html.erb +9 -0
- data/lib/phusion_passenger/templates/load_error.html.erb +46 -0
- data/lib/phusion_passenger/templates/nginx/ask_for_extra_configure_flags.txt.erb +8 -0
- data/lib/phusion_passenger/templates/nginx/cannot_write_to_dir.txt.erb +11 -0
- data/lib/phusion_passenger/templates/nginx/config_snippets.txt.erb +17 -0
- data/lib/phusion_passenger/templates/nginx/config_snippets_inserted.txt.erb +20 -0
- data/lib/phusion_passenger/templates/nginx/confirm_extra_configure_flags.txt.erb +5 -0
- data/lib/phusion_passenger/templates/nginx/deployment_example.txt.erb +22 -0
- data/lib/phusion_passenger/templates/nginx/pcre_could_not_be_downloaded.txt.erb +11 -0
- data/lib/phusion_passenger/templates/nginx/pcre_could_not_be_extracted.txt.erb +11 -0
- data/lib/phusion_passenger/templates/nginx/possible_solutions_for_compilation_and_installation_problems.txt.erb +11 -0
- data/lib/phusion_passenger/templates/nginx/possible_solutions_for_download_and_extraction_problems.txt.erb +20 -0
- data/lib/phusion_passenger/templates/nginx/query_download_and_install.txt.erb +21 -0
- data/lib/phusion_passenger/templates/nginx/run_installer_as_root.txt.erb +8 -0
- data/lib/phusion_passenger/templates/nginx/welcome.txt.erb +15 -0
- data/lib/phusion_passenger/templates/version_not_found.html.erb +34 -0
- data/lib/phusion_passenger/utils.rb +603 -0
- data/lib/phusion_passenger/wsgi/application_spawner.rb +104 -0
- data/lib/phusion_passenger/wsgi/request_handler.py +199 -0
- data/man/passenger-config.1 +29 -0
- data/man/passenger-make-enterprisey.8 +23 -0
- data/man/passenger-memory-stats.8 +33 -0
- data/man/passenger-status.8 +43 -0
- data/man/passenger-stress-test.1 +43 -0
- data/misc/copy_boost_headers.rb +125 -0
- data/misc/find_owner_pipe_leaks.rb +128 -0
- data/misc/rake/cplusplus.rb +57 -0
- data/misc/rake/extensions.rb +182 -0
- data/misc/rake/gempackagetask.rb +99 -0
- data/misc/rake/packagetask.rb +186 -0
- data/misc/rake/rdoctask.rb +209 -0
- data/misc/render_error_pages.rb +116 -0
- data/test/ApplicationPoolServerTest.cpp +114 -0
- data/test/ApplicationPoolServer_ApplicationPoolTest.cpp +33 -0
- data/test/ApplicationPoolTest.cpp +599 -0
- data/test/Base64Test.cpp +48 -0
- data/test/CachedFileStatTest.cpp +402 -0
- data/test/CxxTestMain.cpp +143 -0
- data/test/FileChangeCheckerTest.cpp +331 -0
- data/test/HttpStatusExtractorTest.cpp +198 -0
- data/test/MessageChannelTest.cpp +312 -0
- data/test/PoolOptionsTest.cpp +117 -0
- data/test/ScgiRequestParserTest.cpp +337 -0
- data/test/SpawnManagerTest.cpp +64 -0
- data/test/StandardApplicationPoolTest.cpp +27 -0
- data/test/StaticStringTest.cpp +51 -0
- data/test/SystemTimeTest.cpp +37 -0
- data/test/UtilsTest.cpp +257 -0
- data/test/config.yml.example +30 -0
- data/test/integration_tests/apache2_tests.rb +595 -0
- data/test/integration_tests/hello_world_rack_spec.rb +36 -0
- data/test/integration_tests/hello_world_wsgi_spec.rb +41 -0
- data/test/integration_tests/mycook_spec.rb +192 -0
- data/test/integration_tests/nginx_tests.rb +151 -0
- data/test/oxt/backtrace_test.cpp +128 -0
- data/test/oxt/oxt_test_main.cpp +25 -0
- data/test/oxt/syscall_interruption_test.cpp +38 -0
- data/test/ruby/abstract_request_handler_spec.rb +85 -0
- data/test/ruby/abstract_server_collection_spec.rb +246 -0
- data/test/ruby/abstract_server_spec.rb +51 -0
- data/test/ruby/application_spec.rb +43 -0
- data/test/ruby/message_channel_spec.rb +170 -0
- data/test/ruby/rack/application_spawner_spec.rb +99 -0
- data/test/ruby/rails/application_spawner_spec.rb +159 -0
- data/test/ruby/rails/framework_spawner_spec.rb +133 -0
- data/test/ruby/rails/minimal_spawner_spec.rb +93 -0
- data/test/ruby/rails/spawner_error_handling_spec.rb +107 -0
- data/test/ruby/rails/spawner_privilege_lowering_spec.rb +97 -0
- data/test/ruby/spawn_manager_spec.rb +205 -0
- data/test/ruby/spawn_server_spec.rb +26 -0
- data/test/ruby/utils_spec.rb +335 -0
- data/test/ruby/wsgi/application_spawner_spec.rb +54 -0
- data/test/stub/apache2/httpd.conf.erb +81 -0
- data/test/stub/apache2/mime.types +748 -0
- data/test/stub/garbage1.dat +0 -0
- data/test/stub/garbage2.dat +0 -0
- data/test/stub/garbage3.dat +0 -0
- data/test/stub/http_request.yml +23 -0
- data/test/stub/message_channel.rb +9 -0
- data/test/stub/message_channel_2.rb +10 -0
- data/test/stub/message_channel_3.rb +17 -0
- data/test/stub/nginx/koi-utf +109 -0
- data/test/stub/nginx/koi-win +103 -0
- data/test/stub/nginx/mime.types +70 -0
- data/test/stub/nginx/nginx.conf.erb +57 -0
- data/test/stub/nginx/win-utf +126 -0
- data/test/stub/rack/config.ru +4 -0
- data/test/stub/rack/public/rack.jpg +0 -0
- data/test/stub/rails_apps/foobar/app/controllers/application.rb +12 -0
- data/test/stub/rails_apps/foobar/app/controllers/bar_controller_1.rb +5 -0
- data/test/stub/rails_apps/foobar/app/controllers/bar_controller_2.rb +5 -0
- data/test/stub/rails_apps/foobar/app/controllers/foo_controller.rb +21 -0
- data/test/stub/rails_apps/foobar/app/helpers/application_helper.rb +3 -0
- data/test/stub/rails_apps/foobar/config/boot.rb +108 -0
- data/test/stub/rails_apps/foobar/config/database.yml +19 -0
- data/test/stub/rails_apps/foobar/config/environment.rb +59 -0
- data/test/stub/rails_apps/foobar/config/environments/development.rb +17 -0
- data/test/stub/rails_apps/foobar/config/environments/production.rb +18 -0
- data/test/stub/rails_apps/foobar/config/initializers/inflections.rb +10 -0
- data/test/stub/rails_apps/foobar/config/initializers/mime_types.rb +5 -0
- data/test/stub/rails_apps/foobar/config/routes.rb +35 -0
- data/test/stub/rails_apps/mycook/app/controllers/application.rb +12 -0
- data/test/stub/rails_apps/mycook/app/controllers/recipes_controller.rb +5 -0
- data/test/stub/rails_apps/mycook/app/controllers/uploads_controller.rb +15 -0
- data/test/stub/rails_apps/mycook/app/controllers/welcome_controller.rb +71 -0
- data/test/stub/rails_apps/mycook/app/helpers/application_helper.rb +3 -0
- data/test/stub/rails_apps/mycook/app/views/layouts/default.rhtml +26 -0
- data/test/stub/rails_apps/mycook/app/views/recipes/create.rhtml +13 -0
- data/test/stub/rails_apps/mycook/app/views/recipes/index.rhtml +3 -0
- data/test/stub/rails_apps/mycook/app/views/recipes/new.rhtml +8 -0
- data/test/stub/rails_apps/mycook/app/views/uploads/index.rhtml +1 -0
- data/test/stub/rails_apps/mycook/app/views/uploads/new.html.erb +8 -0
- data/test/stub/rails_apps/mycook/app/views/welcome/cached.rhtml +1 -0
- data/test/stub/rails_apps/mycook/app/views/welcome/index.rhtml +20 -0
- data/test/stub/rails_apps/mycook/config/boot.rb +108 -0
- data/test/stub/rails_apps/mycook/config/database.yml +19 -0
- data/test/stub/rails_apps/mycook/config/environment.rb +61 -0
- data/test/stub/rails_apps/mycook/config/environments/development.rb +18 -0
- data/test/stub/rails_apps/mycook/config/environments/production.rb +19 -0
- data/test/stub/rails_apps/mycook/config/initializers/inflections.rb +10 -0
- data/test/stub/rails_apps/mycook/config/initializers/mime_types.rb +5 -0
- data/test/stub/rails_apps/mycook/config/routes.rb +38 -0
- data/test/stub/rails_apps/mycook/log/useless.txt +1 -0
- data/test/stub/rails_apps/mycook/public/404.html +30 -0
- data/test/stub/rails_apps/mycook/public/422.html +30 -0
- data/test/stub/rails_apps/mycook/public/500.html +30 -0
- data/test/stub/rails_apps/mycook/public/dispatch.cgi +10 -0
- data/test/stub/rails_apps/mycook/public/dispatch.fcgi +24 -0
- data/test/stub/rails_apps/mycook/public/dispatch.rb +10 -0
- data/test/stub/rails_apps/mycook/public/favicon.ico +0 -0
- data/test/stub/rails_apps/mycook/public/images/angrywizard.gif +0 -0
- data/test/stub/rails_apps/mycook/public/images/cookbook.gif +0 -0
- data/test/stub/rails_apps/mycook/public/images/header.png +0 -0
- data/test/stub/rails_apps/mycook/public/images/rails.png +0 -0
- data/test/stub/rails_apps/mycook/public/javascripts/application.js +2 -0
- data/test/stub/rails_apps/mycook/public/javascripts/controls.js +963 -0
- data/test/stub/rails_apps/mycook/public/javascripts/dragdrop.js +972 -0
- data/test/stub/rails_apps/mycook/public/javascripts/effects.js +1120 -0
- data/test/stub/rails_apps/mycook/public/javascripts/prototype.js +4225 -0
- data/test/stub/rails_apps/mycook/public/robots.txt +5 -0
- data/test/stub/rails_apps/mycook/public/uploads.html +26 -0
- data/test/stub/rails_apps/mycook/public/welcome/cached.html +26 -0
- data/test/stub/rails_apps/mycook/sites/some.site/public/uploads.html +26 -0
- data/test/stub/rails_apps/mycook/sites/some.site/public/welcome/cached.html +26 -0
- data/test/stub/rails_apps/mycook/tmp/cache/useless.txt +1 -0
- data/test/stub/rails_apps/mycook/tmp/pids/useless.txt +1 -0
- data/test/stub/rails_apps/mycook/tmp/sessions/useless.txt +1 -0
- data/test/stub/rails_apps/mycook/tmp/sockets/useless.txt +1 -0
- data/test/stub/spawn_server.rb +20 -0
- data/test/stub/upload_data.txt +494 -0
- data/test/stub/vendor_rails/minimal/README +1 -0
- data/test/stub/vendor_rails/minimal/actionmailer/lib/action_mailer.rb +0 -0
- data/test/stub/vendor_rails/minimal/actionpack/lib/action_controller.rb +19 -0
- data/test/stub/vendor_rails/minimal/actionpack/lib/action_pack.rb +0 -0
- data/test/stub/vendor_rails/minimal/actionpack/lib/action_view.rb +0 -0
- data/test/stub/vendor_rails/minimal/activerecord/lib/active_record.rb +7 -0
- data/test/stub/vendor_rails/minimal/activeresource/lib/active_resource.rb +0 -0
- data/test/stub/vendor_rails/minimal/activesupport/lib/active_support/whiny_nil.rb +0 -0
- data/test/stub/vendor_rails/minimal/activesupport/lib/active_support.rb +17 -0
- data/test/stub/vendor_rails/minimal/railties/lib/dispatcher.rb +0 -0
- data/test/stub/vendor_rails/minimal/railties/lib/initializer.rb +52 -0
- data/test/stub/vendor_rails/minimal/railties/lib/ruby_version_check.rb +1 -0
- data/test/stub/wsgi/passenger_wsgi.py +3 -0
- data/test/stub/wsgi/public/wsgi-snake.jpg +0 -0
- data/test/stub/zsfa/header.png +0 -0
- data/test/stub/zsfa/index.html +14 -0
- data/test/stub/zsfa/zsfa.png +0 -0
- data/test/support/Support.cpp +84 -0
- data/test/support/Support.h +118 -0
- data/test/support/apache2_controller.rb +250 -0
- data/test/support/config.rb +38 -0
- data/test/support/multipart.rb +62 -0
- data/test/support/nginx_controller.rb +98 -0
- data/test/support/run_rspec_tests.rb +10 -0
- data/test/support/test_helper.rb +207 -0
- data/test/support/tut.h +1234 -0
- data/test/support/tut_reporter.h +256 -0
- data/test/support/valgrind.h +2539 -0
- data/vendor/README +13 -0
- data/vendor/README_FOR_PACKAGERS +1 -0
- data/vendor/rack-1.0.0-git/COPYING +18 -0
- data/vendor/rack-1.0.0-git/KNOWN-ISSUES +18 -0
- data/vendor/rack-1.0.0-git/README +353 -0
- data/vendor/rack-1.0.0-git/Rakefile +164 -0
- data/vendor/rack-1.0.0-git/lib/rack/adapter/camping.rb +22 -0
- data/vendor/rack-1.0.0-git/lib/rack/auth/abstract/handler.rb +37 -0
- data/vendor/rack-1.0.0-git/lib/rack/auth/abstract/request.rb +37 -0
- data/vendor/rack-1.0.0-git/lib/rack/auth/basic.rb +58 -0
- data/vendor/rack-1.0.0-git/lib/rack/auth/digest/md5.rb +124 -0
- data/vendor/rack-1.0.0-git/lib/rack/auth/digest/nonce.rb +51 -0
- data/vendor/rack-1.0.0-git/lib/rack/auth/digest/params.rb +55 -0
- data/vendor/rack-1.0.0-git/lib/rack/auth/digest/request.rb +40 -0
- data/vendor/rack-1.0.0-git/lib/rack/auth/openid.rb +487 -0
- data/vendor/rack-1.0.0-git/lib/rack/builder.rb +63 -0
- data/vendor/rack-1.0.0-git/lib/rack/cascade.rb +41 -0
- data/vendor/rack-1.0.0-git/lib/rack/chunked.rb +49 -0
- data/vendor/rack-1.0.0-git/lib/rack/commonlogger.rb +52 -0
- data/vendor/rack-1.0.0-git/lib/rack/conditionalget.rb +47 -0
- data/vendor/rack-1.0.0-git/lib/rack/content_length.rb +29 -0
- data/vendor/rack-1.0.0-git/lib/rack/content_type.rb +23 -0
- data/vendor/rack-1.0.0-git/lib/rack/deflater.rb +96 -0
- data/vendor/rack-1.0.0-git/lib/rack/directory.rb +153 -0
- data/vendor/rack-1.0.0-git/lib/rack/file.rb +88 -0
- data/vendor/rack-1.0.0-git/lib/rack/handler/cgi.rb +61 -0
- data/vendor/rack-1.0.0-git/lib/rack/handler/evented_mongrel.rb +8 -0
- data/vendor/rack-1.0.0-git/lib/rack/handler/fastcgi.rb +88 -0
- data/vendor/rack-1.0.0-git/lib/rack/handler/lsws.rb +55 -0
- data/vendor/rack-1.0.0-git/lib/rack/handler/mongrel.rb +84 -0
- data/vendor/rack-1.0.0-git/lib/rack/handler/scgi.rb +59 -0
- data/vendor/rack-1.0.0-git/lib/rack/handler/swiftiplied_mongrel.rb +8 -0
- data/vendor/rack-1.0.0-git/lib/rack/handler/thin.rb +18 -0
- data/vendor/rack-1.0.0-git/lib/rack/handler/webrick.rb +67 -0
- data/vendor/rack-1.0.0-git/lib/rack/handler.rb +69 -0
- data/vendor/rack-1.0.0-git/lib/rack/head.rb +19 -0
- data/vendor/rack-1.0.0-git/lib/rack/lint.rb +537 -0
- data/vendor/rack-1.0.0-git/lib/rack/lobster.rb +65 -0
- data/vendor/rack-1.0.0-git/lib/rack/lock.rb +16 -0
- data/vendor/rack-1.0.0-git/lib/rack/methodoverride.rb +27 -0
- data/vendor/rack-1.0.0-git/lib/rack/mime.rb +204 -0
- data/vendor/rack-1.0.0-git/lib/rack/mock.rb +184 -0
- data/vendor/rack-1.0.0-git/lib/rack/recursive.rb +57 -0
- data/vendor/rack-1.0.0-git/lib/rack/reloader.rb +106 -0
- data/vendor/rack-1.0.0-git/lib/rack/request.rb +248 -0
- data/vendor/rack-1.0.0-git/lib/rack/response.rb +183 -0
- data/vendor/rack-1.0.0-git/lib/rack/rewindable_input.rb +100 -0
- data/vendor/rack-1.0.0-git/lib/rack/session/abstract/id.rb +142 -0
- data/vendor/rack-1.0.0-git/lib/rack/session/cookie.rb +91 -0
- data/vendor/rack-1.0.0-git/lib/rack/session/memcache.rb +109 -0
- data/vendor/rack-1.0.0-git/lib/rack/session/pool.rb +100 -0
- data/vendor/rack-1.0.0-git/lib/rack/showexceptions.rb +349 -0
- data/vendor/rack-1.0.0-git/lib/rack/showstatus.rb +106 -0
- data/vendor/rack-1.0.0-git/lib/rack/static.rb +38 -0
- data/vendor/rack-1.0.0-git/lib/rack/urlmap.rb +55 -0
- data/vendor/rack-1.0.0-git/lib/rack/utils.rb +522 -0
- data/vendor/rack-1.0.0-git/lib/rack.rb +90 -0
- metadata +1152 -0
|
@@ -0,0 +1,743 @@
|
|
|
1
|
+
/*
|
|
2
|
+
* Phusion Passenger - http://www.modrails.com/
|
|
3
|
+
* Copyright (c) 2008, 2009 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_APPLICATION_POOL_SERVER_EXECUTABLE_H_
|
|
26
|
+
#define _PASSENGER_APPLICATION_POOL_SERVER_EXECUTABLE_H_
|
|
27
|
+
|
|
28
|
+
/*
|
|
29
|
+
* This is the ApplicationPool server executable. See the ApplicationPoolServer
|
|
30
|
+
* class for background information.
|
|
31
|
+
*
|
|
32
|
+
* Each client is handled by a seperate thread. This is necessary because we use
|
|
33
|
+
* StandardApplicationPool, and the current algorithm for StandardApplicationPool::get()
|
|
34
|
+
* can block (in the case that the spawning limit has been exceeded). While it is
|
|
35
|
+
* possible to get around this problem without using threads, a thread-based implementation
|
|
36
|
+
* is easier to write.
|
|
37
|
+
*/
|
|
38
|
+
|
|
39
|
+
#include <boost/shared_ptr.hpp>
|
|
40
|
+
#include <boost/weak_ptr.hpp>
|
|
41
|
+
#include <boost/bind.hpp>
|
|
42
|
+
#include <boost/thread/thread.hpp>
|
|
43
|
+
|
|
44
|
+
#include <oxt/system_calls.hpp>
|
|
45
|
+
#include <oxt/thread.hpp>
|
|
46
|
+
#include <oxt/backtrace.hpp>
|
|
47
|
+
|
|
48
|
+
#include <sys/types.h>
|
|
49
|
+
#include <sys/stat.h>
|
|
50
|
+
#include <sys/time.h>
|
|
51
|
+
#include <sys/resource.h>
|
|
52
|
+
#include <unistd.h>
|
|
53
|
+
#include <signal.h>
|
|
54
|
+
#include <errno.h>
|
|
55
|
+
#include <pwd.h>
|
|
56
|
+
#include <string>
|
|
57
|
+
#include <sstream>
|
|
58
|
+
#include <vector>
|
|
59
|
+
#include <set>
|
|
60
|
+
#include <map>
|
|
61
|
+
|
|
62
|
+
#include "MessageChannel.h"
|
|
63
|
+
#include "StandardApplicationPool.h"
|
|
64
|
+
#include "ApplicationPoolStatusReporter.h"
|
|
65
|
+
#include "Application.h"
|
|
66
|
+
#include "Logging.h"
|
|
67
|
+
#include "Exceptions.h"
|
|
68
|
+
|
|
69
|
+
|
|
70
|
+
using namespace boost;
|
|
71
|
+
using namespace std;
|
|
72
|
+
using namespace oxt;
|
|
73
|
+
using namespace Passenger;
|
|
74
|
+
|
|
75
|
+
class Server;
|
|
76
|
+
class Client;
|
|
77
|
+
typedef shared_ptr<Client> ClientPtr;
|
|
78
|
+
|
|
79
|
+
#define SERVER_SOCKET_FD 3
|
|
80
|
+
|
|
81
|
+
// The following variables contain pre-calculated data which are used by
|
|
82
|
+
// Server::fatalSignalHandler(). It's not safe to allocate memory inside
|
|
83
|
+
// a signal handler.
|
|
84
|
+
|
|
85
|
+
/** The filename of the ApplicationPoolServerExecutable binary. */
|
|
86
|
+
static string exeFile;
|
|
87
|
+
static string gdbBacktraceGenerationCommand;
|
|
88
|
+
static const char *gdbBacktraceGenerationCommandStr;
|
|
89
|
+
|
|
90
|
+
|
|
91
|
+
/*****************************************
|
|
92
|
+
* Server
|
|
93
|
+
*****************************************/
|
|
94
|
+
|
|
95
|
+
class Server {
|
|
96
|
+
private:
|
|
97
|
+
friend class Client;
|
|
98
|
+
|
|
99
|
+
int serverSocket;
|
|
100
|
+
StandardApplicationPoolPtr pool;
|
|
101
|
+
set<ClientPtr> clients;
|
|
102
|
+
boost::mutex lock;
|
|
103
|
+
string user;
|
|
104
|
+
|
|
105
|
+
/**
|
|
106
|
+
* Lowers this process's privilege to that of <em>username</em>,
|
|
107
|
+
* and sets stricter permissions for the Phusion Passenger temp
|
|
108
|
+
* directory.
|
|
109
|
+
*/
|
|
110
|
+
void lowerPrivilege(const string &username) {
|
|
111
|
+
struct passwd *entry;
|
|
112
|
+
|
|
113
|
+
entry = getpwnam(username.c_str());
|
|
114
|
+
if (entry != NULL) {
|
|
115
|
+
if (initgroups(username.c_str(), entry->pw_gid) != 0) {
|
|
116
|
+
int e = errno;
|
|
117
|
+
P_WARN("WARNING: Unable to lower ApplicationPoolServerExecutable's "
|
|
118
|
+
"privilege to that of user '" << username <<
|
|
119
|
+
"': cannot set supplementary groups for this "
|
|
120
|
+
"user: " << strerror(e) << " (" << e << ")");
|
|
121
|
+
}
|
|
122
|
+
if (setgid(entry->pw_gid) != 0) {
|
|
123
|
+
int e = errno;
|
|
124
|
+
P_WARN("WARNING: Unable to lower ApplicationPoolServerExecutable's "
|
|
125
|
+
"privilege to that of user '" << username <<
|
|
126
|
+
"': cannot set group ID: " << strerror(e) <<
|
|
127
|
+
" (" << e << ")");
|
|
128
|
+
}
|
|
129
|
+
if (setuid(entry->pw_uid) != 0) {
|
|
130
|
+
int e = errno;
|
|
131
|
+
P_WARN("WARNING: Unable to lower ApplicationPoolServerExecutable's "
|
|
132
|
+
"privilege to that of user '" << username <<
|
|
133
|
+
"': cannot set user ID: " << strerror(e) <<
|
|
134
|
+
" (" << e << ")");
|
|
135
|
+
}
|
|
136
|
+
} else {
|
|
137
|
+
P_WARN("WARNING: Unable to lower ApplicationPoolServerExecutable's "
|
|
138
|
+
"privilege to that of user '" << username <<
|
|
139
|
+
"': user does not exist.");
|
|
140
|
+
}
|
|
141
|
+
}
|
|
142
|
+
|
|
143
|
+
static void fatalSignalHandler(int signum) {
|
|
144
|
+
char message[1024];
|
|
145
|
+
|
|
146
|
+
snprintf(message, sizeof(message) - 1,
|
|
147
|
+
"*** ERROR: ApplicationPoolServerExecutable received fatal signal "
|
|
148
|
+
"%d. Running gdb to obtain the backtrace:\n\n",
|
|
149
|
+
signum);
|
|
150
|
+
message[sizeof(message) - 1] = '\0';
|
|
151
|
+
write(STDERR_FILENO, message, strlen(message));
|
|
152
|
+
write(STDERR_FILENO, "----------------- Begin gdb output -----------------\n",
|
|
153
|
+
sizeof("----------------- Begin gdb output -----------------\n") - 1);
|
|
154
|
+
system(gdbBacktraceGenerationCommandStr);
|
|
155
|
+
write(STDERR_FILENO, "----------------- End gdb output -----------------\n",
|
|
156
|
+
sizeof("----------------- End gdb output -----------------\n") - 1);
|
|
157
|
+
|
|
158
|
+
// Invoke default signal handler.
|
|
159
|
+
kill(getpid(), signum);
|
|
160
|
+
}
|
|
161
|
+
|
|
162
|
+
void setupSignalHandlers() {
|
|
163
|
+
// Ignore SIGPIPE and SIGHUP.
|
|
164
|
+
struct sigaction action;
|
|
165
|
+
action.sa_handler = SIG_IGN;
|
|
166
|
+
action.sa_flags = 0;
|
|
167
|
+
sigemptyset(&action.sa_mask);
|
|
168
|
+
sigaction(SIGPIPE, &action, NULL);
|
|
169
|
+
sigaction(SIGHUP, &action, NULL);
|
|
170
|
+
|
|
171
|
+
// Setup handlers for other signals.
|
|
172
|
+
FILE *f;
|
|
173
|
+
string gdbCommandFile;
|
|
174
|
+
|
|
175
|
+
gdbCommandFile = getPassengerTempDir() + "/info/gdb_backtrace_command.txt";
|
|
176
|
+
f = fopen(gdbCommandFile.c_str(), "w");
|
|
177
|
+
if (f != NULL) {
|
|
178
|
+
// Write a file which contains commands for gdb to obtain
|
|
179
|
+
// the backtrace of this process.
|
|
180
|
+
fprintf(f, "attach %lu\n", (unsigned long) getpid());
|
|
181
|
+
fprintf(f, "thread apply all bt full\n");
|
|
182
|
+
fclose(f);
|
|
183
|
+
chmod(gdbCommandFile.c_str(), S_IRUSR | S_IRGRP | S_IROTH);
|
|
184
|
+
|
|
185
|
+
gdbBacktraceGenerationCommand = "gdb -n -batch -x \"";
|
|
186
|
+
gdbBacktraceGenerationCommand.append(gdbCommandFile);
|
|
187
|
+
gdbBacktraceGenerationCommand.append("\" < /dev/null");
|
|
188
|
+
gdbBacktraceGenerationCommandStr = gdbBacktraceGenerationCommand.c_str();
|
|
189
|
+
|
|
190
|
+
// Install the signal handlers.
|
|
191
|
+
action.sa_handler = fatalSignalHandler;
|
|
192
|
+
action.sa_flags = SA_RESETHAND;
|
|
193
|
+
sigemptyset(&action.sa_mask);
|
|
194
|
+
sigaction(SIGQUIT, &action, NULL);
|
|
195
|
+
sigaction(SIGILL, &action, NULL);
|
|
196
|
+
sigaction(SIGABRT, &action, NULL);
|
|
197
|
+
sigaction(SIGFPE, &action, NULL);
|
|
198
|
+
sigaction(SIGBUS, &action, NULL);
|
|
199
|
+
sigaction(SIGSEGV, &action, NULL);
|
|
200
|
+
sigaction(SIGALRM, &action, NULL);
|
|
201
|
+
sigaction(SIGUSR1, &action, NULL);
|
|
202
|
+
}
|
|
203
|
+
}
|
|
204
|
+
|
|
205
|
+
public:
|
|
206
|
+
Server(int serverSocket,
|
|
207
|
+
const unsigned int logLevel,
|
|
208
|
+
const string &spawnServerCommand,
|
|
209
|
+
const string &logFile,
|
|
210
|
+
const string &rubyCommand,
|
|
211
|
+
const string &user,
|
|
212
|
+
const string &passengerTempDir)
|
|
213
|
+
{
|
|
214
|
+
setPassengerTempDir(passengerTempDir);
|
|
215
|
+
|
|
216
|
+
pool = ptr(new StandardApplicationPool(spawnServerCommand,
|
|
217
|
+
logFile, rubyCommand, user));
|
|
218
|
+
Passenger::setLogLevel(logLevel);
|
|
219
|
+
this->serverSocket = serverSocket;
|
|
220
|
+
this->user = user;
|
|
221
|
+
|
|
222
|
+
P_TRACE(2, "ApplicationPoolServerExecutable initialized (PID " << getpid() << ")");
|
|
223
|
+
}
|
|
224
|
+
|
|
225
|
+
~Server() {
|
|
226
|
+
TRACE_POINT();
|
|
227
|
+
this_thread::disable_syscall_interruption dsi;
|
|
228
|
+
this_thread::disable_interruption di;
|
|
229
|
+
|
|
230
|
+
P_TRACE(2, "Shutting down server.");
|
|
231
|
+
|
|
232
|
+
syscalls::close(serverSocket);
|
|
233
|
+
|
|
234
|
+
// Wait for all clients to disconnect.
|
|
235
|
+
UPDATE_TRACE_POINT();
|
|
236
|
+
set<ClientPtr> clientsCopy;
|
|
237
|
+
{
|
|
238
|
+
/* If we clear _clients_ directly, then it may result in a deadlock.
|
|
239
|
+
* So we make a copy of the set inside a critical section in order to increase
|
|
240
|
+
* the reference counts, and then we release all references outside the critical
|
|
241
|
+
* section.
|
|
242
|
+
*/
|
|
243
|
+
boost::mutex::scoped_lock l(lock);
|
|
244
|
+
clientsCopy = clients;
|
|
245
|
+
clients.clear();
|
|
246
|
+
}
|
|
247
|
+
clientsCopy.clear();
|
|
248
|
+
|
|
249
|
+
P_TRACE(2, "Server shutdown complete.");
|
|
250
|
+
}
|
|
251
|
+
|
|
252
|
+
int start(); // Will be defined later, because Client depends on Server's interface.
|
|
253
|
+
};
|
|
254
|
+
|
|
255
|
+
|
|
256
|
+
/*****************************************
|
|
257
|
+
* Client
|
|
258
|
+
*****************************************/
|
|
259
|
+
|
|
260
|
+
/**
|
|
261
|
+
* Represents a single ApplicationPool client, connected to this server.
|
|
262
|
+
*
|
|
263
|
+
* @invariant
|
|
264
|
+
* The life time of a Client object is guaranteed to be less than
|
|
265
|
+
* that of its associated Server object.
|
|
266
|
+
*/
|
|
267
|
+
class Client {
|
|
268
|
+
private:
|
|
269
|
+
static const int CLIENT_THREAD_STACK_SIZE = 1024 * 64;
|
|
270
|
+
|
|
271
|
+
/** The Server that this Client object belongs to. */
|
|
272
|
+
Server &server;
|
|
273
|
+
|
|
274
|
+
/** The connection to the client. */
|
|
275
|
+
int fd;
|
|
276
|
+
MessageChannel channel;
|
|
277
|
+
|
|
278
|
+
/** The thread which handles the client connection. */
|
|
279
|
+
oxt::thread *thr;
|
|
280
|
+
|
|
281
|
+
/**
|
|
282
|
+
* Maps session ID to sessions created by ApplicationPool::get(). Session IDs
|
|
283
|
+
* are sent back to the ApplicationPool client. This allows the ApplicationPool
|
|
284
|
+
* client to tell us which of the multiple sessions it wants to close, later on.
|
|
285
|
+
*/
|
|
286
|
+
map<int, Application::SessionPtr> sessions;
|
|
287
|
+
|
|
288
|
+
/** Last used session ID. */
|
|
289
|
+
int lastSessionID;
|
|
290
|
+
|
|
291
|
+
class ClientCommunicationError: public oxt::tracable_exception {
|
|
292
|
+
private:
|
|
293
|
+
string briefMessage;
|
|
294
|
+
string systemMessage;
|
|
295
|
+
string fullMessage;
|
|
296
|
+
int m_code;
|
|
297
|
+
public:
|
|
298
|
+
/**
|
|
299
|
+
* Create a new ClientCommunicationError.
|
|
300
|
+
*
|
|
301
|
+
* @param briefMessage A brief message describing the error.
|
|
302
|
+
* @param errorCode An optional error code, i.e. the value of errno right after the error occured, if applicable.
|
|
303
|
+
* @note A system description of the error will be appended to the given message.
|
|
304
|
+
* For example, if <tt>errorCode</tt> is <tt>EBADF</tt>, and <tt>briefMessage</tt>
|
|
305
|
+
* is <em>"Something happened"</em>, then what() will return <em>"Something happened: Bad
|
|
306
|
+
* file descriptor (10)"</em> (if 10 is the number for EBADF).
|
|
307
|
+
* @post code() == errorCode
|
|
308
|
+
* @post brief() == briefMessage
|
|
309
|
+
*/
|
|
310
|
+
ClientCommunicationError(const string &briefMessage, int errorCode = -1) {
|
|
311
|
+
if (errorCode != -1) {
|
|
312
|
+
stringstream str;
|
|
313
|
+
|
|
314
|
+
str << strerror(errorCode) << " (" << errorCode << ")";
|
|
315
|
+
systemMessage = str.str();
|
|
316
|
+
}
|
|
317
|
+
setBriefMessage(briefMessage);
|
|
318
|
+
m_code = errorCode;
|
|
319
|
+
}
|
|
320
|
+
|
|
321
|
+
virtual ~ClientCommunicationError() throw() {}
|
|
322
|
+
|
|
323
|
+
virtual const char *what() const throw() {
|
|
324
|
+
return fullMessage.c_str();
|
|
325
|
+
}
|
|
326
|
+
|
|
327
|
+
void setBriefMessage(const string &message) {
|
|
328
|
+
briefMessage = message;
|
|
329
|
+
if (systemMessage.empty()) {
|
|
330
|
+
fullMessage = briefMessage;
|
|
331
|
+
} else {
|
|
332
|
+
fullMessage = briefMessage + ": " + systemMessage;
|
|
333
|
+
}
|
|
334
|
+
}
|
|
335
|
+
|
|
336
|
+
/**
|
|
337
|
+
* The value of <tt>errno</tt> at the time the error occured.
|
|
338
|
+
*/
|
|
339
|
+
int code() const throw() {
|
|
340
|
+
return m_code;
|
|
341
|
+
}
|
|
342
|
+
|
|
343
|
+
/**
|
|
344
|
+
* Returns a brief version of the exception message. This message does
|
|
345
|
+
* not include the system error description, and is equivalent to the
|
|
346
|
+
* value of the <tt>message</tt> parameter as passed to the constructor.
|
|
347
|
+
*/
|
|
348
|
+
string brief() const throw() {
|
|
349
|
+
return briefMessage;
|
|
350
|
+
}
|
|
351
|
+
|
|
352
|
+
/**
|
|
353
|
+
* Returns the system's error message. This message contains both the
|
|
354
|
+
* content of <tt>strerror(errno)</tt> and the errno number itself.
|
|
355
|
+
*
|
|
356
|
+
* @post if code() == -1: result.empty()
|
|
357
|
+
*/
|
|
358
|
+
string sys() const throw() {
|
|
359
|
+
return systemMessage;
|
|
360
|
+
}
|
|
361
|
+
};
|
|
362
|
+
|
|
363
|
+
/**
|
|
364
|
+
* A StringListCreator which fetches its items from the client.
|
|
365
|
+
* Used as an optimization for ApplicationPoolServer::Client.get():
|
|
366
|
+
* environment variables are only serialized by the client process
|
|
367
|
+
* if a new backend process is being spawned.
|
|
368
|
+
*/
|
|
369
|
+
class EnvironmentVariablesFetcher: public StringListCreator {
|
|
370
|
+
private:
|
|
371
|
+
MessageChannel &channel;
|
|
372
|
+
PoolOptions &options;
|
|
373
|
+
public:
|
|
374
|
+
EnvironmentVariablesFetcher(MessageChannel &theChannel, PoolOptions &theOptions)
|
|
375
|
+
: channel(theChannel),
|
|
376
|
+
options(theOptions)
|
|
377
|
+
{ }
|
|
378
|
+
|
|
379
|
+
/**
|
|
380
|
+
* @throws ClientCommunicationError
|
|
381
|
+
*/
|
|
382
|
+
virtual const StringListPtr getItems() const {
|
|
383
|
+
string data;
|
|
384
|
+
|
|
385
|
+
/* If an I/O error occurred while communicating with the client,
|
|
386
|
+
* then throw a ClientCommunicationException, which will bubble
|
|
387
|
+
* all the way up to the thread main loop, where the connection
|
|
388
|
+
* with the client will be broken.
|
|
389
|
+
*/
|
|
390
|
+
try {
|
|
391
|
+
channel.write("getEnvironmentVariables", NULL);
|
|
392
|
+
} catch (const SystemException &e) {
|
|
393
|
+
throw ClientCommunicationError(
|
|
394
|
+
"Unable to send a 'getEnvironmentVariables' request to the client",
|
|
395
|
+
e.code());
|
|
396
|
+
}
|
|
397
|
+
try {
|
|
398
|
+
if (!channel.readScalar(data)) {
|
|
399
|
+
throw ClientCommunicationError("Unable to read a reply from the client for the 'getEnvironmentVariables' request.");
|
|
400
|
+
}
|
|
401
|
+
} catch (const SystemException &e) {
|
|
402
|
+
throw ClientCommunicationError(
|
|
403
|
+
"Unable to read a reply from the client for the 'getEnvironmentVariables' request",
|
|
404
|
+
e.code());
|
|
405
|
+
}
|
|
406
|
+
|
|
407
|
+
if (!data.empty()) {
|
|
408
|
+
SimpleStringListCreator list(data);
|
|
409
|
+
return list.getItems();
|
|
410
|
+
} else {
|
|
411
|
+
return ptr(new StringList());
|
|
412
|
+
}
|
|
413
|
+
}
|
|
414
|
+
};
|
|
415
|
+
|
|
416
|
+
void processGet(const vector<string> &args) {
|
|
417
|
+
TRACE_POINT();
|
|
418
|
+
Application::SessionPtr session;
|
|
419
|
+
bool failed = false;
|
|
420
|
+
|
|
421
|
+
try {
|
|
422
|
+
PoolOptions options(args, 1);
|
|
423
|
+
options.environmentVariables = ptr(new EnvironmentVariablesFetcher(channel, options));
|
|
424
|
+
session = server.pool->get(options);
|
|
425
|
+
sessions[lastSessionID] = session;
|
|
426
|
+
lastSessionID++;
|
|
427
|
+
} catch (const SpawnException &e) {
|
|
428
|
+
UPDATE_TRACE_POINT();
|
|
429
|
+
this_thread::disable_syscall_interruption dsi;
|
|
430
|
+
|
|
431
|
+
if (e.hasErrorPage()) {
|
|
432
|
+
P_TRACE(3, "Client " << this << ": SpawnException "
|
|
433
|
+
"occured (with error page)");
|
|
434
|
+
channel.write("SpawnException", e.what(), "true", NULL);
|
|
435
|
+
channel.writeScalar(e.getErrorPage());
|
|
436
|
+
} else {
|
|
437
|
+
P_TRACE(3, "Client " << this << ": SpawnException "
|
|
438
|
+
"occured (no error page)");
|
|
439
|
+
channel.write("SpawnException", e.what(), "false", NULL);
|
|
440
|
+
}
|
|
441
|
+
failed = true;
|
|
442
|
+
} catch (const BusyException &e) {
|
|
443
|
+
UPDATE_TRACE_POINT();
|
|
444
|
+
this_thread::disable_syscall_interruption dsi;
|
|
445
|
+
channel.write("BusyException", e.what(), NULL);
|
|
446
|
+
failed = true;
|
|
447
|
+
} catch (const IOException &e) {
|
|
448
|
+
UPDATE_TRACE_POINT();
|
|
449
|
+
this_thread::disable_syscall_interruption dsi;
|
|
450
|
+
channel.write("IOException", e.what(), NULL);
|
|
451
|
+
failed = true;
|
|
452
|
+
}
|
|
453
|
+
UPDATE_TRACE_POINT();
|
|
454
|
+
if (!failed) {
|
|
455
|
+
this_thread::disable_syscall_interruption dsi;
|
|
456
|
+
try {
|
|
457
|
+
UPDATE_TRACE_POINT();
|
|
458
|
+
channel.write("ok", toString(session->getPid()).c_str(),
|
|
459
|
+
toString(lastSessionID - 1).c_str(), NULL);
|
|
460
|
+
UPDATE_TRACE_POINT();
|
|
461
|
+
channel.writeFileDescriptor(session->getStream());
|
|
462
|
+
UPDATE_TRACE_POINT();
|
|
463
|
+
session->closeStream();
|
|
464
|
+
} catch (const exception &e) {
|
|
465
|
+
P_TRACE(3, "Client " << this << ": could not send "
|
|
466
|
+
"'ok' back to the ApplicationPool client: " <<
|
|
467
|
+
e.what());
|
|
468
|
+
sessions.erase(lastSessionID - 1);
|
|
469
|
+
throw;
|
|
470
|
+
}
|
|
471
|
+
}
|
|
472
|
+
}
|
|
473
|
+
|
|
474
|
+
void processClose(const vector<string> &args) {
|
|
475
|
+
TRACE_POINT();
|
|
476
|
+
sessions.erase(atoi(args[1]));
|
|
477
|
+
}
|
|
478
|
+
|
|
479
|
+
void processClear(const vector<string> &args) {
|
|
480
|
+
TRACE_POINT();
|
|
481
|
+
server.pool->clear();
|
|
482
|
+
}
|
|
483
|
+
|
|
484
|
+
void processSetMaxIdleTime(const vector<string> &args) {
|
|
485
|
+
TRACE_POINT();
|
|
486
|
+
server.pool->setMaxIdleTime(atoi(args[1]));
|
|
487
|
+
}
|
|
488
|
+
|
|
489
|
+
void processSetMax(const vector<string> &args) {
|
|
490
|
+
TRACE_POINT();
|
|
491
|
+
server.pool->setMax(atoi(args[1]));
|
|
492
|
+
}
|
|
493
|
+
|
|
494
|
+
void processGetActive(const vector<string> &args) {
|
|
495
|
+
TRACE_POINT();
|
|
496
|
+
channel.write(toString(server.pool->getActive()).c_str(), NULL);
|
|
497
|
+
}
|
|
498
|
+
|
|
499
|
+
void processGetCount(const vector<string> &args) {
|
|
500
|
+
TRACE_POINT();
|
|
501
|
+
channel.write(toString(server.pool->getCount()).c_str(), NULL);
|
|
502
|
+
}
|
|
503
|
+
|
|
504
|
+
void processSetMaxPerApp(unsigned int maxPerApp) {
|
|
505
|
+
TRACE_POINT();
|
|
506
|
+
server.pool->setMaxPerApp(maxPerApp);
|
|
507
|
+
}
|
|
508
|
+
|
|
509
|
+
void processGetSpawnServerPid(const vector<string> &args) {
|
|
510
|
+
TRACE_POINT();
|
|
511
|
+
channel.write(toString(server.pool->getSpawnServerPid()).c_str(), NULL);
|
|
512
|
+
}
|
|
513
|
+
|
|
514
|
+
void processUnknownMessage(const vector<string> &args) {
|
|
515
|
+
TRACE_POINT();
|
|
516
|
+
string name;
|
|
517
|
+
if (args.empty()) {
|
|
518
|
+
name = "(null)";
|
|
519
|
+
} else {
|
|
520
|
+
name = args[0];
|
|
521
|
+
}
|
|
522
|
+
P_WARN("An ApplicationPool client sent an invalid command: "
|
|
523
|
+
<< name << " (" << args.size() << " elements)");
|
|
524
|
+
}
|
|
525
|
+
|
|
526
|
+
/**
|
|
527
|
+
* The entry point of the thread that handles the client connection.
|
|
528
|
+
*/
|
|
529
|
+
void threadMain(const weak_ptr<Client> self) {
|
|
530
|
+
TRACE_POINT();
|
|
531
|
+
vector<string> args;
|
|
532
|
+
try {
|
|
533
|
+
while (!this_thread::interruption_requested()) {
|
|
534
|
+
UPDATE_TRACE_POINT();
|
|
535
|
+
try {
|
|
536
|
+
if (!channel.read(args)) {
|
|
537
|
+
// Client closed connection.
|
|
538
|
+
break;
|
|
539
|
+
}
|
|
540
|
+
} catch (const SystemException &e) {
|
|
541
|
+
P_TRACE(2, "Exception in ApplicationPoolServer client thread during "
|
|
542
|
+
"reading of a message: " << e.what());
|
|
543
|
+
break;
|
|
544
|
+
}
|
|
545
|
+
|
|
546
|
+
P_TRACE(4, "Client " << this << ": received message: " <<
|
|
547
|
+
toString(args));
|
|
548
|
+
|
|
549
|
+
UPDATE_TRACE_POINT();
|
|
550
|
+
if (args[0] == "get") {
|
|
551
|
+
processGet(args);
|
|
552
|
+
} else if (args[0] == "close" && args.size() == 2) {
|
|
553
|
+
processClose(args);
|
|
554
|
+
} else if (args[0] == "clear" && args.size() == 1) {
|
|
555
|
+
processClear(args);
|
|
556
|
+
} else if (args[0] == "setMaxIdleTime" && args.size() == 2) {
|
|
557
|
+
processSetMaxIdleTime(args);
|
|
558
|
+
} else if (args[0] == "setMax" && args.size() == 2) {
|
|
559
|
+
processSetMax(args);
|
|
560
|
+
} else if (args[0] == "getActive" && args.size() == 1) {
|
|
561
|
+
processGetActive(args);
|
|
562
|
+
} else if (args[0] == "getCount" && args.size() == 1) {
|
|
563
|
+
processGetCount(args);
|
|
564
|
+
} else if (args[0] == "setMaxPerApp" && args.size() == 2) {
|
|
565
|
+
processSetMaxPerApp(atoi(args[1]));
|
|
566
|
+
} else if (args[0] == "getSpawnServerPid" && args.size() == 1) {
|
|
567
|
+
processGetSpawnServerPid(args);
|
|
568
|
+
} else {
|
|
569
|
+
processUnknownMessage(args);
|
|
570
|
+
break;
|
|
571
|
+
}
|
|
572
|
+
args.clear();
|
|
573
|
+
}
|
|
574
|
+
} catch (const boost::thread_interrupted &) {
|
|
575
|
+
P_TRACE(2, "Client thread " << this << " interrupted.");
|
|
576
|
+
} catch (const tracable_exception &e) {
|
|
577
|
+
P_TRACE(2, "Uncaught exception in ApplicationPoolServer client thread:\n"
|
|
578
|
+
<< " message: " << toString(args) << "\n"
|
|
579
|
+
<< " exception: " << e.what() << "\n"
|
|
580
|
+
<< " backtrace:\n" << e.backtrace());
|
|
581
|
+
} catch (const exception &e) {
|
|
582
|
+
P_TRACE(2, "Uncaught exception in ApplicationPoolServer client thread:\n"
|
|
583
|
+
<< " message: " << toString(args) << "\n"
|
|
584
|
+
<< " exception: " << e.what() << "\n"
|
|
585
|
+
<< " backtrace: not available");
|
|
586
|
+
} catch (...) {
|
|
587
|
+
P_TRACE(2, "Uncaught unknown exception in ApplicationPool client thread.");
|
|
588
|
+
throw;
|
|
589
|
+
}
|
|
590
|
+
|
|
591
|
+
UPDATE_TRACE_POINT();
|
|
592
|
+
boost::mutex::scoped_lock l(server.lock);
|
|
593
|
+
ClientPtr myself(self.lock());
|
|
594
|
+
if (myself != NULL) {
|
|
595
|
+
server.clients.erase(myself);
|
|
596
|
+
}
|
|
597
|
+
}
|
|
598
|
+
|
|
599
|
+
public:
|
|
600
|
+
/**
|
|
601
|
+
* Create a new Client object.
|
|
602
|
+
*
|
|
603
|
+
* @param the_server The Server object that this Client belongs to.
|
|
604
|
+
* @param connection The connection to the ApplicationPool client.
|
|
605
|
+
*
|
|
606
|
+
* @note
|
|
607
|
+
* <tt>connection</tt> will be closed upon destruction
|
|
608
|
+
*/
|
|
609
|
+
Client(Server &the_server, int connection)
|
|
610
|
+
: server(the_server),
|
|
611
|
+
fd(connection),
|
|
612
|
+
channel(connection) {
|
|
613
|
+
thr = NULL;
|
|
614
|
+
lastSessionID = 0;
|
|
615
|
+
}
|
|
616
|
+
|
|
617
|
+
/**
|
|
618
|
+
* Start the thread for handling the connection with this client.
|
|
619
|
+
*
|
|
620
|
+
* @param self The iterator of this Client object inside the server's
|
|
621
|
+
* <tt>clients</tt> set. This is used to remove itself from
|
|
622
|
+
* the <tt>clients</tt> set once the client has closed the
|
|
623
|
+
* connection.
|
|
624
|
+
*/
|
|
625
|
+
void start(const weak_ptr<Client> self) {
|
|
626
|
+
stringstream name;
|
|
627
|
+
name << "Client " << fd;
|
|
628
|
+
thr = new oxt::thread(
|
|
629
|
+
bind(&Client::threadMain, this, self),
|
|
630
|
+
name.str(), CLIENT_THREAD_STACK_SIZE
|
|
631
|
+
);
|
|
632
|
+
}
|
|
633
|
+
|
|
634
|
+
~Client() {
|
|
635
|
+
TRACE_POINT();
|
|
636
|
+
this_thread::disable_syscall_interruption dsi;
|
|
637
|
+
this_thread::disable_interruption di;
|
|
638
|
+
|
|
639
|
+
if (thr != NULL) {
|
|
640
|
+
if (thr->get_id() != this_thread::get_id()) {
|
|
641
|
+
thr->interrupt_and_join();
|
|
642
|
+
}
|
|
643
|
+
delete thr;
|
|
644
|
+
}
|
|
645
|
+
syscalls::close(fd);
|
|
646
|
+
}
|
|
647
|
+
};
|
|
648
|
+
|
|
649
|
+
int
|
|
650
|
+
Server::start() {
|
|
651
|
+
TRACE_POINT();
|
|
652
|
+
setup_syscall_interruption_support();
|
|
653
|
+
|
|
654
|
+
try {
|
|
655
|
+
uid_t fifoUid;
|
|
656
|
+
gid_t fifoGid;
|
|
657
|
+
|
|
658
|
+
// Set the FIFO's owner according to whether we're running as root
|
|
659
|
+
// and whether user switching is enabled.
|
|
660
|
+
if (geteuid() == 0 && !user.empty()) {
|
|
661
|
+
determineLowestUserAndGroup(user, fifoUid, fifoGid);
|
|
662
|
+
} else {
|
|
663
|
+
fifoUid = (uid_t) -1;
|
|
664
|
+
fifoGid = (gid_t) -1;
|
|
665
|
+
}
|
|
666
|
+
ApplicationPoolStatusReporter reporter(pool, user.empty(),
|
|
667
|
+
S_IRUSR | S_IWUSR, fifoUid, fifoGid);
|
|
668
|
+
|
|
669
|
+
if (!user.empty()) {
|
|
670
|
+
lowerPrivilege(user);
|
|
671
|
+
}
|
|
672
|
+
|
|
673
|
+
setupSignalHandlers();
|
|
674
|
+
|
|
675
|
+
while (!this_thread::interruption_requested()) {
|
|
676
|
+
int fds[2], ret;
|
|
677
|
+
char x;
|
|
678
|
+
|
|
679
|
+
// The received data only serves to wake up the server socket,
|
|
680
|
+
// and is not important.
|
|
681
|
+
UPDATE_TRACE_POINT();
|
|
682
|
+
ret = syscalls::read(serverSocket, &x, 1);
|
|
683
|
+
if (ret == 0) {
|
|
684
|
+
// All web server processes disconnected from this server.
|
|
685
|
+
// So we can safely quit.
|
|
686
|
+
break;
|
|
687
|
+
}
|
|
688
|
+
|
|
689
|
+
this_thread::disable_interruption di;
|
|
690
|
+
this_thread::disable_syscall_interruption dsi;
|
|
691
|
+
|
|
692
|
+
// We have an incoming connect request from an
|
|
693
|
+
// ApplicationPool client.
|
|
694
|
+
UPDATE_TRACE_POINT();
|
|
695
|
+
do {
|
|
696
|
+
ret = socketpair(AF_UNIX, SOCK_STREAM, 0, fds);
|
|
697
|
+
} while (ret == -1 && errno == EINTR);
|
|
698
|
+
if (ret == -1) {
|
|
699
|
+
UPDATE_TRACE_POINT();
|
|
700
|
+
throw SystemException("Cannot create an anonymous Unix socket", errno);
|
|
701
|
+
}
|
|
702
|
+
|
|
703
|
+
UPDATE_TRACE_POINT();
|
|
704
|
+
MessageChannel(serverSocket).writeFileDescriptor(fds[1]);
|
|
705
|
+
syscalls::close(fds[1]);
|
|
706
|
+
|
|
707
|
+
UPDATE_TRACE_POINT();
|
|
708
|
+
ClientPtr client(new Client(*this, fds[0]));
|
|
709
|
+
pair<set<ClientPtr>::iterator, bool> p;
|
|
710
|
+
{
|
|
711
|
+
UPDATE_TRACE_POINT();
|
|
712
|
+
boost::mutex::scoped_lock l(lock);
|
|
713
|
+
clients.insert(client);
|
|
714
|
+
}
|
|
715
|
+
UPDATE_TRACE_POINT();
|
|
716
|
+
client->start(client);
|
|
717
|
+
}
|
|
718
|
+
} catch (const boost::thread_interrupted &) {
|
|
719
|
+
P_TRACE(2, "Main thread interrupted.");
|
|
720
|
+
}
|
|
721
|
+
return 0;
|
|
722
|
+
}
|
|
723
|
+
|
|
724
|
+
int
|
|
725
|
+
main(int argc, char *argv[]) {
|
|
726
|
+
try {
|
|
727
|
+
exeFile = argv[0];
|
|
728
|
+
Server server(SERVER_SOCKET_FD, atoi(argv[1]),
|
|
729
|
+
argv[2], argv[3], argv[4], argv[5], argv[6]);
|
|
730
|
+
return server.start();
|
|
731
|
+
} catch (const tracable_exception &e) {
|
|
732
|
+
P_ERROR("*** Fatal error: " << e.what() << "\n" << e.backtrace());
|
|
733
|
+
return 1;
|
|
734
|
+
} catch (const exception &e) {
|
|
735
|
+
P_ERROR("*** Fatal error: " << e.what());
|
|
736
|
+
return 1;
|
|
737
|
+
} catch (...) {
|
|
738
|
+
P_ERROR("*** Fatal error: Unknown exception thrown in main thread.");
|
|
739
|
+
throw;
|
|
740
|
+
}
|
|
741
|
+
}
|
|
742
|
+
|
|
743
|
+
#endif /* _PASSENGER_APPLICATION_POOL_SERVER_EXECUTABLE_H_ */
|