passenger 5.0.4 → 5.0.5
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.
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
@@ -1,36 +0,0 @@
|
|
1
|
-
#!/bin/sh
|
2
|
-
|
3
|
-
set -e
|
4
|
-
|
5
|
-
#DEBHELPER#
|
6
|
-
|
7
|
-
if [ "$1" != "configure" ]; then
|
8
|
-
exit 0
|
9
|
-
fi
|
10
|
-
|
11
|
-
reload_apache()
|
12
|
-
{
|
13
|
-
if apache2ctl configtest 2>/dev/null; then
|
14
|
-
invoke-rc.d apache2 force-reload || true
|
15
|
-
else
|
16
|
-
echo "Your apache2 configuration is broken, so we're not restarting it for you."
|
17
|
-
fi
|
18
|
-
}
|
19
|
-
|
20
|
-
if [ -n "$2" ]; then
|
21
|
-
# we're upgrading. test if we're enabled, and if so, restart to reload the module.
|
22
|
-
if [ -e /etc/apache2/mods-enabled/passenger.load ]; then
|
23
|
-
reload_apache
|
24
|
-
fi
|
25
|
-
exit 0
|
26
|
-
fi
|
27
|
-
|
28
|
-
if [ -e /etc/apache2/apache2.conf ]; then
|
29
|
-
# Enable the module, but hide a2enmod's misleading message about apachectl
|
30
|
-
# and force-reload the thing ourselves.
|
31
|
-
a2enmod passenger >/dev/null || true
|
32
|
-
reload_apache
|
33
|
-
fi
|
34
|
-
|
35
|
-
exit 0
|
36
|
-
|
@@ -1,14 +0,0 @@
|
|
1
|
-
[locations]
|
2
|
-
packaging_method=deb
|
3
|
-
bin_dir=/usr/bin
|
4
|
-
support_binaries_dir=/usr/lib/<%= PhusionPassenger::GLOBAL_NAMESPACE_DIRNAME %>/support-binaries
|
5
|
-
lib_dir=/usr/lib/<%= PhusionPassenger::GLOBAL_NAMESPACE_DIRNAME %>
|
6
|
-
helper_scripts_dir=/usr/share/<%= PhusionPassenger::GLOBAL_NAMESPACE_DIRNAME %>/helper-scripts
|
7
|
-
resources_dir=/usr/share/<%= PhusionPassenger::GLOBAL_NAMESPACE_DIRNAME %>
|
8
|
-
include_dir=/usr/share/<%= PhusionPassenger::GLOBAL_NAMESPACE_DIRNAME %>/include
|
9
|
-
doc_dir=/usr/share/doc/passenger
|
10
|
-
ruby_libdir=/usr/lib/ruby/vendor_ruby
|
11
|
-
node_libdir=/usr/share/<%= PhusionPassenger::GLOBAL_NAMESPACE_DIRNAME %>/node
|
12
|
-
apache2_module_path=/usr/lib/apache2/modules/mod_passenger.so
|
13
|
-
ruby_extension_source_dir=/usr/share/<%= PhusionPassenger::GLOBAL_NAMESPACE_DIRNAME %>/ruby_extension_source
|
14
|
-
nginx_module_source_dir=/usr/share/<%= PhusionPassenger::GLOBAL_NAMESPACE_DIRNAME %>/ngx_http_passenger_module
|
@@ -1,6 +0,0 @@
|
|
1
|
-
### Begin automatically installed Phusion Passenger config snippet ###
|
2
|
-
<IfModule mod_passenger.c>
|
3
|
-
PassengerRoot /usr/lib/ruby/vendor_ruby/phusion_passenger/locations.ini
|
4
|
-
PassengerDefaultRuby /usr/bin/ruby
|
5
|
-
</IfModule>
|
6
|
-
### End automatically installed Phusion Passenger config snippet ###
|
@@ -1,14 +0,0 @@
|
|
1
|
-
usr/lib/<%= PhusionPassenger::GLOBAL_NAMESPACE_DIRNAME %>/support-binaries/
|
2
|
-
nginx-<%= PhusionPassenger::PREFERRED_NGINX_VERSION %>/objs/nginx-<%= PhusionPassenger::PREFERRED_NGINX_VERSION %> usr/lib/<%= PhusionPassenger::GLOBAL_NAMESPACE_DIRNAME %>/support-binaries/
|
3
|
-
usr/share/<%= PhusionPassenger::GLOBAL_NAMESPACE_DIRNAME %>/helper-scripts/
|
4
|
-
usr/share/<%= PhusionPassenger::GLOBAL_NAMESPACE_DIRNAME %>/templates/
|
5
|
-
usr/share/<%= PhusionPassenger::GLOBAL_NAMESPACE_DIRNAME %>/standalone_default_root/
|
6
|
-
usr/share/<%= PhusionPassenger::GLOBAL_NAMESPACE_DIRNAME %>/ruby_extension_source/
|
7
|
-
usr/share/<%= PhusionPassenger::GLOBAL_NAMESPACE_DIRNAME %>/node/
|
8
|
-
usr/share/<%= PhusionPassenger::GLOBAL_NAMESPACE_DIRNAME %>/*.types
|
9
|
-
usr/share/<%= PhusionPassenger::GLOBAL_NAMESPACE_DIRNAME %>/*.crt
|
10
|
-
usr/share/<%= PhusionPassenger::GLOBAL_NAMESPACE_DIRNAME %>/*.txt
|
11
|
-
usr/lib/ruby/
|
12
|
-
debian/locations.ini usr/lib/ruby/vendor_ruby/phusion_passenger/
|
13
|
-
usr/sbin/
|
14
|
-
usr/bin/
|
File without changes
|
data/debian.template/rules.erb
DELETED
@@ -1,76 +0,0 @@
|
|
1
|
-
#!/usr/bin/make -f
|
2
|
-
# export DH_VERBOSE=1
|
3
|
-
|
4
|
-
<% if is_distribution?('>= precise') || is_distribution?('>= wheezy') -%>
|
5
|
-
export USE_VENDORED_LIBEV=false
|
6
|
-
<% end %>
|
7
|
-
|
8
|
-
<% if ['1', 'true', 'on', 'yes'].include?(ENV['USE_CCACHE']) -%>
|
9
|
-
export USE_CCACHE=1
|
10
|
-
NGINX_CONFIGURE_OPTIONS = CC=/usr/lib/ccache/cc CXX=/usr/lib/ccache/c++
|
11
|
-
<% else -%>
|
12
|
-
NGINX_CONFIGURE_OPTIONS =
|
13
|
-
<% end -%>
|
14
|
-
|
15
|
-
# Speed up ccache (reduce I/O) by lightly compressing things.
|
16
|
-
# Always set these variables because pbuilder uses ccache transparently.
|
17
|
-
CCACHE_COMPRESS=1
|
18
|
-
export CCACHE_COMPRESS
|
19
|
-
CCACHE_COMPRESS_LEVEL=3
|
20
|
-
export CCACHE_COMPRESS_LEVEL
|
21
|
-
|
22
|
-
%:
|
23
|
-
dh $@
|
24
|
-
|
25
|
-
override_dh_auto_configure:
|
26
|
-
# Do nothing
|
27
|
-
|
28
|
-
override_dh_auto_build:
|
29
|
-
<% if is_distribution?("<= saucy") || is_distribution?("<= wheezy") -%>
|
30
|
-
/usr/bin/ruby1.8 /usr/bin/rake fakeroot
|
31
|
-
mv pkg/fakeroot pkg/fakeroot1.8
|
32
|
-
/usr/bin/ruby1.9.1 /usr/bin/rake fakeroot
|
33
|
-
mv pkg/fakeroot pkg/fakeroot1.9.1
|
34
|
-
<% else -%>
|
35
|
-
/usr/bin/ruby1.9.1 /usr/bin/rake fakeroot
|
36
|
-
mv pkg/fakeroot pkg/fakeroot1.9.1
|
37
|
-
/usr/bin/ruby2.0 /usr/bin/rake fakeroot
|
38
|
-
mv pkg/fakeroot pkg/fakeroot2.0
|
39
|
-
<% end -%>
|
40
|
-
cd nginx-<%= PhusionPassenger::PREFERRED_NGINX_VERSION %> && \
|
41
|
-
env $(NGINX_CONFIGURE_OPTIONS) ./configure --prefix=/tmp \
|
42
|
-
<%= PhusionPassenger::STANDALONE_NGINX_CONFIGURE_OPTIONS %> \
|
43
|
-
--add-module=`pwd`/../ext/nginx && \
|
44
|
-
make && \
|
45
|
-
mv objs/nginx objs/nginx-<%= PhusionPassenger::PREFERRED_NGINX_VERSION %>
|
46
|
-
|
47
|
-
override_dh_auto_install:
|
48
|
-
mkdir debian/tmp/
|
49
|
-
# Merge Ruby 1.8, 1.9 and 2.0 files into a single directory.
|
50
|
-
<% if is_distribution?("<= saucy") || is_distribution?("<= wheezy") -%>
|
51
|
-
cp -a pkg/fakeroot1.8/* debian/tmp/
|
52
|
-
cp -a pkg/fakeroot1.9.1/* debian/tmp/
|
53
|
-
<% else -%>
|
54
|
-
cp -a pkg/fakeroot1.9.1/* debian/tmp/
|
55
|
-
cp -a pkg/fakeroot2.0/* debian/tmp/
|
56
|
-
<% end -%>
|
57
|
-
./dev/install_scripts_bootstrap_code.rb --ruby /usr/lib/ruby/vendor_ruby debian/tmp/usr/bin/* debian/tmp/usr/sbin/*
|
58
|
-
./dev/install_scripts_bootstrap_code.rb --nginx-module-config /usr/bin debian/tmp/usr/share/<%= PhusionPassenger::GLOBAL_NAMESPACE_DIRNAME %>/ngx_http_passenger_module/config
|
59
|
-
touch debian/tmp/usr/share/<%= PhusionPassenger::GLOBAL_NAMESPACE_DIRNAME %>/release.txt
|
60
|
-
|
61
|
-
override_dh_auto_clean:
|
62
|
-
/usr/bin/rake clean CLEAN_DOCS=false
|
63
|
-
rm -rf pkg/fakeroot1.8
|
64
|
-
rm -rf pkg/fakeroot1.9.1
|
65
|
-
rm -rf pkg/fakeroot2.0
|
66
|
-
cd nginx-<%= PhusionPassenger::PREFERRED_NGINX_VERSION %> && if test -f Makefile; then make clean; fi
|
67
|
-
# Hack to prevent HTML files from being renegerated
|
68
|
-
touch doc/*.html
|
69
|
-
|
70
|
-
# Because we include Ruby extensions, the Debian package depends on libruby.
|
71
|
-
# Since Phusion Passenger works fine without the Ruby extensions, we don't want
|
72
|
-
# to depend on libruby.
|
73
|
-
# https://github.com/phusion/passenger_apt_automation/issues/3
|
74
|
-
override_dh_shlibdeps:
|
75
|
-
dh_shlibdeps
|
76
|
-
sed -i -E 's/libruby.*?, //g' debian/*.substvars
|
@@ -1 +0,0 @@
|
|
1
|
-
3.0 (quilt)
|
@@ -1,458 +0,0 @@
|
|
1
|
-
/*
|
2
|
-
* Phusion Passenger - https://www.phusionpassenger.com/
|
3
|
-
* Copyright (c) 2011, 2012 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 _EVENTED_BUFFERED_INPUT_H_
|
26
|
-
#define _EVENTED_BUFFERED_INPUT_H_
|
27
|
-
|
28
|
-
#include <cstdio>
|
29
|
-
#include <cstddef>
|
30
|
-
#include <cassert>
|
31
|
-
|
32
|
-
#include <sstream>
|
33
|
-
#include <string>
|
34
|
-
|
35
|
-
#include <boost/bind.hpp>
|
36
|
-
#include <boost/enable_shared_from_this.hpp>
|
37
|
-
#include <boost/shared_ptr.hpp>
|
38
|
-
#include <boost/enable_shared_from_this.hpp>
|
39
|
-
#include <oxt/system_calls.hpp>
|
40
|
-
#include <ev++.h>
|
41
|
-
|
42
|
-
#include <SafeLibev.h>
|
43
|
-
#include <FileDescriptor.h>
|
44
|
-
#include <StaticString.h>
|
45
|
-
#include <Logging.h>
|
46
|
-
#include <Utils/StrIntUtils.h>
|
47
|
-
|
48
|
-
namespace Passenger {
|
49
|
-
|
50
|
-
using namespace boost;
|
51
|
-
using namespace oxt;
|
52
|
-
|
53
|
-
#define EBI_TRACE(expr) P_TRACE(3, "[EventedBufferedInput " << this << " " << inspect() << "] " << expr)
|
54
|
-
|
55
|
-
/**
|
56
|
-
* Provides input buffering services for non-blocking sockets in evented I/O systems.
|
57
|
-
*
|
58
|
-
* Wrap an EventedBufferedInput around a socket and provide a data handler callback.
|
59
|
-
* The handler is called every time there is incoming socket data. The handler must return
|
60
|
-
* the number of bytes that it has actually consumed. If not everything has been
|
61
|
-
* consumed, then the handler will be called with the remaining data in the next
|
62
|
-
* tick.
|
63
|
-
*/
|
64
|
-
template<size_t bufferSize = 1024 * 8>
|
65
|
-
class EventedBufferedInput: public boost::enable_shared_from_this< EventedBufferedInput<bufferSize> > {
|
66
|
-
private:
|
67
|
-
enum State {
|
68
|
-
LIVE,
|
69
|
-
/**
|
70
|
-
* @invariant
|
71
|
-
* paused
|
72
|
-
* socketPaused
|
73
|
-
*/
|
74
|
-
END_OF_STREAM,
|
75
|
-
/**
|
76
|
-
* @invariant
|
77
|
-
* paused
|
78
|
-
* socketPaused
|
79
|
-
*/
|
80
|
-
READ_ERROR,
|
81
|
-
CLOSED
|
82
|
-
};
|
83
|
-
|
84
|
-
SafeLibev *libev;
|
85
|
-
FileDescriptor fd;
|
86
|
-
ev::io watcher;
|
87
|
-
StaticString buffer;
|
88
|
-
|
89
|
-
State state: 2;
|
90
|
-
/**
|
91
|
-
* Whether this EventedBufferedInput is paused (not started). If it's
|
92
|
-
* paused it should not emit data events.
|
93
|
-
*
|
94
|
-
* @invariant
|
95
|
-
* if paused:
|
96
|
-
* socketPaused
|
97
|
-
*/
|
98
|
-
bool paused: 1;
|
99
|
-
/**
|
100
|
-
* Whether the underlying socket is also paused. This does not
|
101
|
-
* necessarily mean the EventedBufferedInput is also paused because
|
102
|
-
* it may be emitting data events from its internal buffer.
|
103
|
-
*/
|
104
|
-
bool socketPaused: 1;
|
105
|
-
/**
|
106
|
-
* Whether the code is inside a processingBuffer() call.
|
107
|
-
*/
|
108
|
-
bool processingBuffer: 1;
|
109
|
-
/**
|
110
|
-
* Whether processBuffer() is scheduled to be called in the next
|
111
|
-
* event loop iteration.
|
112
|
-
*/
|
113
|
-
bool nextTickInstalled: 1;
|
114
|
-
/**
|
115
|
-
* Increment this number to ensure that previously scheduled
|
116
|
-
* processBuffer() calls will do nothing, effectively canceling
|
117
|
-
* its scheduled calls.
|
118
|
-
*/
|
119
|
-
unsigned int generation;
|
120
|
-
int error;
|
121
|
-
|
122
|
-
char bufferData[bufferSize];
|
123
|
-
|
124
|
-
void verifyInvariants() {
|
125
|
-
// !a || b: logical equivalent of a IMPLIES b.
|
126
|
-
|
127
|
-
assert(!( state == END_OF_STREAM ) || ( paused ));
|
128
|
-
assert(!( state == END_OF_STREAM ) || ( socketPaused ));
|
129
|
-
|
130
|
-
assert(!( state == READ_ERROR ) || ( paused ));
|
131
|
-
assert(!( state == READ_ERROR ) || ( socketPaused ));
|
132
|
-
|
133
|
-
assert(!( paused ) || ( socketPaused ));
|
134
|
-
}
|
135
|
-
|
136
|
-
void resetCallbackFields() {
|
137
|
-
onData = NULL;
|
138
|
-
onError = NULL;
|
139
|
-
userData = NULL;
|
140
|
-
}
|
141
|
-
|
142
|
-
void onReadable(ev::io &watcher, int revents) {
|
143
|
-
// Keep 'this' alive until function exit.
|
144
|
-
boost::shared_ptr< EventedBufferedInput<bufferSize> > self = EventedBufferedInput<bufferSize>::shared_from_this();
|
145
|
-
|
146
|
-
EBI_TRACE("onReadable");
|
147
|
-
verifyInvariants();
|
148
|
-
assert(!nextTickInstalled);
|
149
|
-
|
150
|
-
ssize_t ret = readSocket(bufferData, bufferSize);
|
151
|
-
if (ret == -1) {
|
152
|
-
if (errno != EAGAIN) {
|
153
|
-
error = errno;
|
154
|
-
EBI_TRACE("read error " << error << " (" << strerror(error) << ")");
|
155
|
-
assert(state == LIVE);
|
156
|
-
assert(!socketPaused);
|
157
|
-
assert(buffer.empty());
|
158
|
-
assert(!paused);
|
159
|
-
|
160
|
-
watcher.stop();
|
161
|
-
state = READ_ERROR;
|
162
|
-
paused = true;
|
163
|
-
socketPaused = true;
|
164
|
-
verifyInvariants();
|
165
|
-
if (onError != NULL) {
|
166
|
-
onError(self, "Cannot read from socket", error);
|
167
|
-
verifyInvariants();
|
168
|
-
}
|
169
|
-
}
|
170
|
-
|
171
|
-
} else if (ret == 0) {
|
172
|
-
EBI_TRACE("end of stream");
|
173
|
-
assert(state == LIVE);
|
174
|
-
assert(!socketPaused);
|
175
|
-
assert(buffer.empty());
|
176
|
-
assert(!paused);
|
177
|
-
|
178
|
-
watcher.stop();
|
179
|
-
state = END_OF_STREAM;
|
180
|
-
paused = true;
|
181
|
-
socketPaused = true;
|
182
|
-
verifyInvariants();
|
183
|
-
onData(self, StaticString());
|
184
|
-
verifyInvariants();
|
185
|
-
|
186
|
-
} else {
|
187
|
-
EBI_TRACE("read " << ret << " bytes");
|
188
|
-
assert(state == LIVE);
|
189
|
-
assert(!socketPaused);
|
190
|
-
assert(buffer.empty());
|
191
|
-
assert(!paused);
|
192
|
-
|
193
|
-
buffer = StaticString(bufferData, ret);
|
194
|
-
processBuffer();
|
195
|
-
verifyInvariants();
|
196
|
-
}
|
197
|
-
}
|
198
|
-
|
199
|
-
void processBufferInNextTick() {
|
200
|
-
if (!nextTickInstalled) {
|
201
|
-
nextTickInstalled = true;
|
202
|
-
libev->runLater(boost::bind(
|
203
|
-
realProcessBufferInNextTick,
|
204
|
-
boost::weak_ptr< EventedBufferedInput<bufferSize> >(this->shared_from_this()),
|
205
|
-
generation
|
206
|
-
));
|
207
|
-
}
|
208
|
-
}
|
209
|
-
|
210
|
-
static void realProcessBufferInNextTick(boost::weak_ptr< EventedBufferedInput<bufferSize> > wself,
|
211
|
-
unsigned int generation)
|
212
|
-
{
|
213
|
-
boost::shared_ptr< EventedBufferedInput<bufferSize> > self = wself.lock();
|
214
|
-
if (self != NULL && generation == self->generation) {
|
215
|
-
self->verifyInvariants();
|
216
|
-
self->nextTickInstalled = false;
|
217
|
-
self->processBuffer();
|
218
|
-
self->verifyInvariants();
|
219
|
-
}
|
220
|
-
}
|
221
|
-
|
222
|
-
struct SetProcessingBufferToFalse {
|
223
|
-
EventedBufferedInput<bufferSize> *self;
|
224
|
-
|
225
|
-
SetProcessingBufferToFalse(EventedBufferedInput<bufferSize> *_self) {
|
226
|
-
self = _self;
|
227
|
-
}
|
228
|
-
|
229
|
-
~SetProcessingBufferToFalse() {
|
230
|
-
self->processingBuffer = false;
|
231
|
-
}
|
232
|
-
};
|
233
|
-
|
234
|
-
void processBuffer() {
|
235
|
-
EBI_TRACE("processBuffer");
|
236
|
-
assert(!processingBuffer);
|
237
|
-
processingBuffer = true;
|
238
|
-
SetProcessingBufferToFalse flagGuard(this);
|
239
|
-
|
240
|
-
if (state == CLOSED) {
|
241
|
-
return;
|
242
|
-
}
|
243
|
-
assert(state == LIVE);
|
244
|
-
if (paused || buffer.empty() || fd == -1) {
|
245
|
-
return;
|
246
|
-
}
|
247
|
-
|
248
|
-
assert(buffer.size() > 0);
|
249
|
-
size_t consumed = onData(EventedBufferedInput<bufferSize>::shared_from_this(),
|
250
|
-
buffer);
|
251
|
-
EBI_TRACE("Consumed " << consumed << " bytes");
|
252
|
-
if (state == CLOSED) {
|
253
|
-
return;
|
254
|
-
}
|
255
|
-
if (consumed == buffer.size()) {
|
256
|
-
buffer = StaticString();
|
257
|
-
if (!paused && socketPaused) {
|
258
|
-
socketPaused = false;
|
259
|
-
watcher.start();
|
260
|
-
}
|
261
|
-
cancelScheduledProcessBufferCall();
|
262
|
-
} else {
|
263
|
-
buffer = buffer.substr(consumed);
|
264
|
-
if (!socketPaused) {
|
265
|
-
socketPaused = true;
|
266
|
-
watcher.stop();
|
267
|
-
}
|
268
|
-
if (!paused) {
|
269
|
-
// Consume rest of the data in the next tick.
|
270
|
-
EBI_TRACE("Consume rest in next tick");
|
271
|
-
processBufferInNextTick();
|
272
|
-
} else {
|
273
|
-
cancelScheduledProcessBufferCall();
|
274
|
-
}
|
275
|
-
}
|
276
|
-
|
277
|
-
afterProcessingBuffer();
|
278
|
-
}
|
279
|
-
|
280
|
-
void cancelScheduledProcessBufferCall() {
|
281
|
-
if (nextTickInstalled) {
|
282
|
-
nextTickInstalled = false;
|
283
|
-
generation++;
|
284
|
-
}
|
285
|
-
}
|
286
|
-
|
287
|
-
void _reset(SafeLibev *libev, const FileDescriptor &fd, bool firstTime = false) {
|
288
|
-
if (firstTime) {
|
289
|
-
generation = 0;
|
290
|
-
} else {
|
291
|
-
verifyInvariants();
|
292
|
-
}
|
293
|
-
this->libev = libev;
|
294
|
-
this->fd = fd;
|
295
|
-
buffer = StaticString();
|
296
|
-
state = LIVE;
|
297
|
-
paused = true;
|
298
|
-
socketPaused = true;
|
299
|
-
processingBuffer = false;
|
300
|
-
nextTickInstalled = false;
|
301
|
-
generation++;
|
302
|
-
error = 0;
|
303
|
-
if (watcher.is_active()) {
|
304
|
-
watcher.stop();
|
305
|
-
}
|
306
|
-
if (libev != NULL) {
|
307
|
-
watcher.set(libev->getLoop());
|
308
|
-
}
|
309
|
-
if (fd != -1) {
|
310
|
-
watcher.set(fd, ev::READ);
|
311
|
-
}
|
312
|
-
verifyInvariants();
|
313
|
-
}
|
314
|
-
|
315
|
-
protected:
|
316
|
-
virtual ssize_t readSocket(void *buf, size_t n) {
|
317
|
-
return syscalls::read(fd, buf, n);
|
318
|
-
}
|
319
|
-
|
320
|
-
virtual void afterProcessingBuffer() {
|
321
|
-
// Do nothing. To be overridden in unit tests.
|
322
|
-
}
|
323
|
-
|
324
|
-
public:
|
325
|
-
typedef size_t (*DataCallback)(const boost::shared_ptr< EventedBufferedInput<bufferSize> > &source, const StaticString &data);
|
326
|
-
typedef void (*ErrorCallback)(const boost::shared_ptr< EventedBufferedInput<bufferSize> > &source, const char *message, int errnoCode);
|
327
|
-
|
328
|
-
DataCallback onData;
|
329
|
-
ErrorCallback onError;
|
330
|
-
void *userData;
|
331
|
-
|
332
|
-
EventedBufferedInput() {
|
333
|
-
resetCallbackFields();
|
334
|
-
_reset(NULL, FileDescriptor(), true);
|
335
|
-
watcher.set<EventedBufferedInput<bufferSize>,
|
336
|
-
&EventedBufferedInput<bufferSize>::onReadable>(this);
|
337
|
-
EBI_TRACE("created");
|
338
|
-
verifyInvariants();
|
339
|
-
}
|
340
|
-
|
341
|
-
EventedBufferedInput(SafeLibev *libev, const FileDescriptor &fd) {
|
342
|
-
resetCallbackFields();
|
343
|
-
_reset(libev, fd, true);
|
344
|
-
watcher.set<EventedBufferedInput<bufferSize>,
|
345
|
-
&EventedBufferedInput<bufferSize>::onReadable>(this);
|
346
|
-
EBI_TRACE("created");
|
347
|
-
verifyInvariants();
|
348
|
-
}
|
349
|
-
|
350
|
-
virtual ~EventedBufferedInput() {
|
351
|
-
cancelScheduledProcessBufferCall();
|
352
|
-
watcher.stop();
|
353
|
-
EBI_TRACE("destroyed");
|
354
|
-
}
|
355
|
-
|
356
|
-
bool resetable() const {
|
357
|
-
return !nextTickInstalled;
|
358
|
-
}
|
359
|
-
|
360
|
-
void reset(SafeLibev *libev, const FileDescriptor &fd) {
|
361
|
-
EBI_TRACE("reset()");
|
362
|
-
_reset(libev, fd);
|
363
|
-
}
|
364
|
-
|
365
|
-
void stop() {
|
366
|
-
if (state == LIVE && !paused) {
|
367
|
-
EBI_TRACE("stop()");
|
368
|
-
verifyInvariants();
|
369
|
-
paused = true;
|
370
|
-
if (!socketPaused) {
|
371
|
-
socketPaused = true;
|
372
|
-
watcher.stop();
|
373
|
-
}
|
374
|
-
cancelScheduledProcessBufferCall();
|
375
|
-
verifyInvariants();
|
376
|
-
}
|
377
|
-
}
|
378
|
-
|
379
|
-
void start() {
|
380
|
-
if (state == LIVE && paused) {
|
381
|
-
EBI_TRACE("start()");
|
382
|
-
verifyInvariants();
|
383
|
-
assert(socketPaused);
|
384
|
-
|
385
|
-
paused = false;
|
386
|
-
if (!buffer.empty()) {
|
387
|
-
processBufferInNextTick();
|
388
|
-
} else {
|
389
|
-
socketPaused = false;
|
390
|
-
watcher.start();
|
391
|
-
cancelScheduledProcessBufferCall();
|
392
|
-
}
|
393
|
-
verifyInvariants();
|
394
|
-
}
|
395
|
-
}
|
396
|
-
|
397
|
-
bool isStarted() const {
|
398
|
-
return !paused;
|
399
|
-
}
|
400
|
-
|
401
|
-
bool isSocketStarted() const {
|
402
|
-
return !socketPaused;
|
403
|
-
}
|
404
|
-
|
405
|
-
bool endReached() const {
|
406
|
-
return state == END_OF_STREAM;
|
407
|
-
}
|
408
|
-
|
409
|
-
void readNow() {
|
410
|
-
assert(!nextTickInstalled);
|
411
|
-
onReadable(watcher, 0);
|
412
|
-
}
|
413
|
-
|
414
|
-
const FileDescriptor &getFd() const {
|
415
|
-
return fd;
|
416
|
-
}
|
417
|
-
|
418
|
-
string inspect() const {
|
419
|
-
stringstream result;
|
420
|
-
const char *stateStr;
|
421
|
-
|
422
|
-
result << "fd=" << fd;
|
423
|
-
|
424
|
-
switch (state) {
|
425
|
-
case LIVE:
|
426
|
-
stateStr = "LIVE";
|
427
|
-
break;
|
428
|
-
case END_OF_STREAM:
|
429
|
-
stateStr = "END_OF_STREAM";
|
430
|
-
break;
|
431
|
-
case READ_ERROR:
|
432
|
-
stateStr = "READ_ERROR";
|
433
|
-
break;
|
434
|
-
case CLOSED:
|
435
|
-
stateStr = "CLOSED";
|
436
|
-
break;
|
437
|
-
default:
|
438
|
-
stateStr = "UNKNOWN";
|
439
|
-
break;
|
440
|
-
}
|
441
|
-
result << ", state=" << stateStr;
|
442
|
-
|
443
|
-
result << ", buffer(" << buffer.size() << ")=\"" << cEscapeString(buffer) << "\"";
|
444
|
-
result << ", paused=" << paused;
|
445
|
-
result << ", socketPaused=" << socketPaused;
|
446
|
-
result << ", nextTickInstalled=" << nextTickInstalled;
|
447
|
-
result << ", generation=" << generation;
|
448
|
-
result << ", error=" << error;
|
449
|
-
|
450
|
-
return result.str();
|
451
|
-
}
|
452
|
-
};
|
453
|
-
|
454
|
-
typedef boost::shared_ptr< EventedBufferedInput<> > EventedBufferedInputPtr;
|
455
|
-
|
456
|
-
} // namespace Passenger
|
457
|
-
|
458
|
-
#endif /* _EVENTED_BUFFERED_INPUT_H_ */
|