passenger 5.0.4 → 5.0.5
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.
- checksums.yaml +8 -8
- checksums.yaml.gz.asc +7 -7
- data.tar.gz.asc +7 -7
- data/.editorconfig +10 -0
- data/CHANGELOG +21 -0
- data/build/agents.rb +2 -2
- data/build/apache2.rb +6 -5
- data/build/common_library.rb +22 -7
- data/build/cxx_tests.rb +0 -3
- data/build/misc.rb +1 -1
- data/dev/parse_file_descriptor_log +119 -0
- data/doc/CloudLicensingConfiguration.html +387 -0
- data/doc/Design and Architecture.html +2430 -0
- data/doc/Packaging.html +488 -0
- data/doc/Security of user switching support.html +1833 -0
- data/doc/ServerOptimizationGuide.html +659 -0
- data/doc/ServerOptimizationGuide.txt.md +8 -0
- data/doc/Users guide Apache.html +9116 -0
- data/doc/Users guide Apache.idmap.txt +6 -2
- data/doc/Users guide Apache.txt +26 -7
- data/doc/Users guide Nginx.html +9025 -0
- data/doc/Users guide Nginx.idmap.txt +7 -3
- data/doc/Users guide Nginx.txt +29 -6
- data/doc/Users guide Standalone.html +3983 -0
- data/doc/Users guide.html +1748 -0
- data/doc/users_guide_snippets/installation.txt +4 -4
- data/ext/apache2/Configuration.cpp +16 -5
- data/ext/apache2/Configuration.hpp +4 -2
- data/ext/apache2/Hooks.cpp +44 -19
- data/ext/boost/libs/thread/src/pthread/once.cpp +2 -0
- data/ext/boost/libs/thread/src/pthread/once_atomic.cpp +6 -0
- data/ext/common/AgentsStarter.h +3 -2
- data/ext/common/ApplicationPool2/DirectSpawner.h +14 -4
- data/ext/common/ApplicationPool2/DummySpawner.h +12 -7
- data/ext/common/ApplicationPool2/Implementation.cpp +1 -1
- data/ext/common/ApplicationPool2/Process.h +2 -1
- data/ext/common/ApplicationPool2/Session.h +6 -6
- data/ext/common/ApplicationPool2/SmartSpawner.h +19 -4
- data/ext/common/ApplicationPool2/Socket.h +59 -27
- data/ext/common/ApplicationPool2/Spawner.h +2 -2
- data/ext/common/BackgroundEventLoop.cpp +6 -1
- data/ext/common/Constants.h +1 -1
- data/ext/common/EventedClient.h +1 -1
- data/ext/common/EventedServer.h +2 -2
- data/ext/common/FileDescriptor.h +25 -6
- data/ext/common/Logging.cpp +107 -52
- data/ext/common/Logging.h +146 -19
- data/ext/common/MessageClient.h +2 -2
- data/ext/common/MessageServer.h +3 -2
- data/ext/common/RandomGenerator.h +8 -7
- data/ext/common/SafeLibev.h +5 -1
- data/ext/common/ServerKit/AcceptLoadBalancer.h +9 -4
- data/ext/common/ServerKit/FdSinkChannel.h +5 -2
- data/ext/common/ServerKit/FdSourceChannel.h +5 -2
- data/ext/common/ServerKit/FileBufferedChannel.h +2 -0
- data/ext/common/ServerKit/FileBufferedFdSinkChannel.h +7 -2
- data/ext/common/ServerKit/HttpServer.h +6 -0
- data/ext/common/ServerKit/Server.h +40 -3
- data/ext/common/StaticString.h +20 -0
- data/ext/common/UnionStation/Connection.h +3 -1
- data/ext/common/UnionStation/Core.h +6 -4
- data/ext/common/Utils.cpp +4 -3
- data/ext/common/Utils/DateParsing.h +19 -5
- data/ext/common/Utils/FastStringStream.h +183 -0
- data/ext/common/Utils/IOUtils.cpp +47 -28
- data/ext/common/Utils/IOUtils.h +56 -12
- data/ext/common/Utils/MessagePassing.h +3 -3
- data/ext/common/Utils/ProcessMetricsCollector.h +2 -2
- data/ext/common/Utils/ScopeGuard.h +16 -5
- data/ext/common/Utils/SpeedMeter.h +2 -2
- data/ext/common/Utils/StrIntUtils.cpp +6 -6
- data/ext/common/Utils/StrIntUtils.h +2 -1
- data/ext/common/agents/Base.cpp +56 -4
- data/ext/common/agents/Base.h +2 -1
- data/ext/common/agents/HelperAgent/AdminServer.h +122 -11
- data/ext/common/agents/HelperAgent/Main.cpp +16 -5
- data/ext/common/agents/HelperAgent/OptionParser.h +7 -1
- data/ext/common/agents/HelperAgent/RequestHandler.h +1 -1
- data/ext/common/agents/HelperAgent/RequestHandler/Hooks.cpp +10 -1
- data/ext/common/agents/HelperAgent/RequestHandler/Request.h +8 -0
- data/ext/common/agents/HelperAgent/RequestHandler/TurboCaching.h +4 -3
- data/ext/common/agents/LoggingAgent/AdminServer.h +57 -11
- data/ext/common/agents/LoggingAgent/LoggingServer.h +3 -3
- data/ext/common/agents/LoggingAgent/Main.cpp +11 -3
- data/ext/common/agents/Watchdog/AdminServer.h +53 -11
- data/ext/common/agents/Watchdog/AgentWatcher.cpp +3 -3
- data/ext/common/agents/Watchdog/Main.cpp +13 -6
- data/ext/libeio/ecb.h +1 -1
- data/ext/libev/ev.c +13 -1
- data/ext/libev/ev.h +3 -0
- data/ext/nginx/Configuration.c +28 -6
- data/ext/nginx/Configuration.h +2 -1
- data/ext/nginx/ngx_http_passenger_module.c +5 -4
- data/ext/oxt/dynamic_thread_group.hpp +38 -5
- data/lib/phusion_passenger.rb +1 -1
- data/lib/phusion_passenger/common_library.rb +9 -5
- data/lib/phusion_passenger/config/reopen_logs_command.rb +2 -2
- data/lib/phusion_passenger/packaging.rb +23 -37
- data/passenger.gemspec +21 -21
- metadata +4 -453
- metadata.gz.asc +7 -7
- data/.gitignore +0 -68
- data/.travis.yml +0 -16
- data/Gemfile +0 -17
- data/Gemfile.lock +0 -39
- data/Vagrantfile +0 -54
- data/debian.template/README.Debian +0 -15
- data/debian.template/changelog +0 -316
- data/debian.template/compat +0 -1
- data/debian.template/control.erb +0 -91
- data/debian.template/copyright +0 -385
- data/debian.template/libapache2-mod-passenger.install +0 -3
- data/debian.template/libapache2-mod-passenger.postinst +0 -36
- data/debian.template/libapache2-mod-passenger.prerm +0 -15
- data/debian.template/locations.ini.erb +0 -14
- data/debian.template/passenger-dev.install.erb +0 -3
- data/debian.template/passenger-doc.install.erb +0 -2
- data/debian.template/passenger.conf +0 -6
- data/debian.template/passenger.docs +0 -4
- data/debian.template/passenger.install.erb +0 -14
- data/debian.template/passenger.load +0 -3
- data/debian.template/passenger.manpages +0 -3
- data/debian.template/patches/series +0 -0
- data/debian.template/rules.erb +0 -76
- data/debian.template/source/format +0 -1
- data/ext/common/EventedBufferedInput.h +0 -458
- data/packaging/rpm/LICENSE.txt +0 -19
- data/packaging/rpm/Makefile +0 -13
- data/packaging/rpm/README.md +0 -41
- data/packaging/rpm/Vagrantfile +0 -38
- data/packaging/rpm/Vagrantfile.centos +0 -30
- data/packaging/rpm/build +0 -170
- data/packaging/rpm/create_project +0 -41
- data/packaging/rpm/git_update +0 -88
- data/packaging/rpm/image/Dockerfile +0 -37
- data/packaging/rpm/image/Gemfile +0 -3
- data/packaging/rpm/image/Gemfile.lock +0 -12
- data/packaging/rpm/image/RPM-GPG-KEY-amazon-ga +0 -19
- data/packaging/rpm/image/amazon2014-i386.cfg +0 -96
- data/packaging/rpm/image/amazon2014-x86_64.cfg +0 -96
- data/packaging/rpm/image/site-defaults.cfg +0 -168
- data/packaging/rpm/internal/build_tasks.rb +0 -238
- data/packaging/rpm/internal/dummygpg +0 -11
- data/packaging/rpm/internal/exec_build +0 -42
- data/packaging/rpm/internal/get_distro_arch +0 -14
- data/packaging/rpm/internal/get_distro_id +0 -10
- data/packaging/rpm/internal/git_update +0 -27
- data/packaging/rpm/internal/inituidgid +0 -17
- data/packaging/rpm/internal/my_init +0 -344
- data/packaging/rpm/internal/python27 +0 -3
- data/packaging/rpm/internal/repo_update +0 -46
- data/packaging/rpm/internal/setuser +0 -26
- data/packaging/rpm/internal/tracking_helper +0 -40
- data/packaging/rpm/jenkins_release +0 -99
- data/packaging/rpm/lib/build_tasks_support.rb +0 -402
- data/packaging/rpm/lib/preprocessor.rb +0 -341
- data/packaging/rpm/nginx_spec/404.html +0 -119
- data/packaging/rpm/nginx_spec/50x.html +0 -119
- data/packaging/rpm/nginx_spec/index.html +0 -116
- data/packaging/rpm/nginx_spec/nginx-auto-cc-gcc.patch +0 -13
- data/packaging/rpm/nginx_spec/nginx-logo.png +0 -0
- data/packaging/rpm/nginx_spec/nginx-upgrade +0 -13
- data/packaging/rpm/nginx_spec/nginx-upgrade.8 +0 -151
- data/packaging/rpm/nginx_spec/nginx.conf +0 -131
- data/packaging/rpm/nginx_spec/nginx.init +0 -144
- data/packaging/rpm/nginx_spec/nginx.logrotate +0 -13
- data/packaging/rpm/nginx_spec/nginx.service +0 -15
- data/packaging/rpm/nginx_spec/nginx.spec.template +0 -560
- data/packaging/rpm/nginx_spec/nginx.sysconfig +0 -4
- data/packaging/rpm/nginx_spec/passenger.conf +0 -9
- data/packaging/rpm/nginx_spec/poweredby.png +0 -0
- data/packaging/rpm/passenger_spec/apache-passenger.conf.in +0 -26
- data/packaging/rpm/passenger_spec/config.json +0 -30
- data/packaging/rpm/passenger_spec/passenger.logrotate +0 -7
- data/packaging/rpm/passenger_spec/passenger.spec.template +0 -478
- data/packaging/rpm/passenger_spec/passenger_dynamic_thread_group.patch +0 -16
- data/packaging/rpm/passenger_spec/passenger_tests_default_config_example.patch +0 -44
- data/packaging/rpm/passenger_spec/rubygem-passenger-4.0.18-GLIBC_HAVE_LONG_LONG.patch +0 -21
- data/packaging/rpm/repo_update +0 -114
- data/packaging/rpm/setup-system +0 -61
- data/packaging/rpm/shell +0 -10
- data/test/.rspec +0 -4
- data/test/config.json.example +0 -42
- data/test/config.json.rpm-automation +0 -15
- data/test/config.json.travis +0 -15
- data/test/config.json.vagrant +0 -30
- data/test/cxx/ApplicationPool2/DirectSpawnerTest.cpp +0 -124
- data/test/cxx/ApplicationPool2/OptionsTest.cpp +0 -30
- data/test/cxx/ApplicationPool2/PoolTest.cpp +0 -2062
- data/test/cxx/ApplicationPool2/ProcessTest.cpp +0 -130
- data/test/cxx/ApplicationPool2/SmartSpawnerTest.cpp +0 -243
- data/test/cxx/ApplicationPool2/SpawnerTestCases.cpp +0 -823
- data/test/cxx/BufferedIOTest.cpp +0 -364
- data/test/cxx/CachedFileStatTest.cpp +0 -402
- data/test/cxx/CxxTestMain.cpp +0 -181
- data/test/cxx/DataStructures/LStringTest.cpp +0 -275
- data/test/cxx/DataStructures/StringKeyTableTest.cpp +0 -199
- data/test/cxx/DateParsingTest.cpp +0 -75
- data/test/cxx/DechunkerTest.cpp +0 -250
- data/test/cxx/EventedBufferedInputTest.cpp +0 -758
- data/test/cxx/EventedClientTest.cpp +0 -523
- data/test/cxx/FileChangeCheckerTest.cpp +0 -331
- data/test/cxx/FileDescriptorTest.cpp +0 -69
- data/test/cxx/FilterSupportTest.cpp +0 -433
- data/test/cxx/IOUtilsTest.cpp +0 -861
- data/test/cxx/MemoryKit/MbufTest.cpp +0 -213
- data/test/cxx/MessageIOTest.cpp +0 -360
- data/test/cxx/MessagePassingTest.cpp +0 -81
- data/test/cxx/MessageReadersWritersTest.cpp +0 -576
- data/test/cxx/MessageServerTest.cpp +0 -393
- data/test/cxx/ProcessMetricsCollectorTest.cpp +0 -123
- data/test/cxx/RequestHandlerTest.cpp +0 -1463
- data/test/cxx/ResponseCacheTest.cpp +0 -322
- data/test/cxx/ServerKit/ChannelTest.cpp +0 -1467
- data/test/cxx/ServerKit/CookieUtilsTest.cpp +0 -274
- data/test/cxx/ServerKit/FileBufferedChannelTest.cpp +0 -992
- data/test/cxx/ServerKit/HeaderTableTest.cpp +0 -177
- data/test/cxx/ServerKit/HttpServerTest.cpp +0 -1580
- data/test/cxx/ServerKit/ServerTest.cpp +0 -408
- data/test/cxx/StaticStringTest.cpp +0 -220
- data/test/cxx/StringMapTest.cpp +0 -131
- data/test/cxx/SystemTimeTest.cpp +0 -37
- data/test/cxx/TemplateTest.cpp +0 -118
- data/test/cxx/TestSupport.cpp +0 -207
- data/test/cxx/TestSupport.h +0 -333
- data/test/cxx/UnionStationTest.cpp +0 -741
- data/test/cxx/Utils/StrIntUtilsTest.cpp +0 -39
- data/test/cxx/UtilsTest.cpp +0 -672
- data/test/cxx/VariantMapTest.cpp +0 -191
- data/test/gdbinit.example +0 -34
- data/test/integration_tests/apache2_tests.rb +0 -585
- data/test/integration_tests/downloaded_binaries_tests.rb +0 -185
- data/test/integration_tests/native_packaging_spec.rb +0 -368
- data/test/integration_tests/nginx_tests.rb +0 -402
- data/test/integration_tests/shared/example_webapp_tests.rb +0 -289
- data/test/integration_tests/source_packaging_test.rb +0 -201
- data/test/integration_tests/spec_helper.rb +0 -22
- data/test/integration_tests/standalone_tests.rb +0 -392
- data/test/node/line_reader_spec.js +0 -338
- data/test/node/spec_helper.js +0 -65
- data/test/oxt/backtrace_test.cpp +0 -88
- data/test/oxt/counter.hpp +0 -55
- data/test/oxt/dynamic_thread_group_test.cpp +0 -131
- data/test/oxt/oxt_test_main.cpp +0 -27
- data/test/oxt/spin_lock_test.cpp +0 -59
- data/test/oxt/syscall_interruption_test.cpp +0 -39
- data/test/ruby/debug_logging_spec.rb +0 -145
- data/test/ruby/message_channel_spec.rb +0 -196
- data/test/ruby/rack/loader_spec.rb +0 -42
- data/test/ruby/rack/preloader_spec.rb +0 -48
- data/test/ruby/rails3.0/loader_spec.rb +0 -26
- data/test/ruby/rails3.0/preloader_spec.rb +0 -32
- data/test/ruby/rails3.1/loader_spec.rb +0 -26
- data/test/ruby/rails3.1/preloader_spec.rb +0 -32
- data/test/ruby/rails3.2/loader_spec.rb +0 -26
- data/test/ruby/rails3.2/preloader_spec.rb +0 -32
- data/test/ruby/rails4.0/loader_spec.rb +0 -28
- data/test/ruby/rails4.0/preloader_spec.rb +0 -34
- data/test/ruby/rails4.1/loader_spec.rb +0 -28
- data/test/ruby/rails4.1/preloader_spec.rb +0 -34
- data/test/ruby/request_handler_spec.rb +0 -747
- data/test/ruby/shared/loader_sharedspec.rb +0 -247
- data/test/ruby/shared/rails/union_station_extensions_sharedspec.rb +0 -357
- data/test/ruby/shared/ruby_loader_sharedspec.rb +0 -55
- data/test/ruby/spec_helper.rb +0 -114
- data/test/ruby/standalone/runtime_installer_spec.rb +0 -402
- data/test/ruby/union_station_spec.rb +0 -288
- data/test/ruby/utils/file_system_watcher_spec.rb +0 -229
- data/test/ruby/utils/hosts_file_parser.rb +0 -258
- data/test/ruby/utils/tee_input_spec.rb +0 -235
- data/test/ruby/utils/unseekable_socket_spec.rb +0 -66
- data/test/ruby/utils_spec.rb +0 -41
- data/test/stub/apache2/httpd.conf.erb +0 -122
- data/test/stub/apache2/mime.types +0 -748
- 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 +0 -23
- data/test/stub/index.html +0 -1
- data/test/stub/nginx/koi-utf +0 -109
- data/test/stub/nginx/koi-win +0 -103
- data/test/stub/nginx/mime.types +0 -70
- data/test/stub/nginx/nginx.conf.erb +0 -70
- data/test/stub/nginx/win-utf +0 -126
- data/test/stub/node/app.js +0 -133
- data/test/stub/node/public/.gitignore +0 -0
- data/test/stub/node/tmp/.gitignore +0 -0
- data/test/stub/rack/config.ru +0 -95
- data/test/stub/rack/library.rb +0 -16
- data/test/stub/rack/public/.gitignore +0 -0
- data/test/stub/rack/start.rb +0 -52
- data/test/stub/rack/tmp/.gitignore +0 -0
- data/test/stub/rails3.0/.gitignore +0 -4
- data/test/stub/rails3.0/Gemfile +0 -22
- data/test/stub/rails3.0/Gemfile.lock +0 -80
- data/test/stub/rails3.0/Rakefile +0 -10
- data/test/stub/rails3.0/app/controllers/application_controller.rb +0 -4
- data/test/stub/rails3.0/app/helpers/application_helper.rb +0 -2
- data/test/stub/rails3.0/app/views/layouts/application.html.erb +0 -14
- data/test/stub/rails3.0/config.ru +0 -4
- data/test/stub/rails3.0/config/application.rb +0 -48
- data/test/stub/rails3.0/config/boot.rb +0 -13
- data/test/stub/rails3.0/config/database.yml +0 -22
- data/test/stub/rails3.0/config/environment.rb +0 -5
- data/test/stub/rails3.0/config/environments/development.rb +0 -19
- data/test/stub/rails3.0/config/environments/production.rb +0 -48
- data/test/stub/rails3.0/config/environments/test.rb +0 -32
- data/test/stub/rails3.0/config/initializers/backtrace_silencers.rb +0 -7
- data/test/stub/rails3.0/config/initializers/inflections.rb +0 -10
- data/test/stub/rails3.0/config/initializers/mime_types.rb +0 -5
- data/test/stub/rails3.0/config/initializers/passenger.rb +0 -2
- data/test/stub/rails3.0/config/initializers/secret_token.rb +0 -7
- data/test/stub/rails3.0/config/initializers/session_store.rb +0 -8
- data/test/stub/rails3.0/config/locales/en.yml +0 -5
- data/test/stub/rails3.0/config/routes.rb +0 -58
- data/test/stub/rails3.0/db/seeds.rb +0 -7
- data/test/stub/rails3.0/doc/README_FOR_APP +0 -2
- data/test/stub/rails3.0/lib/tasks/.gitkeep +0 -0
- data/test/stub/rails3.0/log/.gitignore +0 -0
- data/test/stub/rails3.0/public/404.html +0 -26
- data/test/stub/rails3.0/public/422.html +0 -26
- data/test/stub/rails3.0/public/500.html +0 -26
- data/test/stub/rails3.0/public/favicon.ico +0 -0
- data/test/stub/rails3.0/public/index.html +0 -279
- data/test/stub/rails3.0/public/robots.txt +0 -5
- data/test/stub/rails3.0/public/stylesheets/.gitkeep +0 -0
- data/test/stub/rails3.0/script/rails +0 -9
- data/test/stub/rails3.0/test/performance/browsing_test.rb +0 -9
- data/test/stub/rails3.0/test/test_helper.rb +0 -13
- data/test/stub/rails3.0/vendor/plugins/.gitkeep +0 -0
- data/test/stub/rails3.1/.gitignore +0 -15
- data/test/stub/rails3.1/Gemfile +0 -37
- data/test/stub/rails3.1/Gemfile.lock +0 -115
- data/test/stub/rails3.1/README +0 -261
- data/test/stub/rails3.1/Rakefile +0 -7
- data/test/stub/rails3.1/app/assets/images/rails.png +0 -0
- data/test/stub/rails3.1/app/assets/stylesheets/application.css +0 -7
- data/test/stub/rails3.1/app/controllers/application_controller.rb +0 -3
- data/test/stub/rails3.1/app/helpers/application_helper.rb +0 -2
- data/test/stub/rails3.1/app/mailers/.gitkeep +0 -0
- data/test/stub/rails3.1/app/models/.gitkeep +0 -0
- data/test/stub/rails3.1/app/views/layouts/application.html.erb +0 -14
- data/test/stub/rails3.1/config.ru +0 -4
- data/test/stub/rails3.1/config/application.rb +0 -48
- data/test/stub/rails3.1/config/boot.rb +0 -6
- data/test/stub/rails3.1/config/database.yml +0 -25
- data/test/stub/rails3.1/config/environment.rb +0 -5
- data/test/stub/rails3.1/config/environments/development.rb +0 -30
- data/test/stub/rails3.1/config/environments/production.rb +0 -60
- data/test/stub/rails3.1/config/environments/test.rb +0 -39
- data/test/stub/rails3.1/config/initializers/backtrace_silencers.rb +0 -7
- data/test/stub/rails3.1/config/initializers/inflections.rb +0 -10
- data/test/stub/rails3.1/config/initializers/mime_types.rb +0 -5
- data/test/stub/rails3.1/config/initializers/passenger.rb +0 -2
- data/test/stub/rails3.1/config/initializers/secret_token.rb +0 -7
- data/test/stub/rails3.1/config/initializers/session_store.rb +0 -8
- data/test/stub/rails3.1/config/initializers/wrap_parameters.rb +0 -14
- data/test/stub/rails3.1/config/locales/en.yml +0 -5
- data/test/stub/rails3.1/config/routes.rb +0 -58
- data/test/stub/rails3.1/db/seeds.rb +0 -7
- data/test/stub/rails3.1/doc/README_FOR_APP +0 -2
- data/test/stub/rails3.1/lib/assets/.gitkeep +0 -0
- data/test/stub/rails3.1/lib/tasks/.gitkeep +0 -0
- data/test/stub/rails3.1/log/.gitkeep +0 -0
- data/test/stub/rails3.1/public/404.html +0 -26
- data/test/stub/rails3.1/public/422.html +0 -26
- data/test/stub/rails3.1/public/500.html +0 -26
- data/test/stub/rails3.1/public/favicon.ico +0 -0
- data/test/stub/rails3.1/public/index.html +0 -241
- data/test/stub/rails3.1/public/robots.txt +0 -5
- data/test/stub/rails3.1/script/rails +0 -6
- data/test/stub/rails3.1/test/fixtures/.gitkeep +0 -0
- data/test/stub/rails3.1/test/functional/.gitkeep +0 -0
- data/test/stub/rails3.1/test/integration/.gitkeep +0 -0
- data/test/stub/rails3.1/test/performance/browsing_test.rb +0 -12
- data/test/stub/rails3.1/test/test_helper.rb +0 -13
- data/test/stub/rails3.1/test/unit/.gitkeep +0 -0
- data/test/stub/rails3.1/vendor/assets/stylesheets/.gitkeep +0 -0
- data/test/stub/rails3.1/vendor/plugins/.gitkeep +0 -0
- data/test/stub/rails3.2/.gitignore +0 -15
- data/test/stub/rails3.2/Gemfile +0 -39
- data/test/stub/rails3.2/Gemfile.lock +0 -113
- data/test/stub/rails3.2/Rakefile +0 -7
- data/test/stub/rails3.2/app/assets/images/rails.png +0 -0
- data/test/stub/rails3.2/app/assets/stylesheets/application.css +0 -13
- data/test/stub/rails3.2/app/controllers/application_controller.rb +0 -3
- data/test/stub/rails3.2/app/helpers/application_helper.rb +0 -2
- data/test/stub/rails3.2/app/mailers/.gitkeep +0 -0
- data/test/stub/rails3.2/app/models/.gitkeep +0 -0
- data/test/stub/rails3.2/app/views/layouts/application.html.erb +0 -14
- data/test/stub/rails3.2/config.ru +0 -4
- data/test/stub/rails3.2/config/application.rb +0 -62
- data/test/stub/rails3.2/config/boot.rb +0 -6
- data/test/stub/rails3.2/config/database.yml +0 -25
- data/test/stub/rails3.2/config/environment.rb +0 -5
- data/test/stub/rails3.2/config/environments/development.rb +0 -37
- data/test/stub/rails3.2/config/environments/production.rb +0 -67
- data/test/stub/rails3.2/config/environments/test.rb +0 -37
- data/test/stub/rails3.2/config/initializers/backtrace_silencers.rb +0 -7
- data/test/stub/rails3.2/config/initializers/inflections.rb +0 -15
- data/test/stub/rails3.2/config/initializers/mime_types.rb +0 -5
- data/test/stub/rails3.2/config/initializers/passenger.rb +0 -2
- data/test/stub/rails3.2/config/initializers/secret_token.rb +0 -7
- data/test/stub/rails3.2/config/initializers/session_store.rb +0 -8
- data/test/stub/rails3.2/config/initializers/wrap_parameters.rb +0 -14
- data/test/stub/rails3.2/config/locales/en.yml +0 -5
- data/test/stub/rails3.2/config/routes.rb +0 -58
- data/test/stub/rails3.2/db/seeds.rb +0 -7
- data/test/stub/rails3.2/doc/README_FOR_APP +0 -2
- data/test/stub/rails3.2/lib/assets/.gitkeep +0 -0
- data/test/stub/rails3.2/lib/tasks/.gitkeep +0 -0
- data/test/stub/rails3.2/log/.gitkeep +0 -0
- data/test/stub/rails3.2/public/404.html +0 -26
- data/test/stub/rails3.2/public/422.html +0 -26
- data/test/stub/rails3.2/public/500.html +0 -25
- data/test/stub/rails3.2/public/favicon.ico +0 -0
- data/test/stub/rails3.2/public/index.html +0 -241
- data/test/stub/rails3.2/public/robots.txt +0 -5
- data/test/stub/rails3.2/script/rails +0 -6
- data/test/stub/rails3.2/test/fixtures/.gitkeep +0 -0
- data/test/stub/rails3.2/test/functional/.gitkeep +0 -0
- data/test/stub/rails3.2/test/integration/.gitkeep +0 -0
- data/test/stub/rails3.2/test/performance/browsing_test.rb +0 -12
- data/test/stub/rails3.2/test/test_helper.rb +0 -13
- data/test/stub/rails3.2/test/unit/.gitkeep +0 -0
- data/test/stub/rails3.2/vendor/assets/stylesheets/.gitkeep +0 -0
- data/test/stub/rails3.2/vendor/plugins/.gitkeep +0 -0
- data/test/stub/rails4.0/.gitignore +0 -16
- data/test/stub/rails4.0/Gemfile +0 -45
- data/test/stub/rails4.0/Gemfile.lock +0 -126
- data/test/stub/rails4.0/README.rdoc +0 -28
- data/test/stub/rails4.0/Rakefile +0 -6
- data/test/stub/rails4.0/app/assets/images/.keep +0 -0
- data/test/stub/rails4.0/app/assets/javascripts/application.js +0 -16
- data/test/stub/rails4.0/app/assets/stylesheets/application.css +0 -13
- data/test/stub/rails4.0/app/controllers/application_controller.rb +0 -5
- data/test/stub/rails4.0/app/controllers/concerns/.keep +0 -0
- data/test/stub/rails4.0/app/helpers/application_helper.rb +0 -2
- data/test/stub/rails4.0/app/mailers/.keep +0 -0
- data/test/stub/rails4.0/app/models/.keep +0 -0
- data/test/stub/rails4.0/app/models/concerns/.keep +0 -0
- data/test/stub/rails4.0/app/views/layouts/application.html.erb +0 -14
- data/test/stub/rails4.0/bin/bundle +0 -3
- data/test/stub/rails4.0/bin/rails +0 -4
- data/test/stub/rails4.0/bin/rake +0 -4
- data/test/stub/rails4.0/config.ru +0 -4
- data/test/stub/rails4.0/config/application.rb +0 -23
- data/test/stub/rails4.0/config/boot.rb +0 -4
- data/test/stub/rails4.0/config/database.yml +0 -25
- data/test/stub/rails4.0/config/environment.rb +0 -5
- data/test/stub/rails4.0/config/environments/development.rb +0 -29
- data/test/stub/rails4.0/config/environments/production.rb +0 -80
- data/test/stub/rails4.0/config/environments/test.rb +0 -36
- data/test/stub/rails4.0/config/initializers/backtrace_silencers.rb +0 -7
- data/test/stub/rails4.0/config/initializers/filter_parameter_logging.rb +0 -4
- data/test/stub/rails4.0/config/initializers/inflections.rb +0 -16
- data/test/stub/rails4.0/config/initializers/mime_types.rb +0 -5
- data/test/stub/rails4.0/config/initializers/passenger.rb +0 -2
- data/test/stub/rails4.0/config/initializers/secret_token.rb +0 -12
- data/test/stub/rails4.0/config/initializers/session_store.rb +0 -3
- data/test/stub/rails4.0/config/initializers/wrap_parameters.rb +0 -14
- data/test/stub/rails4.0/config/locales/en.yml +0 -23
- data/test/stub/rails4.0/config/routes.rb +0 -57
- data/test/stub/rails4.0/db/seeds.rb +0 -7
- data/test/stub/rails4.0/lib/assets/.keep +0 -0
- data/test/stub/rails4.0/lib/tasks/.keep +0 -0
- data/test/stub/rails4.0/log/.keep +0 -0
- data/test/stub/rails4.0/public/404.html +0 -58
- data/test/stub/rails4.0/public/422.html +0 -58
- data/test/stub/rails4.0/public/500.html +0 -57
- data/test/stub/rails4.0/public/favicon.ico +0 -0
- data/test/stub/rails4.0/public/robots.txt +0 -5
- data/test/stub/rails4.0/test/controllers/.keep +0 -0
- data/test/stub/rails4.0/test/fixtures/.keep +0 -0
- data/test/stub/rails4.0/test/helpers/.keep +0 -0
- data/test/stub/rails4.0/test/integration/.keep +0 -0
- data/test/stub/rails4.0/test/mailers/.keep +0 -0
- data/test/stub/rails4.0/test/models/.keep +0 -0
- data/test/stub/rails4.0/test/test_helper.rb +0 -15
- data/test/stub/rails4.0/vendor/assets/javascripts/.keep +0 -0
- data/test/stub/rails4.0/vendor/assets/stylesheets/.keep +0 -0
- data/test/stub/rails4.1/.gitignore +0 -16
- data/test/stub/rails4.1/Gemfile +0 -45
- data/test/stub/rails4.1/Gemfile.lock +0 -129
- data/test/stub/rails4.1/README.rdoc +0 -28
- data/test/stub/rails4.1/Rakefile +0 -6
- data/test/stub/rails4.1/app/assets/images/.keep +0 -0
- data/test/stub/rails4.1/app/assets/javascripts/application.js +0 -16
- data/test/stub/rails4.1/app/assets/stylesheets/application.css +0 -13
- data/test/stub/rails4.1/app/controllers/application_controller.rb +0 -5
- data/test/stub/rails4.1/app/controllers/concerns/.keep +0 -0
- data/test/stub/rails4.1/app/helpers/application_helper.rb +0 -2
- data/test/stub/rails4.1/app/mailers/.keep +0 -0
- data/test/stub/rails4.1/app/models/.keep +0 -0
- data/test/stub/rails4.1/app/models/concerns/.keep +0 -0
- data/test/stub/rails4.1/app/views/layouts/application.html.erb +0 -14
- data/test/stub/rails4.1/bin/bundle +0 -3
- data/test/stub/rails4.1/bin/rails +0 -4
- data/test/stub/rails4.1/bin/rake +0 -4
- data/test/stub/rails4.1/config.ru +0 -4
- data/test/stub/rails4.1/config/application.rb +0 -23
- data/test/stub/rails4.1/config/boot.rb +0 -4
- data/test/stub/rails4.1/config/database.yml +0 -25
- data/test/stub/rails4.1/config/environment.rb +0 -5
- data/test/stub/rails4.1/config/environments/development.rb +0 -29
- data/test/stub/rails4.1/config/environments/production.rb +0 -80
- data/test/stub/rails4.1/config/environments/test.rb +0 -36
- data/test/stub/rails4.1/config/initializers/backtrace_silencers.rb +0 -7
- data/test/stub/rails4.1/config/initializers/filter_parameter_logging.rb +0 -4
- data/test/stub/rails4.1/config/initializers/inflections.rb +0 -16
- data/test/stub/rails4.1/config/initializers/mime_types.rb +0 -5
- data/test/stub/rails4.1/config/initializers/passenger.rb +0 -5
- data/test/stub/rails4.1/config/initializers/secret_token.rb +0 -12
- data/test/stub/rails4.1/config/initializers/session_store.rb +0 -3
- data/test/stub/rails4.1/config/initializers/wrap_parameters.rb +0 -14
- data/test/stub/rails4.1/config/locales/en.yml +0 -23
- data/test/stub/rails4.1/config/routes.rb +0 -57
- data/test/stub/rails4.1/db/seeds.rb +0 -7
- data/test/stub/rails4.1/lib/assets/.keep +0 -0
- data/test/stub/rails4.1/lib/tasks/.keep +0 -0
- data/test/stub/rails4.1/log/.keep +0 -0
- data/test/stub/rails4.1/public/404.html +0 -58
- data/test/stub/rails4.1/public/422.html +0 -58
- data/test/stub/rails4.1/public/500.html +0 -57
- data/test/stub/rails4.1/public/favicon.ico +0 -0
- data/test/stub/rails4.1/public/robots.txt +0 -5
- data/test/stub/rails4.1/test/controllers/.keep +0 -0
- data/test/stub/rails4.1/test/fixtures/.keep +0 -0
- data/test/stub/rails4.1/test/helpers/.keep +0 -0
- data/test/stub/rails4.1/test/integration/.keep +0 -0
- data/test/stub/rails4.1/test/mailers/.keep +0 -0
- data/test/stub/rails4.1/test/models/.keep +0 -0
- data/test/stub/rails4.1/test/test_helper.rb +0 -15
- data/test/stub/rails4.1/vendor/assets/javascripts/.keep +0 -0
- data/test/stub/rails4.1/vendor/assets/stylesheets/.keep +0 -0
- data/test/stub/start_error.pl +0 -24
- data/test/stub/upload_data.txt +0 -494
- data/test/stub/wsgi/passenger_wsgi.py +0 -212
- data/test/stub/wsgi/public/.gitignore +0 -0
- data/test/stub/wsgi/tmp/.gitignore +0 -0
- data/test/support/allocate_memory.c +0 -14
- data/test/support/apache2_controller.rb +0 -258
- data/test/support/multipart.rb +0 -62
- data/test/support/nginx_controller.rb +0 -97
- data/test/support/placebo-preloader.rb +0 -88
- data/test/support/test_helper.rb +0 -455
- data/test/support/valgrind.h +0 -2539
- data/test/tut/tut.h +0 -1310
- data/test/tut/tut_reporter.h +0 -256
- data/test/valgrind-osx.supp +0 -7
@@ -97,12 +97,15 @@ public:
|
|
97
97
|
: errorCallback(NULL)
|
98
98
|
{
|
99
99
|
FileBufferedChannel::setDataCallback(onDataCallback);
|
100
|
+
watcher.active = false;
|
100
101
|
watcher.fd = -1;
|
101
102
|
watcher.data = this;
|
102
103
|
}
|
103
104
|
|
104
105
|
~FileBufferedFdSinkChannel() {
|
105
|
-
|
106
|
+
if (ev_is_active(&watcher)) {
|
107
|
+
ev_io_stop(ctx->libev->getLoop(), &watcher);
|
108
|
+
}
|
106
109
|
}
|
107
110
|
|
108
111
|
// May only be called right after construction.
|
@@ -163,7 +166,9 @@ public:
|
|
163
166
|
}
|
164
167
|
|
165
168
|
void deinitialize() {
|
166
|
-
|
169
|
+
if (ev_is_active(&watcher)) {
|
170
|
+
ev_io_stop(ctx->libev->getLoop(), &watcher);
|
171
|
+
}
|
167
172
|
watcher.fd = -1;
|
168
173
|
FileBufferedChannel::deinitialize();
|
169
174
|
}
|
@@ -980,6 +980,12 @@ protected:
|
|
980
980
|
return false;
|
981
981
|
}
|
982
982
|
|
983
|
+
virtual void reinitializeClient(Client *client, int fd) {
|
984
|
+
ParentClass::reinitializeClient(client, fd);
|
985
|
+
client->requestsBegun = 0;
|
986
|
+
client->currentRequest = NULL;
|
987
|
+
}
|
988
|
+
|
983
989
|
virtual void reinitializeRequest(Client *client, Request *req) {
|
984
990
|
req->httpMajor = 1;
|
985
991
|
req->httpMinor = 0;
|
@@ -1,6 +1,6 @@
|
|
1
1
|
/*
|
2
2
|
* Phusion Passenger - https://www.phusionpassenger.com/
|
3
|
-
* Copyright (c) 2014 Phusion
|
3
|
+
* Copyright (c) 2014-2015 Phusion
|
4
4
|
*
|
5
5
|
* "Phusion Passenger" is a trademark of Hongli Lai & Ninh Bui.
|
6
6
|
*
|
@@ -262,7 +262,7 @@ private:
|
|
262
262
|
break;
|
263
263
|
}
|
264
264
|
|
265
|
-
FdGuard guard(fd);
|
265
|
+
FdGuard guard(fd, NULL, 0);
|
266
266
|
client = checkoutClientObject();
|
267
267
|
TAILQ_INSERT_HEAD(&activeClients, client, nextClient.activeOrDisconnectedClient);
|
268
268
|
acceptedClients[acceptCount] = client;
|
@@ -271,6 +271,8 @@ private:
|
|
271
271
|
totalClientsAccepted++;
|
272
272
|
client->number = getNextClientNumber();
|
273
273
|
reinitializeClient(client, fd);
|
274
|
+
P_LOG_FILE_DESCRIPTOR_PURPOSE(fd, "Server " << getServerName()
|
275
|
+
<< ", client " << getClientName(client));
|
274
276
|
guard.clear();
|
275
277
|
}
|
276
278
|
|
@@ -327,7 +329,7 @@ private:
|
|
327
329
|
int fd = syscalls::accept(serverFd,
|
328
330
|
(struct sockaddr *) &u,
|
329
331
|
&addrlen);
|
330
|
-
FdGuard guard(fd);
|
332
|
+
FdGuard guard(fd, __FILE__, __LINE__);
|
331
333
|
if (fd == -1) {
|
332
334
|
return -1;
|
333
335
|
} else {
|
@@ -782,6 +784,8 @@ public:
|
|
782
784
|
acceptedClients[i] = client;
|
783
785
|
client->number = getNextClientNumber();
|
784
786
|
reinitializeClient(client, fds[i]);
|
787
|
+
P_LOG_FILE_DESCRIPTOR_PURPOSE(fds[i], "Server " << getServerName()
|
788
|
+
<< ", client " << getClientName(client));
|
785
789
|
}
|
786
790
|
|
787
791
|
SKS_DEBUG(size << " new client(s) accepted; there are now " <<
|
@@ -820,6 +824,12 @@ public:
|
|
820
824
|
return ret;
|
821
825
|
}
|
822
826
|
|
827
|
+
string getClientName(const Client *client) {
|
828
|
+
char buf[128];
|
829
|
+
unsigned int size = getClientName(client, buf, sizeof(buf));
|
830
|
+
return string(buf, size);
|
831
|
+
}
|
832
|
+
|
823
833
|
vector<ClientRefType> getActiveClients() {
|
824
834
|
vector<ClientRefType> result;
|
825
835
|
Client *client;
|
@@ -843,6 +853,22 @@ public:
|
|
843
853
|
return NULL;
|
844
854
|
}
|
845
855
|
|
856
|
+
Client *lookupClient(const StaticString &clientName) {
|
857
|
+
Client *client;
|
858
|
+
|
859
|
+
TAILQ_FOREACH (client, &activeClients, nextClient.activeOrDisconnectedClient) {
|
860
|
+
P_ASSERT_EQ(client->getConnState(), Client::ACTIVE);
|
861
|
+
char buf[512];
|
862
|
+
unsigned int size;
|
863
|
+
|
864
|
+
size = getClientName(client, buf, sizeof(buf));
|
865
|
+
if (StaticString(buf, size) == clientName) {
|
866
|
+
return client;
|
867
|
+
}
|
868
|
+
}
|
869
|
+
return NULL;
|
870
|
+
}
|
871
|
+
|
846
872
|
bool disconnect(int fd) {
|
847
873
|
assert(serverState != FINISHED_SHUTDOWN);
|
848
874
|
Client *client = lookupClient(fd);
|
@@ -853,6 +879,16 @@ public:
|
|
853
879
|
}
|
854
880
|
}
|
855
881
|
|
882
|
+
bool disconnect(const StaticString &clientName) {
|
883
|
+
assert(serverState != FINISHED_SHUTDOWN);
|
884
|
+
Client *client = lookupClient(clientName);
|
885
|
+
if (client != NULL) {
|
886
|
+
return disconnect(&client);
|
887
|
+
} else {
|
888
|
+
return false;
|
889
|
+
}
|
890
|
+
}
|
891
|
+
|
856
892
|
bool disconnect(Client **client) {
|
857
893
|
Client *c = *client;
|
858
894
|
if (c->getConnState() != Client::ACTIVE) {
|
@@ -874,6 +910,7 @@ public:
|
|
874
910
|
SKC_TRACE(c, 2, "Closing client file descriptor: " << fdnum);
|
875
911
|
try {
|
876
912
|
safelyClose(fdnum);
|
913
|
+
P_LOG_FILE_DESCRIPTOR_CLOSE(fdnum);
|
877
914
|
} catch (const SystemException &e) {
|
878
915
|
SKC_WARN(c, "An error occurred while closing the client file descriptor: " <<
|
879
916
|
e.what() << " (errno=" << e.code() << ")");
|
data/ext/common/StaticString.h
CHANGED
@@ -216,6 +216,26 @@ public:
|
|
216
216
|
return find(StaticString(s, n), pos);
|
217
217
|
}
|
218
218
|
|
219
|
+
string::size_type find_first_of(const StaticString &str, size_t pos = 0) const {
|
220
|
+
const char *current = content + pos;
|
221
|
+
const char *end = content + len;
|
222
|
+
const char *tokens = str.data();
|
223
|
+
const char *tokensEnd = str.data() + str.size();
|
224
|
+
|
225
|
+
while (current < end) {
|
226
|
+
const char *currentToken = tokens;
|
227
|
+
while (currentToken < tokensEnd) {
|
228
|
+
if (*current == *currentToken) {
|
229
|
+
return current - content;
|
230
|
+
}
|
231
|
+
currentToken++;
|
232
|
+
}
|
233
|
+
current++;
|
234
|
+
}
|
235
|
+
|
236
|
+
return string::npos;
|
237
|
+
}
|
238
|
+
|
219
239
|
StaticString substr(string::size_type pos = 0, string::size_type n = string::npos) const {
|
220
240
|
if (pos > len) {
|
221
241
|
throw out_of_range("Argument 'pos' out of range");
|
@@ -1,6 +1,6 @@
|
|
1
1
|
/*
|
2
2
|
* Phusion Passenger - https://www.phusionpassenger.com/
|
3
|
-
* Copyright (c) 2010-
|
3
|
+
* Copyright (c) 2010-2015 Phusion
|
4
4
|
*
|
5
5
|
* "Phusion Passenger" is a trademark of Hongli Lai & Ninh Bui.
|
6
6
|
*
|
@@ -36,6 +36,7 @@
|
|
36
36
|
|
37
37
|
#include <errno.h>
|
38
38
|
|
39
|
+
#include <Logging.h>
|
39
40
|
#include <Exceptions.h>
|
40
41
|
#include <Utils/IOUtils.h>
|
41
42
|
#include <Utils/MessageIO.h>
|
@@ -164,6 +165,7 @@ struct Connection: public boost::noncopyable {
|
|
164
165
|
this_thread::disable_interruption di;
|
165
166
|
this_thread::disable_syscall_interruption dsi;
|
166
167
|
safelyClose(fd);
|
168
|
+
P_LOG_FILE_DESCRIPTOR_CLOSE(fd);
|
167
169
|
fd = -1;
|
168
170
|
}
|
169
171
|
}
|
@@ -1,6 +1,6 @@
|
|
1
1
|
/*
|
2
2
|
* Phusion Passenger - https://www.phusionpassenger.com/
|
3
|
-
* Copyright (c) 2010-
|
3
|
+
* Copyright (c) 2010-2015 Phusion
|
4
4
|
*
|
5
5
|
* "Phusion Passenger" is a trademark of Hongli Lai & Ninh Bui.
|
6
6
|
*
|
@@ -142,9 +142,11 @@ private:
|
|
142
142
|
unsigned long long timeout = 15000000;
|
143
143
|
|
144
144
|
// Create socket.
|
145
|
-
fd = connectToServer(serverAddress);
|
146
|
-
FdGuard guard(fd, true);
|
147
|
-
|
145
|
+
fd = connectToServer(serverAddress, __FILE__, __LINE__);
|
146
|
+
FdGuard guard(fd, NULL, 0, true);
|
147
|
+
|
148
|
+
P_LOG_FILE_DESCRIPTOR_PURPOSE(fd, "Connection to " AGENT_EXE " logger");
|
149
|
+
|
148
150
|
// Handshake: process protocol version number.
|
149
151
|
if (!readArrayMessage(fd, args, &timeout)) {
|
150
152
|
throw IOException("The logging agent closed the connection before sending a version identifier.");
|
data/ext/common/Utils.cpp
CHANGED
@@ -1,6 +1,6 @@
|
|
1
1
|
/*
|
2
2
|
* Phusion Passenger - https://www.phusionpassenger.com/
|
3
|
-
* Copyright (c) 2010-
|
3
|
+
* Copyright (c) 2010-2015 Phusion
|
4
4
|
*
|
5
5
|
* "Phusion Passenger" is a trademark of Hongli Lai & Ninh Bui.
|
6
6
|
*
|
@@ -165,7 +165,8 @@ createFile(const string &filename, const StaticString &contents, mode_t permissi
|
|
165
165
|
options |= O_EXCL;
|
166
166
|
}
|
167
167
|
do {
|
168
|
-
fd
|
168
|
+
fd.assign(open(filename.c_str(), options, permissions),
|
169
|
+
__FILE__, __LINE__);
|
169
170
|
} while (fd == -1 && errno == EINTR);
|
170
171
|
if (fd != -1) {
|
171
172
|
FileGuard guard(filename);
|
@@ -1036,7 +1037,7 @@ runCommandAndCaptureOutput(const char **command) {
|
|
1036
1037
|
int e;
|
1037
1038
|
Pipe p;
|
1038
1039
|
|
1039
|
-
p = createPipe();
|
1040
|
+
p = createPipe(__FILE__, __LINE__);
|
1040
1041
|
|
1041
1042
|
this_thread::disable_syscall_interruption dsi;
|
1042
1043
|
pid = syscalls::fork();
|
@@ -49,7 +49,7 @@ inline bool parseImfFixdate_zone(const char **pos, const char *end, int &zone);
|
|
49
49
|
|
50
50
|
|
51
51
|
/**
|
52
|
-
* Parses an IMF-fixdate, as defined by RFC 5322.
|
52
|
+
* Parses an IMF-fixdate, as defined by RFC 7231 (while referencing RFC 5322).
|
53
53
|
* Returns whether parsing succeeded.
|
54
54
|
*/
|
55
55
|
inline bool
|
@@ -79,10 +79,24 @@ parseImfFixdate(const char *date, const char *end, struct tm &tm, int &zone) {
|
|
79
79
|
*/
|
80
80
|
inline time_t
|
81
81
|
parsedDateToTimestamp(struct tm &tm, int zone) {
|
82
|
-
time_t
|
83
|
-
|
84
|
-
|
85
|
-
|
82
|
+
time_t timeUsingLocalTZ = mktime(&tm);
|
83
|
+
// tmUsingLocalTZ now contains tm interpreted as being in our local timezone instead of the intended UTC
|
84
|
+
// Example: 10 UTC interpreted as 10 GMT+1 instead of 11 GMT+1
|
85
|
+
|
86
|
+
#if !defined(sun) && !defined(__sun)
|
87
|
+
// tm_gmtoff = "seconds east of UTC", so the example 10 GMT+1 would now be corrected to (10+1) GMT+1
|
88
|
+
timeUsingLocalTZ += tm.tm_gmtoff;
|
89
|
+
#else
|
90
|
+
// Solaris doesn't have tm_gmtoff, so we calculate the current offset by converting to UTC (gmtime) and pretending
|
91
|
+
// that is local time again (mktime), resulting in a "corrected" timestamp that we can delta with the original timestamp.
|
92
|
+
// In the example: gmtime(10 GMT+1) = 9 UTC, interpreted as 9 GMT+1 gives use delta (10 - 9) = +1 to correct 10 GMT+1 with.
|
93
|
+
struct tm *tmAsUTC = gmtime(&timeUsingLocalTZ);
|
94
|
+
time_t utcUsingLocalTZ = mktime(tmAsUTC);
|
95
|
+
timeUsingLocalTZ += (timeUsingLocalTZ - utcUsingLocalTZ);
|
96
|
+
#endif
|
97
|
+
|
98
|
+
// The final result also needs to take into account the desired zone.
|
99
|
+
return timeUsingLocalTZ - (zone / 100 * 60 * 60 + zone % 100 * 60);
|
86
100
|
}
|
87
101
|
|
88
102
|
inline void
|
@@ -0,0 +1,183 @@
|
|
1
|
+
/*
|
2
|
+
* Phusion Passenger - https://www.phusionpassenger.com/
|
3
|
+
* Copyright (c) 2015 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_FAST_STRING_STREAM_H_
|
26
|
+
#define _PASSENGER_FAST_STRING_STREAM_H_
|
27
|
+
|
28
|
+
#include <ostream>
|
29
|
+
#include <sstream>
|
30
|
+
#include <string>
|
31
|
+
#include <new>
|
32
|
+
#include <cstdlib>
|
33
|
+
#include <boost/cstdint.hpp>
|
34
|
+
#include <boost/static_assert.hpp>
|
35
|
+
#include <oxt/macros.hpp>
|
36
|
+
|
37
|
+
namespace Passenger {
|
38
|
+
|
39
|
+
using namespace std;
|
40
|
+
|
41
|
+
|
42
|
+
/**
|
43
|
+
* An std::streambuf-compatible string buffer. It's similar to std::stringbuf,
|
44
|
+
* with a few optimizations:
|
45
|
+
*
|
46
|
+
* - It uses an in-place storage area as long as the amount of data written
|
47
|
+
* fits inside.
|
48
|
+
* - It allows direct read-only access to the storage area, in order to avoid
|
49
|
+
* copying data.
|
50
|
+
*/
|
51
|
+
template<size_t staticCapacity = 1024>
|
52
|
+
class FastStdStringBuf: public streambuf {
|
53
|
+
public:
|
54
|
+
typedef char char_type;
|
55
|
+
typedef char_traits<char> traits_type;
|
56
|
+
typedef traits_type::int_type int_type;
|
57
|
+
typedef traits_type::pos_type pos_type;
|
58
|
+
typedef traits_type::off_type off_type;
|
59
|
+
typedef string string_type;
|
60
|
+
|
61
|
+
// Ensures that power-of-two doubling of staticCapacity works.
|
62
|
+
BOOST_STATIC_ASSERT(staticCapacity >= 4);
|
63
|
+
|
64
|
+
private:
|
65
|
+
mutable char_type *bufend;
|
66
|
+
size_t dynamicCapacity;
|
67
|
+
union {
|
68
|
+
char staticBuffer[staticCapacity];
|
69
|
+
char *dynamicBuffer;
|
70
|
+
} u;
|
71
|
+
|
72
|
+
bool usingStaticBuffer() const {
|
73
|
+
return dynamicCapacity == 0;
|
74
|
+
}
|
75
|
+
|
76
|
+
boost::uint32_t nextPowerOf2(boost::uint32_t v) const {
|
77
|
+
v--;
|
78
|
+
v |= v >> 1;
|
79
|
+
v |= v >> 2;
|
80
|
+
v |= v >> 4;
|
81
|
+
v |= v >> 8;
|
82
|
+
v |= v >> 16;
|
83
|
+
v++;
|
84
|
+
return v;
|
85
|
+
}
|
86
|
+
|
87
|
+
protected:
|
88
|
+
virtual int_type overflow(int_type ch = traits_type::eof()) {
|
89
|
+
size_t oldSize = size();
|
90
|
+
size_t newDynamicCapacity;
|
91
|
+
char *newDynamicBuffer;
|
92
|
+
|
93
|
+
if (usingStaticBuffer()) {
|
94
|
+
newDynamicCapacity = nextPowerOf2(2 * staticCapacity);
|
95
|
+
newDynamicBuffer = (char *) malloc(newDynamicCapacity);
|
96
|
+
if (OXT_UNLIKELY(newDynamicBuffer == NULL)) {
|
97
|
+
return traits_type::eof();
|
98
|
+
}
|
99
|
+
memcpy(newDynamicBuffer, u.staticBuffer, oldSize);
|
100
|
+
} else {
|
101
|
+
newDynamicCapacity = 2 * dynamicCapacity;
|
102
|
+
newDynamicBuffer = (char *) realloc(u.dynamicBuffer, newDynamicCapacity);
|
103
|
+
if (OXT_UNLIKELY(newDynamicBuffer == NULL)) {
|
104
|
+
return traits_type::eof();
|
105
|
+
}
|
106
|
+
}
|
107
|
+
|
108
|
+
dynamicCapacity = newDynamicCapacity;
|
109
|
+
u.dynamicBuffer = newDynamicBuffer;
|
110
|
+
setp(u.dynamicBuffer, u.dynamicBuffer + dynamicCapacity);
|
111
|
+
|
112
|
+
if (traits_type::eq_int_type(ch, traits_type::eof())) {
|
113
|
+
pbump(oldSize);
|
114
|
+
} else {
|
115
|
+
u.dynamicBuffer[oldSize] = ch;
|
116
|
+
pbump(oldSize + 1);
|
117
|
+
}
|
118
|
+
|
119
|
+
return traits_type::not_eof(ch);
|
120
|
+
}
|
121
|
+
|
122
|
+
public:
|
123
|
+
FastStdStringBuf(unsigned int initialCapacity = 0) {
|
124
|
+
if (initialCapacity <= staticCapacity) {
|
125
|
+
dynamicCapacity = 0;
|
126
|
+
setp(u.staticBuffer, u.staticBuffer + staticCapacity);
|
127
|
+
} else {
|
128
|
+
dynamicCapacity = nextPowerOf2(initialCapacity);
|
129
|
+
u.dynamicBuffer = (char *) malloc(dynamicCapacity);
|
130
|
+
if (u.dynamicBuffer == NULL) {
|
131
|
+
throw std::bad_alloc();
|
132
|
+
}
|
133
|
+
setp(u.dynamicBuffer, u.dynamicBuffer + dynamicCapacity);
|
134
|
+
}
|
135
|
+
}
|
136
|
+
|
137
|
+
~FastStdStringBuf() {
|
138
|
+
if (!usingStaticBuffer()) {
|
139
|
+
free(u.dynamicBuffer);
|
140
|
+
}
|
141
|
+
}
|
142
|
+
|
143
|
+
const char *data() const {
|
144
|
+
return pbase();
|
145
|
+
}
|
146
|
+
|
147
|
+
size_t size() const {
|
148
|
+
return pptr() - pbase();
|
149
|
+
}
|
150
|
+
|
151
|
+
size_t capacity() const {
|
152
|
+
if (usingStaticBuffer()) {
|
153
|
+
return staticCapacity;
|
154
|
+
} else {
|
155
|
+
return dynamicCapacity;
|
156
|
+
}
|
157
|
+
}
|
158
|
+
};
|
159
|
+
|
160
|
+
/**
|
161
|
+
* An std::ostream-compatible output stream. It's similar to std::stringstream,
|
162
|
+
* with a few optimizations:
|
163
|
+
*
|
164
|
+
* - It uses an in-place storage area as long as the amount of data written
|
165
|
+
* fits inside.
|
166
|
+
* - It allows direct read-only access to the storage area, in order to avoid
|
167
|
+
* copying data.
|
168
|
+
*
|
169
|
+
* This class is implemented using FastStdStringBuf.
|
170
|
+
*/
|
171
|
+
template<size_t staticCapacity = 1024>
|
172
|
+
class FastStringStream: public FastStdStringBuf<staticCapacity>, public ostream {
|
173
|
+
public:
|
174
|
+
FastStringStream(unsigned int initialCapacity = 0)
|
175
|
+
: FastStdStringBuf<staticCapacity>(initialCapacity),
|
176
|
+
ostream(this)
|
177
|
+
{ }
|
178
|
+
};
|
179
|
+
|
180
|
+
|
181
|
+
} // namespace Passenger
|
182
|
+
|
183
|
+
#endif /* _PASSENGER_FAST_STRING_STREAM_H_ */
|