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.

Files changed (550) hide show
  1. checksums.yaml +8 -8
  2. checksums.yaml.gz.asc +7 -7
  3. data.tar.gz.asc +7 -7
  4. data/.editorconfig +10 -0
  5. data/CHANGELOG +21 -0
  6. data/build/agents.rb +2 -2
  7. data/build/apache2.rb +6 -5
  8. data/build/common_library.rb +22 -7
  9. data/build/cxx_tests.rb +0 -3
  10. data/build/misc.rb +1 -1
  11. data/dev/parse_file_descriptor_log +119 -0
  12. data/doc/CloudLicensingConfiguration.html +387 -0
  13. data/doc/Design and Architecture.html +2430 -0
  14. data/doc/Packaging.html +488 -0
  15. data/doc/Security of user switching support.html +1833 -0
  16. data/doc/ServerOptimizationGuide.html +659 -0
  17. data/doc/ServerOptimizationGuide.txt.md +8 -0
  18. data/doc/Users guide Apache.html +9116 -0
  19. data/doc/Users guide Apache.idmap.txt +6 -2
  20. data/doc/Users guide Apache.txt +26 -7
  21. data/doc/Users guide Nginx.html +9025 -0
  22. data/doc/Users guide Nginx.idmap.txt +7 -3
  23. data/doc/Users guide Nginx.txt +29 -6
  24. data/doc/Users guide Standalone.html +3983 -0
  25. data/doc/Users guide.html +1748 -0
  26. data/doc/users_guide_snippets/installation.txt +4 -4
  27. data/ext/apache2/Configuration.cpp +16 -5
  28. data/ext/apache2/Configuration.hpp +4 -2
  29. data/ext/apache2/Hooks.cpp +44 -19
  30. data/ext/boost/libs/thread/src/pthread/once.cpp +2 -0
  31. data/ext/boost/libs/thread/src/pthread/once_atomic.cpp +6 -0
  32. data/ext/common/AgentsStarter.h +3 -2
  33. data/ext/common/ApplicationPool2/DirectSpawner.h +14 -4
  34. data/ext/common/ApplicationPool2/DummySpawner.h +12 -7
  35. data/ext/common/ApplicationPool2/Implementation.cpp +1 -1
  36. data/ext/common/ApplicationPool2/Process.h +2 -1
  37. data/ext/common/ApplicationPool2/Session.h +6 -6
  38. data/ext/common/ApplicationPool2/SmartSpawner.h +19 -4
  39. data/ext/common/ApplicationPool2/Socket.h +59 -27
  40. data/ext/common/ApplicationPool2/Spawner.h +2 -2
  41. data/ext/common/BackgroundEventLoop.cpp +6 -1
  42. data/ext/common/Constants.h +1 -1
  43. data/ext/common/EventedClient.h +1 -1
  44. data/ext/common/EventedServer.h +2 -2
  45. data/ext/common/FileDescriptor.h +25 -6
  46. data/ext/common/Logging.cpp +107 -52
  47. data/ext/common/Logging.h +146 -19
  48. data/ext/common/MessageClient.h +2 -2
  49. data/ext/common/MessageServer.h +3 -2
  50. data/ext/common/RandomGenerator.h +8 -7
  51. data/ext/common/SafeLibev.h +5 -1
  52. data/ext/common/ServerKit/AcceptLoadBalancer.h +9 -4
  53. data/ext/common/ServerKit/FdSinkChannel.h +5 -2
  54. data/ext/common/ServerKit/FdSourceChannel.h +5 -2
  55. data/ext/common/ServerKit/FileBufferedChannel.h +2 -0
  56. data/ext/common/ServerKit/FileBufferedFdSinkChannel.h +7 -2
  57. data/ext/common/ServerKit/HttpServer.h +6 -0
  58. data/ext/common/ServerKit/Server.h +40 -3
  59. data/ext/common/StaticString.h +20 -0
  60. data/ext/common/UnionStation/Connection.h +3 -1
  61. data/ext/common/UnionStation/Core.h +6 -4
  62. data/ext/common/Utils.cpp +4 -3
  63. data/ext/common/Utils/DateParsing.h +19 -5
  64. data/ext/common/Utils/FastStringStream.h +183 -0
  65. data/ext/common/Utils/IOUtils.cpp +47 -28
  66. data/ext/common/Utils/IOUtils.h +56 -12
  67. data/ext/common/Utils/MessagePassing.h +3 -3
  68. data/ext/common/Utils/ProcessMetricsCollector.h +2 -2
  69. data/ext/common/Utils/ScopeGuard.h +16 -5
  70. data/ext/common/Utils/SpeedMeter.h +2 -2
  71. data/ext/common/Utils/StrIntUtils.cpp +6 -6
  72. data/ext/common/Utils/StrIntUtils.h +2 -1
  73. data/ext/common/agents/Base.cpp +56 -4
  74. data/ext/common/agents/Base.h +2 -1
  75. data/ext/common/agents/HelperAgent/AdminServer.h +122 -11
  76. data/ext/common/agents/HelperAgent/Main.cpp +16 -5
  77. data/ext/common/agents/HelperAgent/OptionParser.h +7 -1
  78. data/ext/common/agents/HelperAgent/RequestHandler.h +1 -1
  79. data/ext/common/agents/HelperAgent/RequestHandler/Hooks.cpp +10 -1
  80. data/ext/common/agents/HelperAgent/RequestHandler/Request.h +8 -0
  81. data/ext/common/agents/HelperAgent/RequestHandler/TurboCaching.h +4 -3
  82. data/ext/common/agents/LoggingAgent/AdminServer.h +57 -11
  83. data/ext/common/agents/LoggingAgent/LoggingServer.h +3 -3
  84. data/ext/common/agents/LoggingAgent/Main.cpp +11 -3
  85. data/ext/common/agents/Watchdog/AdminServer.h +53 -11
  86. data/ext/common/agents/Watchdog/AgentWatcher.cpp +3 -3
  87. data/ext/common/agents/Watchdog/Main.cpp +13 -6
  88. data/ext/libeio/ecb.h +1 -1
  89. data/ext/libev/ev.c +13 -1
  90. data/ext/libev/ev.h +3 -0
  91. data/ext/nginx/Configuration.c +28 -6
  92. data/ext/nginx/Configuration.h +2 -1
  93. data/ext/nginx/ngx_http_passenger_module.c +5 -4
  94. data/ext/oxt/dynamic_thread_group.hpp +38 -5
  95. data/lib/phusion_passenger.rb +1 -1
  96. data/lib/phusion_passenger/common_library.rb +9 -5
  97. data/lib/phusion_passenger/config/reopen_logs_command.rb +2 -2
  98. data/lib/phusion_passenger/packaging.rb +23 -37
  99. data/passenger.gemspec +21 -21
  100. metadata +4 -453
  101. metadata.gz.asc +7 -7
  102. data/.gitignore +0 -68
  103. data/.travis.yml +0 -16
  104. data/Gemfile +0 -17
  105. data/Gemfile.lock +0 -39
  106. data/Vagrantfile +0 -54
  107. data/debian.template/README.Debian +0 -15
  108. data/debian.template/changelog +0 -316
  109. data/debian.template/compat +0 -1
  110. data/debian.template/control.erb +0 -91
  111. data/debian.template/copyright +0 -385
  112. data/debian.template/libapache2-mod-passenger.install +0 -3
  113. data/debian.template/libapache2-mod-passenger.postinst +0 -36
  114. data/debian.template/libapache2-mod-passenger.prerm +0 -15
  115. data/debian.template/locations.ini.erb +0 -14
  116. data/debian.template/passenger-dev.install.erb +0 -3
  117. data/debian.template/passenger-doc.install.erb +0 -2
  118. data/debian.template/passenger.conf +0 -6
  119. data/debian.template/passenger.docs +0 -4
  120. data/debian.template/passenger.install.erb +0 -14
  121. data/debian.template/passenger.load +0 -3
  122. data/debian.template/passenger.manpages +0 -3
  123. data/debian.template/patches/series +0 -0
  124. data/debian.template/rules.erb +0 -76
  125. data/debian.template/source/format +0 -1
  126. data/ext/common/EventedBufferedInput.h +0 -458
  127. data/packaging/rpm/LICENSE.txt +0 -19
  128. data/packaging/rpm/Makefile +0 -13
  129. data/packaging/rpm/README.md +0 -41
  130. data/packaging/rpm/Vagrantfile +0 -38
  131. data/packaging/rpm/Vagrantfile.centos +0 -30
  132. data/packaging/rpm/build +0 -170
  133. data/packaging/rpm/create_project +0 -41
  134. data/packaging/rpm/git_update +0 -88
  135. data/packaging/rpm/image/Dockerfile +0 -37
  136. data/packaging/rpm/image/Gemfile +0 -3
  137. data/packaging/rpm/image/Gemfile.lock +0 -12
  138. data/packaging/rpm/image/RPM-GPG-KEY-amazon-ga +0 -19
  139. data/packaging/rpm/image/amazon2014-i386.cfg +0 -96
  140. data/packaging/rpm/image/amazon2014-x86_64.cfg +0 -96
  141. data/packaging/rpm/image/site-defaults.cfg +0 -168
  142. data/packaging/rpm/internal/build_tasks.rb +0 -238
  143. data/packaging/rpm/internal/dummygpg +0 -11
  144. data/packaging/rpm/internal/exec_build +0 -42
  145. data/packaging/rpm/internal/get_distro_arch +0 -14
  146. data/packaging/rpm/internal/get_distro_id +0 -10
  147. data/packaging/rpm/internal/git_update +0 -27
  148. data/packaging/rpm/internal/inituidgid +0 -17
  149. data/packaging/rpm/internal/my_init +0 -344
  150. data/packaging/rpm/internal/python27 +0 -3
  151. data/packaging/rpm/internal/repo_update +0 -46
  152. data/packaging/rpm/internal/setuser +0 -26
  153. data/packaging/rpm/internal/tracking_helper +0 -40
  154. data/packaging/rpm/jenkins_release +0 -99
  155. data/packaging/rpm/lib/build_tasks_support.rb +0 -402
  156. data/packaging/rpm/lib/preprocessor.rb +0 -341
  157. data/packaging/rpm/nginx_spec/404.html +0 -119
  158. data/packaging/rpm/nginx_spec/50x.html +0 -119
  159. data/packaging/rpm/nginx_spec/index.html +0 -116
  160. data/packaging/rpm/nginx_spec/nginx-auto-cc-gcc.patch +0 -13
  161. data/packaging/rpm/nginx_spec/nginx-logo.png +0 -0
  162. data/packaging/rpm/nginx_spec/nginx-upgrade +0 -13
  163. data/packaging/rpm/nginx_spec/nginx-upgrade.8 +0 -151
  164. data/packaging/rpm/nginx_spec/nginx.conf +0 -131
  165. data/packaging/rpm/nginx_spec/nginx.init +0 -144
  166. data/packaging/rpm/nginx_spec/nginx.logrotate +0 -13
  167. data/packaging/rpm/nginx_spec/nginx.service +0 -15
  168. data/packaging/rpm/nginx_spec/nginx.spec.template +0 -560
  169. data/packaging/rpm/nginx_spec/nginx.sysconfig +0 -4
  170. data/packaging/rpm/nginx_spec/passenger.conf +0 -9
  171. data/packaging/rpm/nginx_spec/poweredby.png +0 -0
  172. data/packaging/rpm/passenger_spec/apache-passenger.conf.in +0 -26
  173. data/packaging/rpm/passenger_spec/config.json +0 -30
  174. data/packaging/rpm/passenger_spec/passenger.logrotate +0 -7
  175. data/packaging/rpm/passenger_spec/passenger.spec.template +0 -478
  176. data/packaging/rpm/passenger_spec/passenger_dynamic_thread_group.patch +0 -16
  177. data/packaging/rpm/passenger_spec/passenger_tests_default_config_example.patch +0 -44
  178. data/packaging/rpm/passenger_spec/rubygem-passenger-4.0.18-GLIBC_HAVE_LONG_LONG.patch +0 -21
  179. data/packaging/rpm/repo_update +0 -114
  180. data/packaging/rpm/setup-system +0 -61
  181. data/packaging/rpm/shell +0 -10
  182. data/test/.rspec +0 -4
  183. data/test/config.json.example +0 -42
  184. data/test/config.json.rpm-automation +0 -15
  185. data/test/config.json.travis +0 -15
  186. data/test/config.json.vagrant +0 -30
  187. data/test/cxx/ApplicationPool2/DirectSpawnerTest.cpp +0 -124
  188. data/test/cxx/ApplicationPool2/OptionsTest.cpp +0 -30
  189. data/test/cxx/ApplicationPool2/PoolTest.cpp +0 -2062
  190. data/test/cxx/ApplicationPool2/ProcessTest.cpp +0 -130
  191. data/test/cxx/ApplicationPool2/SmartSpawnerTest.cpp +0 -243
  192. data/test/cxx/ApplicationPool2/SpawnerTestCases.cpp +0 -823
  193. data/test/cxx/BufferedIOTest.cpp +0 -364
  194. data/test/cxx/CachedFileStatTest.cpp +0 -402
  195. data/test/cxx/CxxTestMain.cpp +0 -181
  196. data/test/cxx/DataStructures/LStringTest.cpp +0 -275
  197. data/test/cxx/DataStructures/StringKeyTableTest.cpp +0 -199
  198. data/test/cxx/DateParsingTest.cpp +0 -75
  199. data/test/cxx/DechunkerTest.cpp +0 -250
  200. data/test/cxx/EventedBufferedInputTest.cpp +0 -758
  201. data/test/cxx/EventedClientTest.cpp +0 -523
  202. data/test/cxx/FileChangeCheckerTest.cpp +0 -331
  203. data/test/cxx/FileDescriptorTest.cpp +0 -69
  204. data/test/cxx/FilterSupportTest.cpp +0 -433
  205. data/test/cxx/IOUtilsTest.cpp +0 -861
  206. data/test/cxx/MemoryKit/MbufTest.cpp +0 -213
  207. data/test/cxx/MessageIOTest.cpp +0 -360
  208. data/test/cxx/MessagePassingTest.cpp +0 -81
  209. data/test/cxx/MessageReadersWritersTest.cpp +0 -576
  210. data/test/cxx/MessageServerTest.cpp +0 -393
  211. data/test/cxx/ProcessMetricsCollectorTest.cpp +0 -123
  212. data/test/cxx/RequestHandlerTest.cpp +0 -1463
  213. data/test/cxx/ResponseCacheTest.cpp +0 -322
  214. data/test/cxx/ServerKit/ChannelTest.cpp +0 -1467
  215. data/test/cxx/ServerKit/CookieUtilsTest.cpp +0 -274
  216. data/test/cxx/ServerKit/FileBufferedChannelTest.cpp +0 -992
  217. data/test/cxx/ServerKit/HeaderTableTest.cpp +0 -177
  218. data/test/cxx/ServerKit/HttpServerTest.cpp +0 -1580
  219. data/test/cxx/ServerKit/ServerTest.cpp +0 -408
  220. data/test/cxx/StaticStringTest.cpp +0 -220
  221. data/test/cxx/StringMapTest.cpp +0 -131
  222. data/test/cxx/SystemTimeTest.cpp +0 -37
  223. data/test/cxx/TemplateTest.cpp +0 -118
  224. data/test/cxx/TestSupport.cpp +0 -207
  225. data/test/cxx/TestSupport.h +0 -333
  226. data/test/cxx/UnionStationTest.cpp +0 -741
  227. data/test/cxx/Utils/StrIntUtilsTest.cpp +0 -39
  228. data/test/cxx/UtilsTest.cpp +0 -672
  229. data/test/cxx/VariantMapTest.cpp +0 -191
  230. data/test/gdbinit.example +0 -34
  231. data/test/integration_tests/apache2_tests.rb +0 -585
  232. data/test/integration_tests/downloaded_binaries_tests.rb +0 -185
  233. data/test/integration_tests/native_packaging_spec.rb +0 -368
  234. data/test/integration_tests/nginx_tests.rb +0 -402
  235. data/test/integration_tests/shared/example_webapp_tests.rb +0 -289
  236. data/test/integration_tests/source_packaging_test.rb +0 -201
  237. data/test/integration_tests/spec_helper.rb +0 -22
  238. data/test/integration_tests/standalone_tests.rb +0 -392
  239. data/test/node/line_reader_spec.js +0 -338
  240. data/test/node/spec_helper.js +0 -65
  241. data/test/oxt/backtrace_test.cpp +0 -88
  242. data/test/oxt/counter.hpp +0 -55
  243. data/test/oxt/dynamic_thread_group_test.cpp +0 -131
  244. data/test/oxt/oxt_test_main.cpp +0 -27
  245. data/test/oxt/spin_lock_test.cpp +0 -59
  246. data/test/oxt/syscall_interruption_test.cpp +0 -39
  247. data/test/ruby/debug_logging_spec.rb +0 -145
  248. data/test/ruby/message_channel_spec.rb +0 -196
  249. data/test/ruby/rack/loader_spec.rb +0 -42
  250. data/test/ruby/rack/preloader_spec.rb +0 -48
  251. data/test/ruby/rails3.0/loader_spec.rb +0 -26
  252. data/test/ruby/rails3.0/preloader_spec.rb +0 -32
  253. data/test/ruby/rails3.1/loader_spec.rb +0 -26
  254. data/test/ruby/rails3.1/preloader_spec.rb +0 -32
  255. data/test/ruby/rails3.2/loader_spec.rb +0 -26
  256. data/test/ruby/rails3.2/preloader_spec.rb +0 -32
  257. data/test/ruby/rails4.0/loader_spec.rb +0 -28
  258. data/test/ruby/rails4.0/preloader_spec.rb +0 -34
  259. data/test/ruby/rails4.1/loader_spec.rb +0 -28
  260. data/test/ruby/rails4.1/preloader_spec.rb +0 -34
  261. data/test/ruby/request_handler_spec.rb +0 -747
  262. data/test/ruby/shared/loader_sharedspec.rb +0 -247
  263. data/test/ruby/shared/rails/union_station_extensions_sharedspec.rb +0 -357
  264. data/test/ruby/shared/ruby_loader_sharedspec.rb +0 -55
  265. data/test/ruby/spec_helper.rb +0 -114
  266. data/test/ruby/standalone/runtime_installer_spec.rb +0 -402
  267. data/test/ruby/union_station_spec.rb +0 -288
  268. data/test/ruby/utils/file_system_watcher_spec.rb +0 -229
  269. data/test/ruby/utils/hosts_file_parser.rb +0 -258
  270. data/test/ruby/utils/tee_input_spec.rb +0 -235
  271. data/test/ruby/utils/unseekable_socket_spec.rb +0 -66
  272. data/test/ruby/utils_spec.rb +0 -41
  273. data/test/stub/apache2/httpd.conf.erb +0 -122
  274. data/test/stub/apache2/mime.types +0 -748
  275. data/test/stub/garbage1.dat +0 -0
  276. data/test/stub/garbage2.dat +0 -0
  277. data/test/stub/garbage3.dat +0 -0
  278. data/test/stub/http_request.yml +0 -23
  279. data/test/stub/index.html +0 -1
  280. data/test/stub/nginx/koi-utf +0 -109
  281. data/test/stub/nginx/koi-win +0 -103
  282. data/test/stub/nginx/mime.types +0 -70
  283. data/test/stub/nginx/nginx.conf.erb +0 -70
  284. data/test/stub/nginx/win-utf +0 -126
  285. data/test/stub/node/app.js +0 -133
  286. data/test/stub/node/public/.gitignore +0 -0
  287. data/test/stub/node/tmp/.gitignore +0 -0
  288. data/test/stub/rack/config.ru +0 -95
  289. data/test/stub/rack/library.rb +0 -16
  290. data/test/stub/rack/public/.gitignore +0 -0
  291. data/test/stub/rack/start.rb +0 -52
  292. data/test/stub/rack/tmp/.gitignore +0 -0
  293. data/test/stub/rails3.0/.gitignore +0 -4
  294. data/test/stub/rails3.0/Gemfile +0 -22
  295. data/test/stub/rails3.0/Gemfile.lock +0 -80
  296. data/test/stub/rails3.0/Rakefile +0 -10
  297. data/test/stub/rails3.0/app/controllers/application_controller.rb +0 -4
  298. data/test/stub/rails3.0/app/helpers/application_helper.rb +0 -2
  299. data/test/stub/rails3.0/app/views/layouts/application.html.erb +0 -14
  300. data/test/stub/rails3.0/config.ru +0 -4
  301. data/test/stub/rails3.0/config/application.rb +0 -48
  302. data/test/stub/rails3.0/config/boot.rb +0 -13
  303. data/test/stub/rails3.0/config/database.yml +0 -22
  304. data/test/stub/rails3.0/config/environment.rb +0 -5
  305. data/test/stub/rails3.0/config/environments/development.rb +0 -19
  306. data/test/stub/rails3.0/config/environments/production.rb +0 -48
  307. data/test/stub/rails3.0/config/environments/test.rb +0 -32
  308. data/test/stub/rails3.0/config/initializers/backtrace_silencers.rb +0 -7
  309. data/test/stub/rails3.0/config/initializers/inflections.rb +0 -10
  310. data/test/stub/rails3.0/config/initializers/mime_types.rb +0 -5
  311. data/test/stub/rails3.0/config/initializers/passenger.rb +0 -2
  312. data/test/stub/rails3.0/config/initializers/secret_token.rb +0 -7
  313. data/test/stub/rails3.0/config/initializers/session_store.rb +0 -8
  314. data/test/stub/rails3.0/config/locales/en.yml +0 -5
  315. data/test/stub/rails3.0/config/routes.rb +0 -58
  316. data/test/stub/rails3.0/db/seeds.rb +0 -7
  317. data/test/stub/rails3.0/doc/README_FOR_APP +0 -2
  318. data/test/stub/rails3.0/lib/tasks/.gitkeep +0 -0
  319. data/test/stub/rails3.0/log/.gitignore +0 -0
  320. data/test/stub/rails3.0/public/404.html +0 -26
  321. data/test/stub/rails3.0/public/422.html +0 -26
  322. data/test/stub/rails3.0/public/500.html +0 -26
  323. data/test/stub/rails3.0/public/favicon.ico +0 -0
  324. data/test/stub/rails3.0/public/index.html +0 -279
  325. data/test/stub/rails3.0/public/robots.txt +0 -5
  326. data/test/stub/rails3.0/public/stylesheets/.gitkeep +0 -0
  327. data/test/stub/rails3.0/script/rails +0 -9
  328. data/test/stub/rails3.0/test/performance/browsing_test.rb +0 -9
  329. data/test/stub/rails3.0/test/test_helper.rb +0 -13
  330. data/test/stub/rails3.0/vendor/plugins/.gitkeep +0 -0
  331. data/test/stub/rails3.1/.gitignore +0 -15
  332. data/test/stub/rails3.1/Gemfile +0 -37
  333. data/test/stub/rails3.1/Gemfile.lock +0 -115
  334. data/test/stub/rails3.1/README +0 -261
  335. data/test/stub/rails3.1/Rakefile +0 -7
  336. data/test/stub/rails3.1/app/assets/images/rails.png +0 -0
  337. data/test/stub/rails3.1/app/assets/stylesheets/application.css +0 -7
  338. data/test/stub/rails3.1/app/controllers/application_controller.rb +0 -3
  339. data/test/stub/rails3.1/app/helpers/application_helper.rb +0 -2
  340. data/test/stub/rails3.1/app/mailers/.gitkeep +0 -0
  341. data/test/stub/rails3.1/app/models/.gitkeep +0 -0
  342. data/test/stub/rails3.1/app/views/layouts/application.html.erb +0 -14
  343. data/test/stub/rails3.1/config.ru +0 -4
  344. data/test/stub/rails3.1/config/application.rb +0 -48
  345. data/test/stub/rails3.1/config/boot.rb +0 -6
  346. data/test/stub/rails3.1/config/database.yml +0 -25
  347. data/test/stub/rails3.1/config/environment.rb +0 -5
  348. data/test/stub/rails3.1/config/environments/development.rb +0 -30
  349. data/test/stub/rails3.1/config/environments/production.rb +0 -60
  350. data/test/stub/rails3.1/config/environments/test.rb +0 -39
  351. data/test/stub/rails3.1/config/initializers/backtrace_silencers.rb +0 -7
  352. data/test/stub/rails3.1/config/initializers/inflections.rb +0 -10
  353. data/test/stub/rails3.1/config/initializers/mime_types.rb +0 -5
  354. data/test/stub/rails3.1/config/initializers/passenger.rb +0 -2
  355. data/test/stub/rails3.1/config/initializers/secret_token.rb +0 -7
  356. data/test/stub/rails3.1/config/initializers/session_store.rb +0 -8
  357. data/test/stub/rails3.1/config/initializers/wrap_parameters.rb +0 -14
  358. data/test/stub/rails3.1/config/locales/en.yml +0 -5
  359. data/test/stub/rails3.1/config/routes.rb +0 -58
  360. data/test/stub/rails3.1/db/seeds.rb +0 -7
  361. data/test/stub/rails3.1/doc/README_FOR_APP +0 -2
  362. data/test/stub/rails3.1/lib/assets/.gitkeep +0 -0
  363. data/test/stub/rails3.1/lib/tasks/.gitkeep +0 -0
  364. data/test/stub/rails3.1/log/.gitkeep +0 -0
  365. data/test/stub/rails3.1/public/404.html +0 -26
  366. data/test/stub/rails3.1/public/422.html +0 -26
  367. data/test/stub/rails3.1/public/500.html +0 -26
  368. data/test/stub/rails3.1/public/favicon.ico +0 -0
  369. data/test/stub/rails3.1/public/index.html +0 -241
  370. data/test/stub/rails3.1/public/robots.txt +0 -5
  371. data/test/stub/rails3.1/script/rails +0 -6
  372. data/test/stub/rails3.1/test/fixtures/.gitkeep +0 -0
  373. data/test/stub/rails3.1/test/functional/.gitkeep +0 -0
  374. data/test/stub/rails3.1/test/integration/.gitkeep +0 -0
  375. data/test/stub/rails3.1/test/performance/browsing_test.rb +0 -12
  376. data/test/stub/rails3.1/test/test_helper.rb +0 -13
  377. data/test/stub/rails3.1/test/unit/.gitkeep +0 -0
  378. data/test/stub/rails3.1/vendor/assets/stylesheets/.gitkeep +0 -0
  379. data/test/stub/rails3.1/vendor/plugins/.gitkeep +0 -0
  380. data/test/stub/rails3.2/.gitignore +0 -15
  381. data/test/stub/rails3.2/Gemfile +0 -39
  382. data/test/stub/rails3.2/Gemfile.lock +0 -113
  383. data/test/stub/rails3.2/Rakefile +0 -7
  384. data/test/stub/rails3.2/app/assets/images/rails.png +0 -0
  385. data/test/stub/rails3.2/app/assets/stylesheets/application.css +0 -13
  386. data/test/stub/rails3.2/app/controllers/application_controller.rb +0 -3
  387. data/test/stub/rails3.2/app/helpers/application_helper.rb +0 -2
  388. data/test/stub/rails3.2/app/mailers/.gitkeep +0 -0
  389. data/test/stub/rails3.2/app/models/.gitkeep +0 -0
  390. data/test/stub/rails3.2/app/views/layouts/application.html.erb +0 -14
  391. data/test/stub/rails3.2/config.ru +0 -4
  392. data/test/stub/rails3.2/config/application.rb +0 -62
  393. data/test/stub/rails3.2/config/boot.rb +0 -6
  394. data/test/stub/rails3.2/config/database.yml +0 -25
  395. data/test/stub/rails3.2/config/environment.rb +0 -5
  396. data/test/stub/rails3.2/config/environments/development.rb +0 -37
  397. data/test/stub/rails3.2/config/environments/production.rb +0 -67
  398. data/test/stub/rails3.2/config/environments/test.rb +0 -37
  399. data/test/stub/rails3.2/config/initializers/backtrace_silencers.rb +0 -7
  400. data/test/stub/rails3.2/config/initializers/inflections.rb +0 -15
  401. data/test/stub/rails3.2/config/initializers/mime_types.rb +0 -5
  402. data/test/stub/rails3.2/config/initializers/passenger.rb +0 -2
  403. data/test/stub/rails3.2/config/initializers/secret_token.rb +0 -7
  404. data/test/stub/rails3.2/config/initializers/session_store.rb +0 -8
  405. data/test/stub/rails3.2/config/initializers/wrap_parameters.rb +0 -14
  406. data/test/stub/rails3.2/config/locales/en.yml +0 -5
  407. data/test/stub/rails3.2/config/routes.rb +0 -58
  408. data/test/stub/rails3.2/db/seeds.rb +0 -7
  409. data/test/stub/rails3.2/doc/README_FOR_APP +0 -2
  410. data/test/stub/rails3.2/lib/assets/.gitkeep +0 -0
  411. data/test/stub/rails3.2/lib/tasks/.gitkeep +0 -0
  412. data/test/stub/rails3.2/log/.gitkeep +0 -0
  413. data/test/stub/rails3.2/public/404.html +0 -26
  414. data/test/stub/rails3.2/public/422.html +0 -26
  415. data/test/stub/rails3.2/public/500.html +0 -25
  416. data/test/stub/rails3.2/public/favicon.ico +0 -0
  417. data/test/stub/rails3.2/public/index.html +0 -241
  418. data/test/stub/rails3.2/public/robots.txt +0 -5
  419. data/test/stub/rails3.2/script/rails +0 -6
  420. data/test/stub/rails3.2/test/fixtures/.gitkeep +0 -0
  421. data/test/stub/rails3.2/test/functional/.gitkeep +0 -0
  422. data/test/stub/rails3.2/test/integration/.gitkeep +0 -0
  423. data/test/stub/rails3.2/test/performance/browsing_test.rb +0 -12
  424. data/test/stub/rails3.2/test/test_helper.rb +0 -13
  425. data/test/stub/rails3.2/test/unit/.gitkeep +0 -0
  426. data/test/stub/rails3.2/vendor/assets/stylesheets/.gitkeep +0 -0
  427. data/test/stub/rails3.2/vendor/plugins/.gitkeep +0 -0
  428. data/test/stub/rails4.0/.gitignore +0 -16
  429. data/test/stub/rails4.0/Gemfile +0 -45
  430. data/test/stub/rails4.0/Gemfile.lock +0 -126
  431. data/test/stub/rails4.0/README.rdoc +0 -28
  432. data/test/stub/rails4.0/Rakefile +0 -6
  433. data/test/stub/rails4.0/app/assets/images/.keep +0 -0
  434. data/test/stub/rails4.0/app/assets/javascripts/application.js +0 -16
  435. data/test/stub/rails4.0/app/assets/stylesheets/application.css +0 -13
  436. data/test/stub/rails4.0/app/controllers/application_controller.rb +0 -5
  437. data/test/stub/rails4.0/app/controllers/concerns/.keep +0 -0
  438. data/test/stub/rails4.0/app/helpers/application_helper.rb +0 -2
  439. data/test/stub/rails4.0/app/mailers/.keep +0 -0
  440. data/test/stub/rails4.0/app/models/.keep +0 -0
  441. data/test/stub/rails4.0/app/models/concerns/.keep +0 -0
  442. data/test/stub/rails4.0/app/views/layouts/application.html.erb +0 -14
  443. data/test/stub/rails4.0/bin/bundle +0 -3
  444. data/test/stub/rails4.0/bin/rails +0 -4
  445. data/test/stub/rails4.0/bin/rake +0 -4
  446. data/test/stub/rails4.0/config.ru +0 -4
  447. data/test/stub/rails4.0/config/application.rb +0 -23
  448. data/test/stub/rails4.0/config/boot.rb +0 -4
  449. data/test/stub/rails4.0/config/database.yml +0 -25
  450. data/test/stub/rails4.0/config/environment.rb +0 -5
  451. data/test/stub/rails4.0/config/environments/development.rb +0 -29
  452. data/test/stub/rails4.0/config/environments/production.rb +0 -80
  453. data/test/stub/rails4.0/config/environments/test.rb +0 -36
  454. data/test/stub/rails4.0/config/initializers/backtrace_silencers.rb +0 -7
  455. data/test/stub/rails4.0/config/initializers/filter_parameter_logging.rb +0 -4
  456. data/test/stub/rails4.0/config/initializers/inflections.rb +0 -16
  457. data/test/stub/rails4.0/config/initializers/mime_types.rb +0 -5
  458. data/test/stub/rails4.0/config/initializers/passenger.rb +0 -2
  459. data/test/stub/rails4.0/config/initializers/secret_token.rb +0 -12
  460. data/test/stub/rails4.0/config/initializers/session_store.rb +0 -3
  461. data/test/stub/rails4.0/config/initializers/wrap_parameters.rb +0 -14
  462. data/test/stub/rails4.0/config/locales/en.yml +0 -23
  463. data/test/stub/rails4.0/config/routes.rb +0 -57
  464. data/test/stub/rails4.0/db/seeds.rb +0 -7
  465. data/test/stub/rails4.0/lib/assets/.keep +0 -0
  466. data/test/stub/rails4.0/lib/tasks/.keep +0 -0
  467. data/test/stub/rails4.0/log/.keep +0 -0
  468. data/test/stub/rails4.0/public/404.html +0 -58
  469. data/test/stub/rails4.0/public/422.html +0 -58
  470. data/test/stub/rails4.0/public/500.html +0 -57
  471. data/test/stub/rails4.0/public/favicon.ico +0 -0
  472. data/test/stub/rails4.0/public/robots.txt +0 -5
  473. data/test/stub/rails4.0/test/controllers/.keep +0 -0
  474. data/test/stub/rails4.0/test/fixtures/.keep +0 -0
  475. data/test/stub/rails4.0/test/helpers/.keep +0 -0
  476. data/test/stub/rails4.0/test/integration/.keep +0 -0
  477. data/test/stub/rails4.0/test/mailers/.keep +0 -0
  478. data/test/stub/rails4.0/test/models/.keep +0 -0
  479. data/test/stub/rails4.0/test/test_helper.rb +0 -15
  480. data/test/stub/rails4.0/vendor/assets/javascripts/.keep +0 -0
  481. data/test/stub/rails4.0/vendor/assets/stylesheets/.keep +0 -0
  482. data/test/stub/rails4.1/.gitignore +0 -16
  483. data/test/stub/rails4.1/Gemfile +0 -45
  484. data/test/stub/rails4.1/Gemfile.lock +0 -129
  485. data/test/stub/rails4.1/README.rdoc +0 -28
  486. data/test/stub/rails4.1/Rakefile +0 -6
  487. data/test/stub/rails4.1/app/assets/images/.keep +0 -0
  488. data/test/stub/rails4.1/app/assets/javascripts/application.js +0 -16
  489. data/test/stub/rails4.1/app/assets/stylesheets/application.css +0 -13
  490. data/test/stub/rails4.1/app/controllers/application_controller.rb +0 -5
  491. data/test/stub/rails4.1/app/controllers/concerns/.keep +0 -0
  492. data/test/stub/rails4.1/app/helpers/application_helper.rb +0 -2
  493. data/test/stub/rails4.1/app/mailers/.keep +0 -0
  494. data/test/stub/rails4.1/app/models/.keep +0 -0
  495. data/test/stub/rails4.1/app/models/concerns/.keep +0 -0
  496. data/test/stub/rails4.1/app/views/layouts/application.html.erb +0 -14
  497. data/test/stub/rails4.1/bin/bundle +0 -3
  498. data/test/stub/rails4.1/bin/rails +0 -4
  499. data/test/stub/rails4.1/bin/rake +0 -4
  500. data/test/stub/rails4.1/config.ru +0 -4
  501. data/test/stub/rails4.1/config/application.rb +0 -23
  502. data/test/stub/rails4.1/config/boot.rb +0 -4
  503. data/test/stub/rails4.1/config/database.yml +0 -25
  504. data/test/stub/rails4.1/config/environment.rb +0 -5
  505. data/test/stub/rails4.1/config/environments/development.rb +0 -29
  506. data/test/stub/rails4.1/config/environments/production.rb +0 -80
  507. data/test/stub/rails4.1/config/environments/test.rb +0 -36
  508. data/test/stub/rails4.1/config/initializers/backtrace_silencers.rb +0 -7
  509. data/test/stub/rails4.1/config/initializers/filter_parameter_logging.rb +0 -4
  510. data/test/stub/rails4.1/config/initializers/inflections.rb +0 -16
  511. data/test/stub/rails4.1/config/initializers/mime_types.rb +0 -5
  512. data/test/stub/rails4.1/config/initializers/passenger.rb +0 -5
  513. data/test/stub/rails4.1/config/initializers/secret_token.rb +0 -12
  514. data/test/stub/rails4.1/config/initializers/session_store.rb +0 -3
  515. data/test/stub/rails4.1/config/initializers/wrap_parameters.rb +0 -14
  516. data/test/stub/rails4.1/config/locales/en.yml +0 -23
  517. data/test/stub/rails4.1/config/routes.rb +0 -57
  518. data/test/stub/rails4.1/db/seeds.rb +0 -7
  519. data/test/stub/rails4.1/lib/assets/.keep +0 -0
  520. data/test/stub/rails4.1/lib/tasks/.keep +0 -0
  521. data/test/stub/rails4.1/log/.keep +0 -0
  522. data/test/stub/rails4.1/public/404.html +0 -58
  523. data/test/stub/rails4.1/public/422.html +0 -58
  524. data/test/stub/rails4.1/public/500.html +0 -57
  525. data/test/stub/rails4.1/public/favicon.ico +0 -0
  526. data/test/stub/rails4.1/public/robots.txt +0 -5
  527. data/test/stub/rails4.1/test/controllers/.keep +0 -0
  528. data/test/stub/rails4.1/test/fixtures/.keep +0 -0
  529. data/test/stub/rails4.1/test/helpers/.keep +0 -0
  530. data/test/stub/rails4.1/test/integration/.keep +0 -0
  531. data/test/stub/rails4.1/test/mailers/.keep +0 -0
  532. data/test/stub/rails4.1/test/models/.keep +0 -0
  533. data/test/stub/rails4.1/test/test_helper.rb +0 -15
  534. data/test/stub/rails4.1/vendor/assets/javascripts/.keep +0 -0
  535. data/test/stub/rails4.1/vendor/assets/stylesheets/.keep +0 -0
  536. data/test/stub/start_error.pl +0 -24
  537. data/test/stub/upload_data.txt +0 -494
  538. data/test/stub/wsgi/passenger_wsgi.py +0 -212
  539. data/test/stub/wsgi/public/.gitignore +0 -0
  540. data/test/stub/wsgi/tmp/.gitignore +0 -0
  541. data/test/support/allocate_memory.c +0 -14
  542. data/test/support/apache2_controller.rb +0 -258
  543. data/test/support/multipart.rb +0 -62
  544. data/test/support/nginx_controller.rb +0 -97
  545. data/test/support/placebo-preloader.rb +0 -88
  546. data/test/support/test_helper.rb +0 -455
  547. data/test/support/valgrind.h +0 -2539
  548. data/test/tut/tut.h +0 -1310
  549. data/test/tut/tut_reporter.h +0 -256
  550. data/test/valgrind-osx.supp +0 -7
@@ -146,7 +146,9 @@ namespace ServerAgent {
146
146
  oxt::thread *prestarterThread;
147
147
 
148
148
  WorkingObjects()
149
- : terminationCount(0),
149
+ : exitEvent(__FILE__, __LINE__, "WorkingObjects: exitEvent"),
150
+ allClientsDisconnectedEvent(__FILE__, __LINE__, "WorkingObjects: allClientsDisconnectedEvent"),
151
+ terminationCount(0),
150
152
  shutdownCounter(0)
151
153
  {
152
154
  for (unsigned int i = 0; i < SERVER_KIT_MAX_SERVER_ENDPOINTS; i++) {
@@ -274,13 +276,19 @@ startListening() {
274
276
  vector<string> adminAddresses = agentsOptions->getStrSet("server_admin_addresses", false);
275
277
 
276
278
  for (unsigned int i = 0; i < addresses.size(); i++) {
277
- wo->serverFds[i] = createServer(addresses[i]);
279
+ wo->serverFds[i] = createServer(addresses[i], 0, true,
280
+ __FILE__, __LINE__);
281
+ P_LOG_FILE_DESCRIPTOR_PURPOSE(wo->serverFds[i],
282
+ "Server address: " << addresses[i]);
278
283
  if (getSocketAddressType(addresses[i]) == SAT_UNIX) {
279
284
  makeFileWorldReadableAndWritable(parseUnixSocketAddress(addresses[i]));
280
285
  }
281
286
  }
282
287
  for (unsigned int i = 0; i < adminAddresses.size(); i++) {
283
- wo->adminServerFds[i] = createServer(adminAddresses[i]);
288
+ wo->adminServerFds[i] = createServer(adminAddresses[i], 0, true,
289
+ __FILE__, __LINE__);
290
+ P_LOG_FILE_DESCRIPTOR_PURPOSE(wo->adminServerFds[i],
291
+ "AdminServer address: " << adminAddresses[i]);
284
292
  if (getSocketAddressType(adminAddresses[i]) == SAT_UNIX) {
285
293
  makeFileWorldReadableAndWritable(parseUnixSocketAddress(adminAddresses[i]));
286
294
  }
@@ -303,8 +311,8 @@ createPidFile() {
303
311
  }
304
312
 
305
313
  UPDATE_TRACE_POINT();
314
+ FdGuard guard(fd, __FILE__, __LINE__);
306
315
  writeExact(fd, pidStr, strlen(pidStr));
307
- syscalls::close(fd);
308
316
  }
309
317
  }
310
318
 
@@ -937,7 +945,10 @@ preinitialize(VariantMap &options) {
937
945
  options.setInt("log_level", options.getInt("server_log_level"));
938
946
  }
939
947
  if (options.has("server_log_file")) {
940
- options.set("debug_log_file", options.get("server_log_file"));
948
+ options.set("log_file", options.get("server_log_file"));
949
+ }
950
+ if (options.has("server_file_descriptor_log_file")) {
951
+ options.set("file_descriptor_log_file", options.get("server_file_descriptor_log_file"));
941
952
  }
942
953
  }
943
954
 
@@ -139,6 +139,7 @@ serverUsage() {
139
139
  printf("Other options (optional):\n");
140
140
  printf(" --log-file PATH Log to the given file.\n");
141
141
  printf(" --log-level LEVEL Logging level. Default: %d\n", DEFAULT_LOG_LEVEL);
142
+ printf(" --fd-log-file PATH Log file descriptor activity to the given file.\n");
142
143
  printf(" --stat-throttle-rate SECONDS\n");
143
144
  printf(" Throttle filesystem restart.txt checks to at most\n");
144
145
  printf(" once per given seconds. Default: %d\n", DEFAULT_STAT_THROTTLE_RATE);
@@ -308,10 +309,15 @@ parseServerOption(int argc, const char *argv[], int &i, VariantMap &options) {
308
309
  options.setInt("server_log_level", atoi(argv[i + 1]));
309
310
  i += 2;
310
311
  } else if (p.isValueFlag(argc, i, argv[i], '\0', "--log-file")) {
311
- // We do not set debug_log_file because, when this function is called from
312
+ // We do not set log_file because, when this function is called from
312
313
  // the Watchdog, we don't want to affect the Watchdog's own log file.
313
314
  options.set("server_log_file", argv[i + 1]);
314
315
  i += 2;
316
+ } else if (p.isValueFlag(argc, i, argv[i], '\0', "--fd-log-file")) {
317
+ // We do not set file_descriptor_log_file because, when this function is called from
318
+ // the Watchdog, we don't want to affect the Watchdog's own log file.
319
+ options.set("server_file_descriptor_log_file", argv[i + 1]);
320
+ i += 2;
315
321
  } else if (p.isValueFlag(argc, i, argv[i], '\0', "--stat-throttle-rate")) {
316
322
  options.setInt("stat_throttle_rate", atoi(argv[i + 1]));
317
323
  i += 2;
@@ -424,7 +424,7 @@ public:
424
424
  if (req->session->isClosed()) {
425
425
  sessionDoc["closed"] = true;
426
426
  } else {
427
- sessionDoc["pid"] = session->getPid();
427
+ sessionDoc["pid"] = (Json::Int64) session->getPid();
428
428
  sessionDoc["gupid"] = session->getGupid().toString();
429
429
  }
430
430
  }
@@ -30,6 +30,8 @@ public:
30
30
  virtual unsigned int getClientName(const Client *client, char *buf, size_t size) const {
31
31
  char *pos = buf;
32
32
  const char *end = buf + size - 1;
33
+ // WARNING: If you change the format, be sure to change
34
+ // AdminServer::extractThreadNumberFromClientName() too.
33
35
  pos += uintToString(threadNumber, pos, end - pos);
34
36
  pos = appendData(pos, end, "-", 1);
35
37
  pos += uintToString(client->number, pos, end - pos);
@@ -85,6 +87,7 @@ virtual void reinitializeRequest(Client *client, Request *req) {
85
87
  req->stickySession = false;
86
88
  req->halfCloseAppConnection = false;
87
89
  req->sessionCheckoutTry = 0;
90
+ req->appResponseInitialized = false;
88
91
  req->strip100ContinueHeader = false;
89
92
  req->hasPragmaHeader = false;
90
93
  req->host = NULL;
@@ -119,7 +122,9 @@ virtual void deinitializeRequest(Client *client, Request *req) {
119
122
  /***************/
120
123
  /***************/
121
124
 
122
- deinitializeAppResponse(client, req);
125
+ if (req->appResponseInitialized) {
126
+ deinitializeAppResponse(client, req);
127
+ }
123
128
 
124
129
  ParentClass::deinitializeRequest(client, req);
125
130
  }
@@ -127,6 +132,8 @@ virtual void deinitializeRequest(Client *client, Request *req) {
127
132
  void reinitializeAppResponse(Client *client, Request *req) {
128
133
  AppResponse *resp = &req->appResponse;
129
134
 
135
+ req->appResponseInitialized = true;
136
+
130
137
  resp->httpMajor = 1;
131
138
  resp->httpMinor = 0;
132
139
  resp->httpState = AppResponse::PARSING_HEADERS;
@@ -152,6 +159,8 @@ void reinitializeAppResponse(Client *client, Request *req) {
152
159
  void deinitializeAppResponse(Client *client, Request *req) {
153
160
  AppResponse *resp = &req->appResponse;
154
161
 
162
+ req->appResponseInitialized = false;
163
+
155
164
  if (resp->httpState == AppResponse::PARSING_HEADERS
156
165
  && resp->parserState.headerParser != NULL)
157
166
  {
@@ -27,6 +27,7 @@
27
27
 
28
28
  #include <ev++.h>
29
29
  #include <string>
30
+ #include <cstring>
30
31
 
31
32
  #include <ServerKit/HttpRequest.h>
32
33
  #include <ServerKit/FdSinkChannel.h>
@@ -67,6 +68,7 @@ public:
67
68
 
68
69
  // Range: 0..MAX_SESSION_CHECKOUT_TRY
69
70
  boost::uint8_t sessionCheckoutTry;
71
+ bool appResponseInitialized: 1;
70
72
  bool strip100ContinueHeader: 1;
71
73
  bool hasPragmaHeader: 1;
72
74
 
@@ -100,6 +102,12 @@ public:
100
102
  #endif
101
103
 
102
104
 
105
+ Request()
106
+ : BaseHttpRequest()
107
+ {
108
+ memset(&scopeLogs, 0, sizeof(scopeLogs));
109
+ }
110
+
103
111
  const char *getStateString() const {
104
112
  switch (state) {
105
113
  case ANALYZING_REQUEST:
@@ -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
  *
@@ -28,6 +28,7 @@
28
28
  #include <oxt/backtrace.hpp>
29
29
  #include <ev++.h>
30
30
  #include <ctime>
31
+ #include <cstddef>
31
32
  #include <cassert>
32
33
  #include <MemoryKit/mbuf.h>
33
34
  #include <ServerKit/Context.h>
@@ -176,8 +177,8 @@ private:
176
177
 
177
178
  #ifndef NDEBUG
178
179
  if (output != NULL) {
179
- assert(pos - output == result);
180
- assert(pos - output <= outputSize);
180
+ assert(size_t(pos - output) == size_t(result));
181
+ assert(size_t(pos - output) <= size_t(outputSize));
181
182
  }
182
183
  #endif
183
184
  return result;
@@ -1,6 +1,6 @@
1
1
  /*
2
2
  * Phusion Passenger - https://www.phusionpassenger.com/
3
- * Copyright (c) 2013-2014 Phusion
3
+ * Copyright (c) 2013-2015 Phusion
4
4
  *
5
5
  * "Phusion Passenger" is a trademark of Hongli Lai & Ninh Bui.
6
6
  *
@@ -159,9 +159,17 @@ private:
159
159
 
160
160
  HeaderTable headers;
161
161
  Json::Value doc;
162
+ string logFile = getLogFile();
163
+ string fileDescriptorLogFile = getFileDescriptorLogFile();
162
164
 
163
165
  headers.insert(req->pool, "content-type", "application/json");
164
166
  doc["log_level"] = getLogLevel();
167
+ if (!logFile.empty()) {
168
+ doc["log_file"] = logFile;
169
+ }
170
+ if (!fileDescriptorLogFile.empty()) {
171
+ doc["file_descriptor_log_file"] = fileDescriptorLogFile;
172
+ }
165
173
 
166
174
  writeSimpleResponse(client, 200, &headers, doc.toStyledString());
167
175
  if (!req->ended()) {
@@ -189,8 +197,24 @@ private:
189
197
  setLogLevel(json["log_level"].asInt());
190
198
  }
191
199
  if (json.isMember("log_file")) {
192
- if (!setLogFile(json["log_file"].asCString())) {
193
- int e = errno;
200
+ string logFile = json["log_file"].asString();
201
+ try {
202
+ logFile = absolutizePath(logFile);
203
+ } catch (const SystemException &e) {
204
+ unsigned int bufsize = 1024;
205
+ char *message = (char *) psg_pnalloc(req->pool, bufsize);
206
+ snprintf(message, bufsize, "{ \"status\": \"error\", "
207
+ "\"message\": \"Cannot absolutize log file filename: %s\" }",
208
+ e.what());
209
+ writeSimpleResponse(client, 500, &headers, message);
210
+ if (!req->ended()) {
211
+ endRequest(&client, &req);
212
+ }
213
+ return;
214
+ }
215
+
216
+ int e;
217
+ if (!setLogFile(logFile, &e)) {
194
218
  unsigned int bufsize = 1024;
195
219
  char *message = (char *) psg_pnalloc(req->pool, bufsize);
196
220
  snprintf(message, bufsize, "{ \"status\": \"error\", "
@@ -215,6 +239,7 @@ private:
215
239
  if (req->method != HTTP_POST) {
216
240
  respondWith405(client, req);
217
241
  } else if (authorize(client, req, FULL)) {
242
+ int e;
218
243
  HeaderTable headers;
219
244
  headers.insert(req->pool, "content-type", "application/json");
220
245
 
@@ -223,25 +248,46 @@ private:
223
248
  writeSimpleResponse(client, 500, &headers, "{ \"status\": \"error\", "
224
249
  "\"code\": \"NO_LOG_FILE\", "
225
250
  "\"message\": \"" PROGRAM_NAME " was not configured with a log file.\" }\n");
226
- } else {
227
- if (!setLogFile(logFile.c_str())) {
228
- int e = errno;
251
+ if (!req->ended()) {
252
+ endRequest(&client, &req);
253
+ }
254
+ return;
255
+ }
256
+
257
+ if (!setLogFile(logFile, &e)) {
258
+ unsigned int bufsize = 1024;
259
+ char *message = (char *) psg_pnalloc(req->pool, bufsize);
260
+ snprintf(message, bufsize, "{ \"status\": \"error\", "
261
+ "\"code\": \"LOG_FILE_OPEN_ERROR\", "
262
+ "\"message\": \"Cannot reopen log file %s: %s (errno=%d)\" }",
263
+ logFile.c_str(), strerror(e), e);
264
+ writeSimpleResponse(client, 500, &headers, message);
265
+ if (!req->ended()) {
266
+ endRequest(&client, &req);
267
+ }
268
+ return;
269
+ }
270
+ P_NOTICE("Log file reopened.");
271
+
272
+ if (hasFileDescriptorLogFile()) {
273
+ if (!setFileDescriptorLogFile(getFileDescriptorLogFile(), &e)) {
229
274
  unsigned int bufsize = 1024;
230
275
  char *message = (char *) psg_pnalloc(req->pool, bufsize);
231
276
  snprintf(message, bufsize, "{ \"status\": \"error\", "
232
- "\"code\": \"LOG_FILE_OPEN_ERROR\", "
233
- "\"message\": \"Cannot reopen log file: %s (errno=%d)\" }",
234
- strerror(e), e);
277
+ "\"code\": \"FD_LOG_FILE_OPEN_ERROR\", "
278
+ "\"message\": \"Cannot reopen file descriptor log file %s: %s (errno=%d)\" }",
279
+ getFileDescriptorLogFile().c_str(), strerror(e), e);
235
280
  writeSimpleResponse(client, 500, &headers, message);
236
281
  if (!req->ended()) {
237
282
  endRequest(&client, &req);
238
283
  }
239
284
  return;
240
285
  }
241
- P_NOTICE("Log file reopened.");
242
- writeSimpleResponse(client, 200, &headers, "{ \"status\": \"ok\" }\n");
286
+ P_NOTICE("File descriptor log file reopened.");
243
287
  }
244
288
 
289
+ writeSimpleResponse(client, 200, &headers, "{ \"status\": \"ok\" }\n");
290
+
245
291
  if (!req->ended()) {
246
292
  endRequest(&client, &req);
247
293
  }
@@ -1,6 +1,6 @@
1
1
  /*
2
2
  * Phusion Passenger - https://www.phusionpassenger.com/
3
- * Copyright (c) 2010-2014 Phusion
3
+ * Copyright (c) 2010-2015 Phusion
4
4
  *
5
5
  * "Phusion Passenger" is a trademark of Hongli Lai & Ninh Bui.
6
6
  *
@@ -157,9 +157,9 @@ private:
157
157
  } else {
158
158
  this->filename = filename;
159
159
  }
160
- fd = syscalls::open(filename.c_str(),
160
+ fd.assign(syscalls::open(filename.c_str(),
161
161
  O_CREAT | O_WRONLY | O_APPEND,
162
- 0600);
162
+ 0600), __FILE__, __LINE__);
163
163
  if (fd == -1) {
164
164
  int e = errno;
165
165
  throw FileSystemException("Cannnot open file", e, filename);
@@ -1,6 +1,6 @@
1
1
  /*
2
2
  * Phusion Passenger - https://www.phusionpassenger.com/
3
- * Copyright (c) 2010-2014 Phusion
3
+ * Copyright (c) 2010-2015 Phusion
4
4
  *
5
5
  * "Phusion Passenger" is a trademark of Hongli Lai & Ninh Bui.
6
6
  *
@@ -91,6 +91,8 @@ namespace LoggingAgent {
91
91
  bgloop(NULL),
92
92
  serverKitContext(NULL),
93
93
  loggingServer(NULL),
94
+ exitEvent(__FILE__, __LINE__, "WorkingObjects: exitEvent"),
95
+ allClientsDisconnectedEvent(__FILE__, __LINE__, "WorkingObjects: allClientsDisconnectedEvent"),
94
96
  terminationCount(0)
95
97
  { }
96
98
  };
@@ -201,7 +203,10 @@ startListening() {
201
203
  vector<string> adminAddresses;
202
204
 
203
205
  address = options.get("logging_agent_address");
204
- wo->serverSocketFd = createServer(address.c_str());
206
+ wo->serverSocketFd.assign(createServer(address, 0, true,
207
+ __FILE__, __LINE__), NULL, 0);
208
+ P_LOG_FILE_DESCRIPTOR_PURPOSE(wo->serverSocketFd,
209
+ "Server address: " << wo->serverSocketFd);
205
210
  if (getSocketAddressType(address) == SAT_UNIX) {
206
211
  makeFileWorldReadableAndWritable(parseUnixSocketAddress(address));
207
212
  }
@@ -210,7 +215,10 @@ startListening() {
210
215
  adminAddresses = options.getStrSet("logging_agent_admin_addresses",
211
216
  false);
212
217
  foreach (address, adminAddresses) {
213
- wo->adminSockets.push_back(createServer(address));
218
+ wo->adminSockets.push_back(createServer(address, 0, true,
219
+ __FILE__, __LINE__));
220
+ P_LOG_FILE_DESCRIPTOR_PURPOSE(wo->adminSockets.back(),
221
+ "Server address: " << wo->adminSockets.back());
214
222
  if (getSocketAddressType(address) == SAT_UNIX) {
215
223
  makeFileWorldReadableAndWritable(parseUnixSocketAddress(address));
216
224
  }
@@ -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
  *
@@ -177,12 +177,16 @@ private:
177
177
  HeaderTable headers;
178
178
  Json::Value doc;
179
179
  string logFile = getLogFile();
180
+ string fileDescriptorLogFile = getFileDescriptorLogFile();
180
181
 
181
182
  headers.insert(req->pool, "content-type", "application/json");
182
183
  doc["log_level"] = getLogLevel();
183
184
  if (!logFile.empty()) {
184
185
  doc["log_file"] = logFile;
185
186
  }
187
+ if (!fileDescriptorLogFile.empty()) {
188
+ doc["file_descriptor_log_file"] = fileDescriptorLogFile;
189
+ }
186
190
 
187
191
  writeSimpleResponse(client, 200, &headers, doc.toStyledString());
188
192
  if (!req->ended()) {
@@ -210,8 +214,24 @@ private:
210
214
  setLogLevel(json["log_level"].asInt());
211
215
  }
212
216
  if (json.isMember("log_file")) {
213
- if (!setLogFile(json["log_file"].asCString())) {
214
- int e = errno;
217
+ string logFile = json["log_file"].asString();
218
+ try {
219
+ logFile = absolutizePath(logFile);
220
+ } catch (const SystemException &e) {
221
+ unsigned int bufsize = 1024;
222
+ char *message = (char *) psg_pnalloc(req->pool, bufsize);
223
+ snprintf(message, bufsize, "{ \"status\": \"error\", "
224
+ "\"message\": \"Cannot absolutize log file filename: %s\" }",
225
+ e.what());
226
+ writeSimpleResponse(client, 500, &headers, message);
227
+ if (!req->ended()) {
228
+ endRequest(&client, &req);
229
+ }
230
+ return;
231
+ }
232
+
233
+ int e;
234
+ if (!setLogFile(logFile, &e)) {
215
235
  unsigned int bufsize = 1024;
216
236
  char *message = (char *) psg_pnalloc(req->pool, bufsize);
217
237
  snprintf(message, bufsize, "{ \"status\": \"error\", "
@@ -236,6 +256,7 @@ private:
236
256
  if (req->method != HTTP_POST) {
237
257
  respondWith405(client, req);
238
258
  } else if (authorize(client, req, FULL)) {
259
+ int e;
239
260
  HeaderTable headers;
240
261
  headers.insert(req->pool, "content-type", "application/json");
241
262
 
@@ -244,25 +265,46 @@ private:
244
265
  writeSimpleResponse(client, 500, &headers, "{ \"status\": \"error\", "
245
266
  "\"code\": \"NO_LOG_FILE\", "
246
267
  "\"message\": \"" PROGRAM_NAME " was not configured with a log file.\" }\n");
247
- } else {
248
- if (!setLogFile(logFile.c_str())) {
249
- int e = errno;
268
+ if (!req->ended()) {
269
+ endRequest(&client, &req);
270
+ }
271
+ return;
272
+ }
273
+
274
+ if (!setLogFile(logFile, &e)) {
275
+ unsigned int bufsize = 1024;
276
+ char *message = (char *) psg_pnalloc(req->pool, bufsize);
277
+ snprintf(message, bufsize, "{ \"status\": \"error\", "
278
+ "\"code\": \"LOG_FILE_OPEN_ERROR\", "
279
+ "\"message\": \"Cannot reopen log file %s: %s (errno=%d)\" }",
280
+ logFile.c_str(), strerror(e), e);
281
+ writeSimpleResponse(client, 500, &headers, message);
282
+ if (!req->ended()) {
283
+ endRequest(&client, &req);
284
+ }
285
+ return;
286
+ }
287
+ P_NOTICE("Log file reopened.");
288
+
289
+ if (hasFileDescriptorLogFile()) {
290
+ if (!setFileDescriptorLogFile(getFileDescriptorLogFile(), &e)) {
250
291
  unsigned int bufsize = 1024;
251
292
  char *message = (char *) psg_pnalloc(req->pool, bufsize);
252
293
  snprintf(message, bufsize, "{ \"status\": \"error\", "
253
- "\"code\": \"LOG_FILE_OPEN_ERROR\", "
254
- "\"message\": \"Cannot reopen log file: %s (errno=%d)\" }",
255
- strerror(e), e);
294
+ "\"code\": \"FD_LOG_FILE_OPEN_ERROR\", "
295
+ "\"message\": \"Cannot reopen file descriptor log file %s: %s (errno=%d)\" }",
296
+ getFileDescriptorLogFile().c_str(), strerror(e), e);
256
297
  writeSimpleResponse(client, 500, &headers, message);
257
298
  if (!req->ended()) {
258
299
  endRequest(&client, &req);
259
300
  }
260
301
  return;
261
302
  }
262
- P_NOTICE("Log file reopened.");
263
- writeSimpleResponse(client, 200, &headers, "{ \"status\": \"ok\" }\n");
303
+ P_NOTICE("File descriptor log file reopened.");
264
304
  }
265
305
 
306
+ writeSimpleResponse(client, 200, &headers, "{ \"status\": \"ok\" }\n");
307
+
266
308
  if (!req->ended()) {
267
309
  endRequest(&client, &req);
268
310
  }