passenger 4.0.20 → 4.0.21

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 (496) hide show
  1. checksums.yaml +8 -8
  2. checksums.yaml.gz.asc +7 -7
  3. data.tar.gz.asc +7 -7
  4. data/.gitignore +1 -0
  5. data/.travis.yml +1 -1
  6. data/NEWS +15 -0
  7. data/README.md +5 -3
  8. data/Rakefile +1 -0
  9. data/bin/passenger-config +1 -5
  10. data/bin/passenger-install-apache2-module +53 -5
  11. data/bin/passenger-install-nginx-module +19 -6
  12. data/bin/passenger-memory-stats +3 -3
  13. data/build/agents.rb +11 -8
  14. data/build/apache2.rb +9 -5
  15. data/build/basics.rb +15 -21
  16. data/build/common_library.rb +16 -6
  17. data/build/cplusplus_support.rb +5 -5
  18. data/build/cxx_tests.rb +3 -3
  19. data/build/documentation.rb +1 -1
  20. data/build/misc.rb +4 -37
  21. data/build/node_tests.rb +29 -0
  22. data/build/oxt_tests.rb +1 -1
  23. data/build/packaging.rb +29 -10
  24. data/build/preprocessor.rb +2 -1
  25. data/build/test_basics.rb +15 -6
  26. data/debian.template/locations.ini.template +1 -0
  27. data/debian.template/passenger.install.template +1 -0
  28. data/dev/copy_boost_headers.rb +7 -3
  29. data/dev/run_travis.sh +32 -16
  30. data/doc/Users guide Apache.idmap.txt +22 -34
  31. data/doc/Users guide Apache.txt +20 -234
  32. data/doc/Users guide Nginx.idmap.txt +84 -66
  33. data/doc/Users guide Nginx.txt +50 -1
  34. data/doc/Users guide Standalone.idmap.txt +74 -0
  35. data/doc/Users guide Standalone.txt +22 -9
  36. data/doc/Users guide.txt +51 -0
  37. data/doc/users_guide_snippets/environment_variables.txt +0 -3
  38. data/doc/users_guide_snippets/installation.txt +337 -380
  39. data/doc/users_guide_snippets/installation/run_installer.txt +58 -0
  40. data/doc/users_guide_snippets/installation/verify_running_epilogue.txt +6 -0
  41. data/doc/users_guide_snippets/support_information.txt +2 -9
  42. data/doc/users_guide_snippets/troubleshooting/default.txt +112 -0
  43. data/doc/users_guide_snippets/troubleshooting/rails.txt +56 -0
  44. data/doc/users_guide_snippets/where_to_get_support.txt +9 -0
  45. data/ext/apache2/Bucket.h +1 -1
  46. data/ext/apache2/Configuration.hpp +0 -44
  47. data/ext/apache2/CreateDirConfig.cpp +1 -1
  48. data/ext/apache2/CreateDirConfig.cpp.erb +1 -1
  49. data/ext/apache2/Hooks.cpp +28 -21
  50. data/ext/apache2/MergeDirConfig.cpp +1 -0
  51. data/ext/apache2/MergeDirConfig.cpp.erb +1 -1
  52. data/ext/apache2/SetHeaders.cpp +73 -0
  53. data/ext/apache2/SetHeaders.cpp.erb +88 -0
  54. data/ext/boost/algorithm/string/detail/find_format.hpp +5 -5
  55. data/ext/boost/algorithm/string/detail/find_format_all.hpp +5 -5
  56. data/ext/boost/algorithm/string/detail/finder.hpp +1 -1
  57. data/ext/boost/algorithm/string/formatter.hpp +2 -2
  58. data/ext/boost/assert.hpp +6 -1
  59. data/ext/boost/atomic.hpp +18 -0
  60. data/ext/boost/atomic/atomic.hpp +241 -0
  61. data/ext/boost/atomic/detail/base.hpp +585 -0
  62. data/ext/boost/atomic/detail/cas32strong.hpp +885 -0
  63. data/ext/boost/atomic/detail/cas32weak.hpp +947 -0
  64. data/ext/boost/atomic/detail/cas64strong.hpp +443 -0
  65. data/ext/boost/atomic/detail/config.hpp +54 -0
  66. data/ext/boost/atomic/detail/gcc-alpha.hpp +368 -0
  67. data/ext/boost/atomic/detail/gcc-armv6plus.hpp +252 -0
  68. data/ext/boost/atomic/detail/gcc-cas.hpp +157 -0
  69. data/ext/boost/atomic/detail/gcc-ppc.hpp +2850 -0
  70. data/ext/boost/atomic/detail/gcc-sparcv9.hpp +1259 -0
  71. data/ext/boost/atomic/detail/gcc-x86.hpp +1766 -0
  72. data/ext/boost/atomic/detail/generic-cas.hpp +206 -0
  73. data/ext/boost/atomic/detail/interlocked.hpp +200 -0
  74. data/ext/boost/atomic/detail/linux-arm.hpp +189 -0
  75. data/ext/boost/atomic/detail/lockpool.hpp +97 -0
  76. data/ext/boost/atomic/detail/platform.hpp +62 -0
  77. data/ext/boost/atomic/detail/type-classification.hpp +45 -0
  78. data/ext/boost/chrono/config.hpp +8 -3
  79. data/ext/boost/chrono/duration.hpp +9 -10
  80. data/ext/boost/chrono/system_clocks.hpp +1 -1
  81. data/ext/boost/chrono/time_point.hpp +4 -3
  82. data/ext/boost/config/auto_link.hpp +53 -52
  83. data/ext/boost/config/compiler/borland.hpp +1 -0
  84. data/ext/boost/config/compiler/clang.hpp +24 -1
  85. data/ext/boost/config/compiler/codegear.hpp +1 -0
  86. data/ext/boost/config/compiler/common_edg.hpp +1 -0
  87. data/ext/boost/config/compiler/cray.hpp +1 -0
  88. data/ext/boost/config/compiler/digitalmars.hpp +1 -0
  89. data/ext/boost/config/compiler/gcc.hpp +29 -3
  90. data/ext/boost/config/compiler/gcc_xml.hpp +2 -1
  91. data/ext/boost/config/compiler/hp_acc.hpp +1 -0
  92. data/ext/boost/config/compiler/intel.hpp +1 -1
  93. data/ext/boost/config/compiler/metrowerks.hpp +1 -0
  94. data/ext/boost/config/compiler/mpw.hpp +1 -0
  95. data/ext/boost/config/compiler/pathscale.hpp +1 -0
  96. data/ext/boost/config/compiler/pgi.hpp +1 -0
  97. data/ext/boost/config/compiler/sunpro_cc.hpp +1 -0
  98. data/ext/boost/config/compiler/vacpp.hpp +3 -2
  99. data/ext/boost/config/compiler/visualc.hpp +25 -11
  100. data/ext/boost/config/platform/vxworks.hpp +353 -15
  101. data/ext/boost/config/select_compiler_config.hpp +4 -4
  102. data/ext/boost/config/stdlib/dinkumware.hpp +10 -3
  103. data/ext/boost/config/stdlib/libstdcpp3.hpp +2 -1
  104. data/ext/boost/config/suffix.hpp +45 -19
  105. data/ext/boost/date_time/format_date_parser.hpp +1 -11
  106. data/ext/boost/date_time/strings_from_facet.hpp +5 -3
  107. data/ext/boost/detail/atomic_redef_macros.hpp +19 -0
  108. data/ext/boost/detail/atomic_undef_macros.hpp +39 -0
  109. data/ext/boost/detail/endian.hpp +52 -4
  110. data/ext/boost/detail/scoped_enum_emulation.hpp +10 -10
  111. data/ext/boost/detail/select_type.hpp +36 -0
  112. data/ext/boost/exception/current_exception_cast.hpp +1 -1
  113. data/ext/boost/exception/detail/error_info_impl.hpp +3 -5
  114. data/ext/boost/exception/detail/exception_ptr.hpp +3 -3
  115. data/ext/boost/exception/detail/is_output_streamable.hpp +1 -1
  116. data/ext/boost/exception/detail/object_hex_dump.hpp +1 -1
  117. data/ext/boost/exception/detail/type_info.hpp +1 -1
  118. data/ext/boost/exception/diagnostic_information.hpp +15 -14
  119. data/ext/boost/exception/exception.hpp +1 -1
  120. data/ext/boost/exception/get_error_info.hpp +1 -1
  121. data/ext/boost/exception/info.hpp +12 -13
  122. data/ext/boost/exception/to_string.hpp +6 -1
  123. data/ext/boost/exception/to_string_stub.hpp +9 -1
  124. data/ext/boost/foreach.hpp +5 -5
  125. data/ext/boost/function/function_template.hpp +6 -6
  126. data/ext/boost/functional/hash/detail/float_functions.hpp +90 -0
  127. data/ext/boost/functional/hash/detail/hash_float.hpp +11 -2
  128. data/ext/boost/functional/hash/extensions.hpp +14 -2
  129. data/ext/boost/functional/hash/hash.hpp +26 -5
  130. data/ext/boost/get_pointer.hpp +17 -2
  131. data/ext/boost/integer_traits.hpp +1 -1
  132. data/ext/boost/lexical_cast.hpp +615 -395
  133. data/ext/boost/libs/atomic/lockpool.cpp +24 -0
  134. data/ext/boost/libs/system/src/error_code.cpp +25 -18
  135. data/ext/boost/libs/thread/src/future.cpp +7 -5
  136. data/ext/boost/libs/thread/src/pthread/once.cpp +9 -3
  137. data/ext/boost/libs/thread/src/pthread/once_atomic.cpp +90 -0
  138. data/ext/boost/libs/thread/src/pthread/thread.cpp +129 -95
  139. data/ext/boost/libs/thread/src/pthread/timeconv.inl +20 -1
  140. data/ext/boost/limits.hpp +1 -1
  141. data/ext/boost/math/policies/policy.hpp +10 -0
  142. data/ext/boost/math/special_functions/detail/round_fwd.hpp +17 -4
  143. data/ext/boost/math/special_functions/fpclassify.hpp +114 -45
  144. data/ext/boost/math/special_functions/math_fwd.hpp +195 -83
  145. data/ext/boost/math/special_functions/sign.hpp +13 -8
  146. data/ext/boost/math/tools/config.hpp +38 -16
  147. data/ext/boost/move/algorithm.hpp +275 -0
  148. data/ext/boost/move/core.hpp +332 -0
  149. data/ext/boost/move/detail/config_begin.hpp +23 -0
  150. data/ext/boost/move/detail/config_end.hpp +20 -0
  151. data/ext/boost/move/detail/meta_utils.hpp +158 -0
  152. data/ext/boost/move/iterator.hpp +298 -0
  153. data/ext/boost/move/move.hpp +10 -1256
  154. data/ext/boost/move/traits.hpp +142 -0
  155. data/ext/boost/move/utility.hpp +194 -0
  156. data/ext/boost/mpl/assert.hpp +72 -4
  157. data/ext/boost/noncopyable.hpp +15 -3
  158. data/ext/boost/pointer_to_other.hpp +55 -0
  159. data/ext/boost/range/concepts.hpp +4 -4
  160. data/ext/boost/range/detail/extract_optional_type.hpp +1 -1
  161. data/ext/boost/range/empty.hpp +1 -1
  162. data/ext/boost/range/iterator_range_core.hpp +4 -1
  163. data/ext/boost/range/iterator_range_io.hpp +2 -2
  164. data/ext/boost/ratio/config.hpp +6 -0
  165. data/ext/boost/ratio/detail/overflow_helpers.hpp +2 -2
  166. data/ext/boost/smart_ptr/allocate_shared_array.hpp +250 -0
  167. data/ext/boost/smart_ptr/detail/allocate_array_helper.hpp +169 -0
  168. data/ext/boost/smart_ptr/detail/array_deleter.hpp +124 -0
  169. data/ext/boost/smart_ptr/detail/array_traits.hpp +53 -0
  170. data/ext/boost/smart_ptr/detail/array_utility.hpp +178 -0
  171. data/ext/boost/smart_ptr/detail/make_array_helper.hpp +157 -0
  172. data/ext/boost/smart_ptr/detail/operator_bool.hpp +16 -9
  173. data/ext/boost/smart_ptr/detail/shared_count.hpp +78 -7
  174. data/ext/boost/smart_ptr/detail/sp_convertible.hpp +15 -0
  175. data/ext/boost/smart_ptr/detail/sp_counted_base.hpp +12 -6
  176. data/ext/boost/smart_ptr/detail/sp_counted_base_acc_ia64.hpp +1 -0
  177. data/ext/boost/smart_ptr/detail/sp_counted_base_aix.hpp +1 -0
  178. data/ext/boost/smart_ptr/detail/sp_counted_base_cw_ppc.hpp +1 -0
  179. data/ext/boost/smart_ptr/detail/sp_counted_base_cw_x86.hpp +1 -0
  180. data/ext/boost/smart_ptr/detail/sp_counted_base_gcc_ia64.hpp +1 -0
  181. data/ext/boost/smart_ptr/detail/sp_counted_base_gcc_mips.hpp +1 -0
  182. data/ext/boost/smart_ptr/detail/sp_counted_base_gcc_ppc.hpp +1 -0
  183. data/ext/boost/smart_ptr/detail/sp_counted_base_gcc_sparc.hpp +1 -0
  184. data/ext/boost/smart_ptr/detail/sp_counted_base_gcc_x86.hpp +1 -0
  185. data/ext/boost/smart_ptr/detail/sp_counted_base_nt.hpp +1 -0
  186. data/ext/boost/smart_ptr/detail/sp_counted_base_pt.hpp +1 -0
  187. data/ext/boost/smart_ptr/detail/sp_counted_base_snc_ps3.hpp +162 -0
  188. data/ext/boost/smart_ptr/detail/sp_counted_base_solaris.hpp +1 -0
  189. data/ext/boost/smart_ptr/detail/sp_counted_base_spin.hpp +1 -0
  190. data/ext/boost/smart_ptr/detail/sp_counted_base_sync.hpp +1 -0
  191. data/ext/boost/smart_ptr/detail/sp_counted_base_vacpp_ppc.hpp +1 -0
  192. data/ext/boost/smart_ptr/detail/sp_counted_impl.hpp +15 -0
  193. data/ext/boost/smart_ptr/detail/sp_forward.hpp +39 -0
  194. data/ext/boost/smart_ptr/detail/sp_has_sync.hpp +19 -3
  195. data/ext/boost/smart_ptr/detail/sp_if_array.hpp +31 -0
  196. data/ext/boost/smart_ptr/detail/sp_nullptr_t.hpp +45 -0
  197. data/ext/boost/smart_ptr/detail/spinlock_gcc_arm.hpp +5 -12
  198. data/ext/boost/smart_ptr/enable_shared_from_this.hpp +4 -4
  199. data/ext/boost/smart_ptr/make_shared.hpp +5 -1060
  200. data/ext/boost/smart_ptr/make_shared_array.hpp +247 -0
  201. data/ext/boost/smart_ptr/make_shared_object.hpp +1128 -0
  202. data/ext/boost/smart_ptr/scoped_array.hpp +32 -7
  203. data/ext/boost/smart_ptr/scoped_ptr.hpp +31 -5
  204. data/ext/boost/smart_ptr/shared_array.hpp +135 -20
  205. data/ext/boost/smart_ptr/shared_ptr.hpp +444 -126
  206. data/ext/boost/smart_ptr/weak_ptr.hpp +39 -28
  207. data/ext/boost/static_assert.hpp +74 -17
  208. data/ext/boost/system/error_code.hpp +76 -68
  209. data/ext/boost/system/system_error.hpp +5 -1
  210. data/ext/boost/thread/barrier.hpp +6 -2
  211. data/ext/boost/thread/completion_latch.hpp +233 -0
  212. data/ext/boost/thread/condition.hpp +6 -1
  213. data/ext/boost/thread/detail/async_func.hpp +571 -0
  214. data/ext/boost/thread/detail/config.hpp +248 -40
  215. data/ext/boost/thread/detail/counter.hpp +93 -0
  216. data/ext/boost/thread/detail/delete.hpp +12 -0
  217. data/ext/boost/thread/detail/invoke.hpp +1351 -0
  218. data/ext/boost/thread/detail/is_convertible.hpp +48 -0
  219. data/ext/boost/thread/detail/lockable_wrapper.hpp +45 -0
  220. data/ext/boost/thread/detail/log.hpp +83 -0
  221. data/ext/boost/thread/detail/make_tuple_indices.hpp +224 -0
  222. data/ext/boost/thread/detail/move.hpp +32 -16
  223. data/ext/boost/thread/detail/thread.hpp +236 -41
  224. data/ext/boost/thread/detail/thread_group.hpp +55 -9
  225. data/ext/boost/thread/detail/thread_interruption.hpp +4 -1
  226. data/ext/boost/thread/exceptions.hpp +2 -0
  227. data/ext/boost/thread/externally_locked.hpp +351 -0
  228. data/ext/boost/thread/externally_locked_stream.hpp +170 -0
  229. data/ext/boost/thread/future.hpp +2517 -455
  230. data/ext/boost/thread/future_error_code.hpp +61 -0
  231. data/ext/boost/thread/is_locked_by_this_thread.hpp +39 -0
  232. data/ext/boost/thread/latch.hpp +142 -0
  233. data/ext/boost/thread/lock_algorithms.hpp +468 -0
  234. data/ext/boost/thread/lock_concepts.hpp +197 -0
  235. data/ext/boost/thread/lock_factories.hpp +78 -0
  236. data/ext/boost/thread/lock_guard.hpp +88 -0
  237. data/ext/boost/thread/lock_options.hpp +31 -0
  238. data/ext/boost/thread/lock_traits.hpp +45 -0
  239. data/ext/boost/thread/lock_types.hpp +1226 -0
  240. data/ext/boost/thread/lockable_adapter.hpp +226 -0
  241. data/ext/boost/thread/lockable_concepts.hpp +157 -0
  242. data/ext/boost/thread/lockable_traits.hpp +207 -0
  243. data/ext/boost/thread/locks.hpp +5 -1816
  244. data/ext/boost/thread/mutex.hpp +33 -1
  245. data/ext/boost/thread/null_mutex.hpp +243 -0
  246. data/ext/boost/thread/once.hpp +10 -1
  247. data/ext/boost/thread/poly_lockable.hpp +68 -0
  248. data/ext/boost/thread/poly_lockable_adapter.hpp +89 -0
  249. data/ext/boost/thread/poly_shared_lockable.hpp +135 -0
  250. data/ext/boost/thread/poly_shared_lockable_adapter.hpp +170 -0
  251. data/ext/boost/thread/pthread/condition_variable.hpp +74 -26
  252. data/ext/boost/thread/pthread/condition_variable_fwd.hpp +54 -27
  253. data/ext/boost/thread/pthread/mutex.hpp +101 -38
  254. data/ext/boost/thread/pthread/once.hpp +459 -44
  255. data/ext/boost/thread/pthread/once_atomic.hpp +313 -0
  256. data/ext/boost/thread/pthread/recursive_mutex.hpp +19 -10
  257. data/ext/boost/thread/pthread/shared_mutex.hpp +226 -61
  258. data/ext/boost/thread/pthread/shared_mutex_assert.hpp +724 -0
  259. data/ext/boost/thread/pthread/thread_data.hpp +53 -50
  260. data/ext/boost/thread/pthread/timespec.hpp +96 -12
  261. data/ext/boost/thread/recursive_mutex.hpp +44 -1
  262. data/ext/boost/thread/reverse_lock.hpp +3 -2
  263. data/ext/boost/thread/scoped_thread.hpp +285 -0
  264. data/ext/boost/thread/shared_lock_guard.hpp +2 -1
  265. data/ext/boost/thread/shared_mutex.hpp +23 -0
  266. data/ext/boost/thread/strict_lock.hpp +235 -0
  267. data/ext/boost/thread/sync_bounded_queue.hpp +594 -0
  268. data/ext/boost/thread/sync_queue.hpp +516 -0
  269. data/ext/boost/thread/synchronized_value.hpp +1001 -0
  270. data/ext/boost/thread/testable_mutex.hpp +148 -0
  271. data/ext/boost/thread/thread.hpp +1 -13
  272. data/ext/boost/thread/thread_functors.hpp +57 -0
  273. data/ext/boost/thread/thread_guard.hpp +46 -0
  274. data/ext/boost/thread/thread_only.hpp +29 -0
  275. data/ext/boost/thread/v2/shared_mutex.hpp +1062 -0
  276. data/ext/boost/thread/v2/thread.hpp +37 -10
  277. data/ext/boost/thread/xtime.hpp +2 -1
  278. data/ext/boost/token_functions.hpp +16 -16
  279. data/ext/boost/type_traits/add_lvalue_reference.hpp +26 -0
  280. data/ext/boost/type_traits/add_reference.hpp +1 -1
  281. data/ext/boost/type_traits/add_rvalue_reference.hpp +4 -4
  282. data/ext/boost/type_traits/aligned_storage.hpp +13 -0
  283. data/ext/boost/type_traits/common_type.hpp +11 -12
  284. data/ext/boost/type_traits/config.hpp +1 -1
  285. data/ext/boost/type_traits/detail/common_type_imp.hpp +1 -1
  286. data/ext/boost/type_traits/detail/has_binary_operator.hpp +1 -1
  287. data/ext/boost/type_traits/detail/is_function_ptr_tester.hpp +1 -1
  288. data/ext/boost/type_traits/has_left_shift.hpp +49 -0
  289. data/ext/boost/type_traits/has_right_shift.hpp +49 -0
  290. data/ext/boost/type_traits/has_trivial_move_assign.hpp +57 -0
  291. data/ext/boost/type_traits/has_trivial_move_constructor.hpp +57 -0
  292. data/ext/boost/type_traits/intrinsics.hpp +18 -2
  293. data/ext/boost/type_traits/is_abstract.hpp +1 -1
  294. data/ext/boost/type_traits/is_array.hpp +1 -1
  295. data/ext/boost/type_traits/is_const.hpp +1 -1
  296. data/ext/boost/type_traits/is_convertible.hpp +78 -17
  297. data/ext/boost/type_traits/is_function.hpp +6 -1
  298. data/ext/boost/type_traits/is_integral.hpp +6 -1
  299. data/ext/boost/type_traits/is_nothrow_move_assignable.hpp +84 -0
  300. data/ext/boost/type_traits/is_nothrow_move_constructible.hpp +84 -0
  301. data/ext/boost/type_traits/is_pod.hpp +3 -1
  302. data/ext/boost/type_traits/is_rvalue_reference.hpp +1 -1
  303. data/ext/boost/type_traits/is_volatile.hpp +1 -1
  304. data/ext/boost/type_traits/make_signed.hpp +153 -0
  305. data/ext/boost/type_traits/make_unsigned.hpp +16 -0
  306. data/ext/boost/type_traits/remove_const.hpp +1 -1
  307. data/ext/boost/type_traits/remove_cv.hpp +1 -1
  308. data/ext/boost/type_traits/remove_reference.hpp +1 -1
  309. data/ext/boost/type_traits/remove_volatile.hpp +1 -1
  310. data/ext/boost/unordered/detail/allocate.hpp +1120 -0
  311. data/ext/boost/unordered/detail/buckets.hpp +876 -0
  312. data/ext/boost/unordered/detail/equivalent.hpp +680 -0
  313. data/ext/boost/unordered/detail/extract_key.hpp +183 -0
  314. data/ext/boost/unordered/detail/fwd.hpp +23 -0
  315. data/ext/boost/unordered/detail/table.hpp +861 -0
  316. data/ext/boost/unordered/detail/unique.hpp +622 -0
  317. data/ext/boost/unordered/detail/util.hpp +260 -0
  318. data/ext/boost/unordered/unordered_map.hpp +1652 -0
  319. data/ext/boost/unordered/unordered_map_fwd.hpp +65 -0
  320. data/ext/boost/unordered/unordered_set.hpp +1549 -0
  321. data/ext/boost/unordered/unordered_set_fwd.hpp +63 -0
  322. data/ext/boost/unordered_map.hpp +18 -0
  323. data/ext/boost/unordered_set.hpp +18 -0
  324. data/ext/boost/utility/addressof.hpp +2 -2
  325. data/ext/boost/utility/result_of.hpp +8 -1
  326. data/ext/boost/version.hpp +2 -2
  327. data/ext/common/Account.h +1 -1
  328. data/ext/common/AccountsDatabase.h +1 -1
  329. data/ext/common/AgentsStarter.cpp +3 -1
  330. data/ext/common/AgentsStarter.h +2 -2
  331. data/ext/common/ApplicationPool2/AppTypes.cpp +24 -6
  332. data/ext/common/ApplicationPool2/AppTypes.h +17 -8
  333. data/ext/common/ApplicationPool2/Common.h +12 -12
  334. data/ext/common/ApplicationPool2/DirectSpawner.h +2 -2
  335. data/ext/common/ApplicationPool2/DummySpawner.h +3 -3
  336. data/ext/common/ApplicationPool2/Group.h +6 -6
  337. data/ext/common/ApplicationPool2/Implementation.cpp +19 -19
  338. data/ext/common/ApplicationPool2/PipeWatcher.h +5 -5
  339. data/ext/common/ApplicationPool2/Pool.h +21 -21
  340. data/ext/common/ApplicationPool2/Process.h +6 -6
  341. data/ext/common/ApplicationPool2/Session.h +1 -1
  342. data/ext/common/ApplicationPool2/SmartSpawner.h +24 -12
  343. data/ext/common/ApplicationPool2/Socket.h +2 -2
  344. data/ext/common/ApplicationPool2/Spawner.h +64 -14
  345. data/ext/common/ApplicationPool2/SpawnerFactory.h +7 -7
  346. data/ext/common/ApplicationPool2/SuperGroup.h +5 -5
  347. data/ext/common/BackgroundEventLoop.cpp +4 -4
  348. data/ext/common/BackgroundEventLoop.h +1 -1
  349. data/ext/common/Constants.h +13 -1
  350. data/ext/common/EventedBufferedInput.h +8 -8
  351. data/ext/common/Exceptions.cpp +71 -0
  352. data/ext/common/Exceptions.h +60 -7
  353. data/ext/common/FileDescriptor.h +4 -4
  354. data/ext/common/MessageClient.h +1 -1
  355. data/ext/common/MessageServer.h +5 -5
  356. data/ext/common/MultiLibeio.cpp +3 -3
  357. data/ext/common/MultiLibeio.h +2 -2
  358. data/ext/common/RandomGenerator.h +11 -11
  359. data/ext/common/ResourceLocator.h +8 -1
  360. data/ext/common/SafeLibev.h +12 -12
  361. data/ext/common/ServerInstanceDir.h +11 -3
  362. data/ext/common/UnionStation.h +10 -10
  363. data/ext/common/Utils.cpp +11 -13
  364. data/ext/common/Utils.h +9 -9
  365. data/ext/common/Utils/BlockingQueue.h +10 -10
  366. data/ext/common/Utils/BufferedIO.h +1 -1
  367. data/ext/common/Utils/CachedFileStat.hpp +2 -2
  368. data/ext/common/Utils/FileChangeChecker.h +1 -1
  369. data/ext/common/Utils/HashMap.h +13 -4
  370. data/ext/common/Utils/IOUtils.cpp +33 -10
  371. data/ext/common/Utils/IniFile.h +3 -3
  372. data/ext/common/Utils/Lock.h +2 -2
  373. data/ext/common/Utils/MessagePassing.h +10 -10
  374. data/ext/common/Utils/ProcessMetricsCollector.h +24 -6
  375. data/ext/common/Utils/ScopeGuard.h +5 -5
  376. data/ext/common/Utils/jsoncpp.cpp +2 -0
  377. data/ext/common/agents/HelperAgent/FileBackedPipe.h +26 -26
  378. data/ext/common/agents/HelperAgent/Main.cpp +18 -18
  379. data/ext/common/agents/HelperAgent/RequestHandler.cpp +4 -4
  380. data/ext/common/agents/HelperAgent/RequestHandler.h +30 -21
  381. data/ext/common/agents/LoggingAgent/AdminController.h +1 -1
  382. data/ext/common/agents/LoggingAgent/FilterSupport.h +13 -11
  383. data/ext/common/agents/LoggingAgent/LoggingServer.h +11 -11
  384. data/ext/common/agents/LoggingAgent/Main.cpp +9 -9
  385. data/ext/common/agents/LoggingAgent/RemoteSender.h +3 -3
  386. data/ext/common/agents/SpawnPreparer.cpp +1 -0
  387. data/ext/common/agents/Watchdog/AgentWatcher.cpp +8 -7
  388. data/ext/common/agents/Watchdog/Main.cpp +81 -73
  389. data/ext/common/agents/Watchdog/ServerInstanceDirToucher.cpp +1 -1
  390. data/ext/libev/Changes +57 -0
  391. data/ext/libev/LICENSE +2 -1
  392. data/ext/libev/Makefile.in +110 -50
  393. data/ext/libev/README +8 -8
  394. data/ext/libev/aclocal.m4 +1503 -861
  395. data/ext/libev/config.guess +290 -304
  396. data/ext/libev/config.sub +77 -198
  397. data/ext/libev/configure +1735 -890
  398. data/ext/libev/configure.ac +3 -2
  399. data/ext/libev/ev++.h +6 -6
  400. data/ext/libev/ev.c +541 -214
  401. data/ext/libev/ev.h +106 -100
  402. data/ext/libev/ev_epoll.c +1 -1
  403. data/ext/libev/ev_kqueue.c +20 -4
  404. data/ext/libev/ev_vars.h +15 -16
  405. data/ext/libev/ev_win32.c +12 -2
  406. data/ext/libev/ev_wrap.h +162 -160
  407. data/ext/libev/event.c +29 -6
  408. data/ext/libev/event.h +9 -2
  409. data/ext/libev/ltmain.sh +2632 -1384
  410. data/ext/nginx/ConfigurationCommands.c +1 -1
  411. data/ext/nginx/ConfigurationCommands.c.erb +3 -1
  412. data/ext/nginx/ContentHandler.c +25 -2
  413. data/ext/nginx/CreateLocationConfig.c +1 -0
  414. data/ext/nginx/CreateLocationConfig.c.erb +1 -1
  415. data/ext/nginx/MergeLocationConfig.c +1 -0
  416. data/ext/nginx/MergeLocationConfig.c.erb +1 -1
  417. data/ext/nginx/config +12 -0
  418. data/ext/oxt/dynamic_thread_group.hpp +7 -4
  419. data/ext/oxt/system_calls.cpp +5 -1
  420. data/ext/oxt/system_calls.hpp +3 -0
  421. data/helper-scripts/node-loader.js +117 -249
  422. data/lib/phusion_passenger.rb +27 -5
  423. data/lib/phusion_passenger/abstract_installer.rb +104 -9
  424. data/lib/phusion_passenger/admin_tools/memory_stats.rb +10 -9
  425. data/lib/phusion_passenger/apache2/config_options.rb +6 -3
  426. data/lib/phusion_passenger/common_library.rb +7 -1
  427. data/lib/phusion_passenger/constants.rb +6 -0
  428. data/lib/phusion_passenger/loader_shared_helpers.rb +7 -4
  429. data/lib/phusion_passenger/nginx/config_options.rb +2 -1
  430. data/lib/phusion_passenger/packaging.rb +3 -0
  431. data/lib/phusion_passenger/platform_info/apache.rb +43 -6
  432. data/lib/phusion_passenger/platform_info/apache_detector.rb +15 -5
  433. data/lib/phusion_passenger/platform_info/compiler.rb +167 -32
  434. data/lib/phusion_passenger/platform_info/cxx_portability.rb +133 -77
  435. data/lib/phusion_passenger/platform_info/depcheck.rb +17 -7
  436. data/lib/phusion_passenger/platform_info/depcheck_specs/apache2.rb +3 -3
  437. data/lib/phusion_passenger/platform_info/depcheck_specs/compiler_toolchain.rb +4 -4
  438. data/lib/phusion_passenger/platform_info/depcheck_specs/ruby.rb +5 -6
  439. data/lib/phusion_passenger/platform_info/linux.rb +2 -1
  440. data/lib/phusion_passenger/platform_info/operating_system.rb +1 -1
  441. data/lib/phusion_passenger/platform_info/ruby.rb +18 -3
  442. data/lib/phusion_passenger/standalone/runtime_installer.rb +6 -2
  443. data/lib/phusion_passenger/standalone/start_command.rb +8 -2
  444. data/lib/phusion_passenger/utils/ansi_colors.rb +9 -0
  445. data/lib/phusion_passenger/utils/hosts_file_parser.rb +4 -2
  446. data/node_lib/phusion_passenger/httplib_emulation.js +141 -0
  447. data/node_lib/phusion_passenger/line_reader.js +154 -0
  448. data/node_lib/phusion_passenger/request_handler.js +65 -0
  449. data/node_lib/phusion_passenger/session_protocol_parser.js +113 -0
  450. data/resources/templates/apache2/deployment_example.txt.erb +2 -1
  451. data/resources/templates/apache2/installing_against_a_different_apache.txt.erb +14 -0
  452. data/resources/templates/apache2/multiple_apache_installations_detected.txt.erb +15 -0
  453. data/resources/templates/apache2/possible_solutions_for_compilation_and_installation_problems.txt.erb +4 -5
  454. data/resources/templates/general_error_with_html.html.template +1 -1
  455. data/resources/templates/installer_common/gem_install_permission_problems.txt.erb +17 -0
  456. data/resources/templates/installer_common/low_amount_of_memory_warning.txt.erb +6 -4
  457. data/resources/templates/installer_common/world_inaccessible_directories.txt.erb +16 -0
  458. data/resources/templates/nginx/deployment_example.txt.erb +2 -1
  459. data/resources/templates/nginx/possible_solutions_for_compilation_and_installation_problems.txt.erb +4 -5
  460. data/resources/templates/standalone/config.erb +1 -0
  461. data/test/cxx/ApplicationPool2/DirectSpawnerTest.cpp +3 -3
  462. data/test/cxx/ApplicationPool2/PoolTest.cpp +4 -4
  463. data/test/cxx/ApplicationPool2/ProcessTest.cpp +5 -5
  464. data/test/cxx/ApplicationPool2/SmartSpawnerTest.cpp +5 -5
  465. data/test/cxx/ApplicationPool2/SpawnerTestCases.cpp +1 -1
  466. data/test/cxx/EventedBufferedInputTest.cpp +6 -6
  467. data/test/cxx/FileBackedPipeTest.cpp +1 -1
  468. data/test/cxx/MessagePassingTest.cpp +1 -1
  469. data/test/cxx/MessageServerTest.cpp +4 -4
  470. data/test/cxx/RequestHandlerTest.cpp +7 -7
  471. data/test/cxx/UnionStationTest.cpp +2 -2
  472. data/test/node/line_reader_spec.js +338 -0
  473. data/test/node/spec_helper.js +27 -0
  474. data/test/ruby/standalone/runtime_installer_spec.rb +2 -1
  475. metadata +131 -22
  476. metadata.gz.asc +7 -7
  477. data/ext/boost/functional/hash/detail/container_fwd_0x.hpp +0 -29
  478. data/ext/boost/lambda/core.hpp +0 -79
  479. data/ext/boost/lambda/detail/actions.hpp +0 -174
  480. data/ext/boost/lambda/detail/arity_code.hpp +0 -110
  481. data/ext/boost/lambda/detail/function_adaptors.hpp +0 -789
  482. data/ext/boost/lambda/detail/is_instance_of.hpp +0 -104
  483. data/ext/boost/lambda/detail/lambda_config.hpp +0 -48
  484. data/ext/boost/lambda/detail/lambda_functor_base.hpp +0 -615
  485. data/ext/boost/lambda/detail/lambda_functors.hpp +0 -324
  486. data/ext/boost/lambda/detail/lambda_fwd.hpp +0 -74
  487. data/ext/boost/lambda/detail/lambda_traits.hpp +0 -578
  488. data/ext/boost/lambda/detail/member_ptr.hpp +0 -737
  489. data/ext/boost/lambda/detail/operator_actions.hpp +0 -139
  490. data/ext/boost/lambda/detail/operator_lambda_func_base.hpp +0 -271
  491. data/ext/boost/lambda/detail/operator_return_type_traits.hpp +0 -917
  492. data/ext/boost/lambda/detail/operators.hpp +0 -370
  493. data/ext/boost/lambda/detail/ret.hpp +0 -325
  494. data/ext/boost/lambda/detail/return_type_traits.hpp +0 -282
  495. data/ext/boost/lambda/detail/select_functions.hpp +0 -74
  496. data/ext/boost/lambda/lambda.hpp +0 -34
@@ -0,0 +1,63 @@
1
+
2
+ // Copyright (C) 2008-2011 Daniel James.
3
+ // Distributed under the Boost Software License, Version 1.0. (See accompanying
4
+ // file LICENSE_1_0.txt or copy at http://www.boost.org/LICENSE_1_0.txt)
5
+
6
+ #ifndef BOOST_UNORDERED_SET_FWD_HPP_INCLUDED
7
+ #define BOOST_UNORDERED_SET_FWD_HPP_INCLUDED
8
+
9
+ #if defined(_MSC_VER) && (_MSC_VER >= 1020)
10
+ # pragma once
11
+ #endif
12
+
13
+ #include <boost/config.hpp>
14
+ #include <memory>
15
+ #include <functional>
16
+ #include <boost/functional/hash_fwd.hpp>
17
+ #include <boost/unordered/detail/fwd.hpp>
18
+
19
+ namespace boost
20
+ {
21
+ namespace unordered
22
+ {
23
+ template <class T,
24
+ class H = boost::hash<T>,
25
+ class P = std::equal_to<T>,
26
+ class A = std::allocator<T> >
27
+ class unordered_set;
28
+
29
+ template <class T, class H, class P, class A>
30
+ inline bool operator==(unordered_set<T, H, P, A> const&,
31
+ unordered_set<T, H, P, A> const&);
32
+ template <class T, class H, class P, class A>
33
+ inline bool operator!=(unordered_set<T, H, P, A> const&,
34
+ unordered_set<T, H, P, A> const&);
35
+ template <class T, class H, class P, class A>
36
+ inline void swap(unordered_set<T, H, P, A> &m1,
37
+ unordered_set<T, H, P, A> &m2);
38
+
39
+ template <class T,
40
+ class H = boost::hash<T>,
41
+ class P = std::equal_to<T>,
42
+ class A = std::allocator<T> >
43
+ class unordered_multiset;
44
+
45
+ template <class T, class H, class P, class A>
46
+ inline bool operator==(unordered_multiset<T, H, P, A> const&,
47
+ unordered_multiset<T, H, P, A> const&);
48
+ template <class T, class H, class P, class A>
49
+ inline bool operator!=(unordered_multiset<T, H, P, A> const&,
50
+ unordered_multiset<T, H, P, A> const&);
51
+ template <class T, class H, class P, class A>
52
+ inline void swap(unordered_multiset<T, H, P, A> &m1,
53
+ unordered_multiset<T, H, P, A> &m2);
54
+ }
55
+
56
+ using boost::unordered::unordered_set;
57
+ using boost::unordered::unordered_multiset;
58
+ using boost::unordered::swap;
59
+ using boost::unordered::operator==;
60
+ using boost::unordered::operator!=;
61
+ }
62
+
63
+ #endif
@@ -0,0 +1,18 @@
1
+
2
+ // Copyright (C) 2003-2004 Jeremy B. Maitin-Shepard.
3
+ // Copyright (C) 2005-2008 Daniel James.
4
+ // Distributed under the Boost Software License, Version 1.0. (See accompanying
5
+ // file LICENSE_1_0.txt or copy at http://www.boost.org/LICENSE_1_0.txt)
6
+
7
+ // See http://www.boost.org/libs/unordered for documentation
8
+
9
+ #ifndef BOOST_UNORDERED_MAP_HPP_INCLUDED
10
+ #define BOOST_UNORDERED_MAP_HPP_INCLUDED
11
+
12
+ #if defined(_MSC_VER) && (_MSC_VER >= 1020)
13
+ # pragma once
14
+ #endif
15
+
16
+ #include <boost/unordered/unordered_map.hpp>
17
+
18
+ #endif // BOOST_UNORDERED_MAP_HPP_INCLUDED
@@ -0,0 +1,18 @@
1
+
2
+ // Copyright (C) 2003-2004 Jeremy B. Maitin-Shepard.
3
+ // Copyright (C) 2005-2008 Daniel James.
4
+ // Distributed under the Boost Software License, Version 1.0. (See accompanying
5
+ // file LICENSE_1_0.txt or copy at http://www.boost.org/LICENSE_1_0.txt)
6
+
7
+ // See http://www.boost.org/libs/unordered for documentation
8
+
9
+ #ifndef BOOST_UNORDERED_SET_HPP_INCLUDED
10
+ #define BOOST_UNORDERED_SET_HPP_INCLUDED
11
+
12
+ #if defined(_MSC_VER) && (_MSC_VER >= 1020)
13
+ # pragma once
14
+ #endif
15
+
16
+ #include <boost/unordered/unordered_set.hpp>
17
+
18
+ #endif // BOOST_UNORDERED_SET_HPP_INCLUDED
@@ -1,4 +1,4 @@
1
- // Copyright (C) 2002 Brad King (brad.king@kitware.com)
1
+ // Copyright (C) 2002 Brad King (brad.king@kitware.com)
2
2
  // Douglas Gregor (gregod@cs.rpi.edu)
3
3
  //
4
4
  // Copyright (C) 2002, 2008 Peter Dimov
@@ -50,7 +50,7 @@ template<class T> struct addressof_impl
50
50
 
51
51
  template<class T> T * addressof( T & v )
52
52
  {
53
- #if defined( __BORLANDC__ ) && BOOST_WORKAROUND( __BORLANDC__, BOOST_TESTED_AT( 0x610 ) )
53
+ #if (defined( __BORLANDC__ ) && BOOST_WORKAROUND( __BORLANDC__, BOOST_TESTED_AT( 0x610 ) ) ) || defined( __SUNPRO_CC )
54
54
 
55
55
  return boost::detail::addressof_impl<T>::f( v, 0 );
56
56
 
@@ -46,7 +46,7 @@
46
46
 
47
47
  #ifndef BOOST_RESULT_OF_USE_TR1
48
48
  # ifndef BOOST_RESULT_OF_USE_DECLTYPE
49
- # ifndef BOOST_NO_DECLTYPE_N3276 // this implies !defined(BOOST_NO_DECLTYPE)
49
+ # ifndef BOOST_NO_CXX11_DECLTYPE_N3276 // this implies !defined(BOOST_NO_CXX11_DECLTYPE)
50
50
  # define BOOST_RESULT_OF_USE_DECLTYPE
51
51
  # else
52
52
  # define BOOST_RESULT_OF_USE_TR1
@@ -68,6 +68,13 @@ template<typename F, typename FArgs, bool HasResultType> struct tr1_result_of_im
68
68
 
69
69
  #ifdef BOOST_NO_SFINAE_EXPR
70
70
 
71
+ // There doesn't seem to be any other way to turn this off such that the presence of
72
+ // the user-defined operator,() below doesn't cause spurious warning all over the place,
73
+ // so unconditionally turn it off.
74
+ #if BOOST_MSVC
75
+ # pragma warning(disable: 4913) // user defined binary operator ',' exists but no overload could convert all operands, default built-in binary operator ',' used
76
+ #endif
77
+
71
78
  struct result_of_private_type {};
72
79
 
73
80
  struct result_of_weird_type {
@@ -19,7 +19,7 @@
19
19
  // BOOST_VERSION / 100 % 1000 is the minor version
20
20
  // BOOST_VERSION / 100000 is the major version
21
21
 
22
- #define BOOST_VERSION 105200
22
+ #define BOOST_VERSION 105400
23
23
 
24
24
  //
25
25
  // BOOST_LIB_VERSION must be defined to be the same as BOOST_VERSION
@@ -27,6 +27,6 @@
27
27
  // number, y is the minor version number, and z is the patch level if not 0.
28
28
  // This is used by <config/auto_link.hpp> to select which library version to link to.
29
29
 
30
- #define BOOST_LIB_VERSION "1_52"
30
+ #define BOOST_LIB_VERSION "1_54"
31
31
 
32
32
  #endif
@@ -163,7 +163,7 @@ public:
163
163
  }
164
164
  };
165
165
 
166
- typedef shared_ptr<Account> AccountPtr;
166
+ typedef boost::shared_ptr<Account> AccountPtr;
167
167
 
168
168
  } // namespace Passenger
169
169
 
@@ -41,7 +41,7 @@ using namespace std;
41
41
  using namespace boost;
42
42
 
43
43
  class AccountsDatabase;
44
- typedef shared_ptr<AccountsDatabase> AccountsDatabasePtr;
44
+ typedef boost::shared_ptr<AccountsDatabase> AccountsDatabasePtr;
45
45
 
46
46
 
47
47
  class AccountsDatabase {
@@ -26,7 +26,9 @@
26
26
  #include <set>
27
27
  #include <cerrno>
28
28
  #include <cstring>
29
+ #include <string.h>
29
30
  #include <AgentsStarter.h>
31
+ #include <Exceptions.h>
30
32
 
31
33
  using namespace std;
32
34
  using namespace boost;
@@ -114,7 +116,7 @@ pp_agents_starter_start(PP_AgentsStarter *as,
114
116
  Passenger::AgentsStarter *agentsStarter = (Passenger::AgentsStarter *) as;
115
117
  this_thread::disable_syscall_interruption dsi;
116
118
  try {
117
- function<void ()> afterForkFunctionObject;
119
+ boost::function<void ()> afterForkFunctionObject;
118
120
 
119
121
  if (afterFork != NULL) {
120
122
  afterForkFunctionObject = boost::bind(afterFork, callbackArgument);
@@ -374,7 +374,7 @@ public:
374
374
  */
375
375
  void start(const string &passengerRoot,
376
376
  const VariantMap &extraParams = VariantMap(),
377
- const function<void ()> &afterFork = function<void ()>())
377
+ const boost::function<void ()> &afterFork = boost::function<void ()>())
378
378
  {
379
379
  TRACE_POINT();
380
380
  this_thread::disable_interruption di;
@@ -533,7 +533,7 @@ public:
533
533
  requestSocketPassword = info.get("request_socket_password");
534
534
  helperAgentAdminSocketAddress = info.get("helper_agent_admin_socket_address");
535
535
  helperAgentExitPassword = info.get("helper_agent_exit_password");
536
- serverInstanceDir = make_shared<ServerInstanceDir>(info.get("server_instance_dir"), false);
536
+ serverInstanceDir = boost::make_shared<ServerInstanceDir>(info.get("server_instance_dir"), false);
537
537
  generation = serverInstanceDir->getGeneration(info.getInt("generation"));
538
538
  loggingSocketAddress = info.get("logging_socket_address");
539
539
  loggingSocketPassword = info.get("logging_socket_password");
@@ -22,7 +22,10 @@
22
22
  * OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN
23
23
  * THE SOFTWARE.
24
24
  */
25
+
25
26
  #include <ApplicationPool2/AppTypes.h>
27
+ #include <exception>
28
+ #include <string.h>
26
29
 
27
30
  namespace Passenger {
28
31
  namespace ApplicationPool2 {
@@ -32,7 +35,7 @@ const AppTypeDefinition appTypeDefinitions[] = {
32
35
  { PAT_RACK, "rack", "config.ru", "Passenger RackApp" },
33
36
  { PAT_WSGI, "wsgi", "passenger_wsgi.py", "Passenger WsgiApp" },
34
37
  { PAT_CLASSIC_RAILS, "classic-rails", "config/environment.rb", "Passenger ClassicRailsApp" },
35
- { PAT_NODE, "node", "passenger_node.js", "Passenger NodeApp" },
38
+ { PAT_NODE, "node", "app.js", "Passenger NodeApp" },
36
39
  { PAT_METEOR, "meteor", ".meteor", "Passenger MeteorApp" },
37
40
  { PAT_NONE, NULL, NULL, NULL }
38
41
  };
@@ -46,7 +49,11 @@ using namespace Passenger::ApplicationPool2;
46
49
 
47
50
  PP_AppTypeDetector *
48
51
  pp_app_type_detector_new() {
49
- return new AppTypeDetector();
52
+ try {
53
+ return new AppTypeDetector();
54
+ } catch (const std::bad_alloc &) {
55
+ return 0;
56
+ }
50
57
  }
51
58
 
52
59
  void
@@ -56,18 +63,29 @@ pp_app_type_detector_free(PP_AppTypeDetector *detector) {
56
63
 
57
64
  PassengerAppType
58
65
  pp_app_type_detector_check_document_root(PP_AppTypeDetector *_detector,
59
- const char *documentRoot, unsigned int len, int resolveFirstSymlink)
66
+ const char *documentRoot, unsigned int len, int resolveFirstSymlink,
67
+ PP_Error *error)
60
68
  {
61
69
  AppTypeDetector *detector = (AppTypeDetector *) _detector;
62
- return detector->checkDocumentRoot(StaticString(documentRoot, len), resolveFirstSymlink);
70
+ try {
71
+ return detector->checkDocumentRoot(StaticString(documentRoot, len), resolveFirstSymlink);
72
+ } catch (const std::exception &e) {
73
+ pp_error_set(e, error);
74
+ return PAT_ERROR;
75
+ }
63
76
  }
64
77
 
65
78
  PassengerAppType
66
79
  pp_app_type_detector_check_app_root(PP_AppTypeDetector *_detector,
67
- const char *appRoot, unsigned int len)
80
+ const char *appRoot, unsigned int len, PP_Error *error)
68
81
  {
69
82
  AppTypeDetector *detector = (AppTypeDetector *) _detector;
70
- return detector->checkAppRoot(StaticString(appRoot, len));
83
+ try {
84
+ return detector->checkAppRoot(StaticString(appRoot, len));
85
+ } catch (const std::exception &e) {
86
+ pp_error_set(e, error);
87
+ return PAT_ERROR;
88
+ }
71
89
  }
72
90
 
73
91
  const char *
@@ -33,6 +33,8 @@
33
33
  * what kind of application lives under the given directory.
34
34
  */
35
35
 
36
+ #include "../Exceptions.h"
37
+
36
38
 
37
39
  #ifdef __cplusplus
38
40
  extern "C" {
@@ -44,7 +46,8 @@ typedef enum {
44
46
  PAT_CLASSIC_RAILS,
45
47
  PAT_NODE,
46
48
  PAT_METEOR,
47
- PAT_NONE
49
+ PAT_NONE,
50
+ PAT_ERROR
48
51
  } PassengerAppType;
49
52
 
50
53
  typedef void PP_AppTypeDetector;
@@ -52,9 +55,10 @@ typedef void PP_AppTypeDetector;
52
55
  PP_AppTypeDetector *pp_app_type_detector_new();
53
56
  void pp_app_type_detector_free(PP_AppTypeDetector *detector);
54
57
  PassengerAppType pp_app_type_detector_check_document_root(PP_AppTypeDetector *detector,
55
- const char *documentRoot, unsigned int len, int resolveFirstSymlink);
58
+ const char *documentRoot, unsigned int len, int resolveFirstSymlink,
59
+ PP_Error *error);
56
60
  PassengerAppType pp_app_type_detector_check_app_root(PP_AppTypeDetector *detector,
57
- const char *appRoot, unsigned int len);
61
+ const char *appRoot, unsigned int len, PP_Error *error);
58
62
 
59
63
  const char *pp_get_app_type_name(PassengerAppType type);
60
64
 
@@ -67,6 +71,7 @@ const char *pp_get_app_type_name(PassengerAppType type);
67
71
  #include <oxt/macros.hpp>
68
72
  #include <oxt/backtrace.hpp>
69
73
  #include <cstdlib>
74
+ #include <limits.h>
70
75
  #include <string>
71
76
  #include <Logging.h>
72
77
  #include <StaticString.h>
@@ -103,8 +108,7 @@ private:
103
108
  pos = appendData(pos, end, name);
104
109
  if (OXT_UNLIKELY(pos == end)) {
105
110
  TRACE_POINT();
106
- P_CRITICAL("BUG: buffer overflow");
107
- abort();
111
+ throw RuntimeException("Not enough buffer space");
108
112
  }
109
113
  return fileExists(StaticString(buf, pos - buf), cstat, throttleRate);
110
114
  }
@@ -158,7 +162,12 @@ public:
158
162
  return checkAppRoot(extractDirNameStatic(documentRoot));
159
163
  }
160
164
  } else {
161
- char ntDocRoot[documentRoot.size() + 1];
165
+ if (OXT_UNLIKELY(documentRoot.size() > PATH_MAX)) {
166
+ TRACE_POINT();
167
+ throw RuntimeException("Not enough buffer space");
168
+ }
169
+
170
+ char ntDocRoot[PATH_MAX + 1];
162
171
  memcpy(ntDocRoot, documentRoot.data(), documentRoot.size());
163
172
  ntDocRoot[documentRoot.size()] = '\0';
164
173
  string resolvedDocumentRoot = resolveSymlink(ntDocRoot);
@@ -181,8 +190,8 @@ public:
181
190
  * @throws boost::thread_interrupted
182
191
  */
183
192
  PassengerAppType checkAppRoot(const StaticString &appRoot) {
184
- char buf[appRoot.size() + 32];
185
- const char *end = buf + appRoot.size() + 32;
193
+ char buf[PATH_MAX + 32];
194
+ const char *end = buf + sizeof(buf) - 1;
186
195
  const AppTypeDefinition *definition = &appTypeDefinitions[0];
187
196
 
188
197
  while (definition->type != PAT_NONE) {
@@ -79,16 +79,16 @@ enum DisableResult {
79
79
  DR_DEFERRED
80
80
  };
81
81
 
82
- typedef shared_ptr<Pool> PoolPtr;
83
- typedef shared_ptr<SuperGroup> SuperGroupPtr;
84
- typedef shared_ptr<Group> GroupPtr;
85
- typedef shared_ptr<Process> ProcessPtr;
86
- typedef shared_ptr<Session> SessionPtr;
87
- typedef shared_ptr<tracable_exception> ExceptionPtr;
82
+ typedef boost::shared_ptr<Pool> PoolPtr;
83
+ typedef boost::shared_ptr<SuperGroup> SuperGroupPtr;
84
+ typedef boost::shared_ptr<Group> GroupPtr;
85
+ typedef boost::shared_ptr<Process> ProcessPtr;
86
+ typedef boost::shared_ptr<Session> SessionPtr;
87
+ typedef boost::shared_ptr<tracable_exception> ExceptionPtr;
88
88
  typedef StringMap<SuperGroupPtr> SuperGroupMap;
89
- typedef function<void (const SessionPtr &session, const ExceptionPtr &e)> GetCallback;
90
- typedef function<void (const ProcessPtr &process, DisableResult result)> DisableCallback;
91
- typedef function<void ()> Callback;
89
+ typedef boost::function<void (const SessionPtr &session, const ExceptionPtr &e)> GetCallback;
90
+ typedef boost::function<void (const ProcessPtr &process, DisableResult result)> DisableCallback;
91
+ typedef boost::function<void ()> Callback;
92
92
 
93
93
  struct GetWaiter {
94
94
  Options options;
@@ -104,7 +104,7 @@ struct GetWaiter {
104
104
 
105
105
  struct Ticket {
106
106
  boost::mutex syncher;
107
- condition_variable cond;
107
+ boost::condition_variable cond;
108
108
  SessionPtr session;
109
109
  ExceptionPtr exception;
110
110
  };
@@ -133,12 +133,12 @@ struct SpawnerConfig {
133
133
  if (randomGenerator != NULL) {
134
134
  this->randomGenerator = randomGenerator;
135
135
  } else {
136
- this->randomGenerator = make_shared<RandomGenerator>();
136
+ this->randomGenerator = boost::make_shared<RandomGenerator>();
137
137
  }
138
138
  }
139
139
  };
140
140
 
141
- typedef shared_ptr<SpawnerConfig> SpawnerConfigPtr;
141
+ typedef boost::shared_ptr<SpawnerConfig> SpawnerConfigPtr;
142
142
 
143
143
  ExceptionPtr copyException(const tracable_exception &e);
144
144
  void rethrowException(const ExceptionPtr &e);
@@ -155,7 +155,7 @@ public:
155
155
  {
156
156
  generation = _generation;
157
157
  if (_config == NULL) {
158
- config = make_shared<SpawnerConfig>();
158
+ config = boost::make_shared<SpawnerConfig>();
159
159
  } else {
160
160
  config = _config;
161
161
  }
@@ -173,7 +173,7 @@ public:
173
173
  vector<string> command = createCommand(options, preparation, args);
174
174
  SocketPair adminSocket = createUnixSocketPair();
175
175
  Pipe errorPipe = createPipe();
176
- DebugDirPtr debugDir = make_shared<DebugDir>(preparation.uid, preparation.gid);
176
+ DebugDirPtr debugDir = boost::make_shared<DebugDir>(preparation.uid, preparation.gid);
177
177
  pid_t pid;
178
178
 
179
179
  pid = syscalls::fork();
@@ -57,13 +57,13 @@ public:
57
57
  possiblyRaiseInternalError(options);
58
58
 
59
59
  SocketPair adminSocket = createUnixSocketPair();
60
- SocketListPtr sockets = make_shared<SocketList>();
60
+ SocketListPtr sockets = boost::make_shared<SocketList>();
61
61
  sockets->add("main", "tcp://127.0.0.1:1234", "session", config->concurrency);
62
62
  syscalls::usleep(config->spawnTime);
63
63
 
64
64
  boost::lock_guard<boost::mutex> l(lock);
65
65
  count++;
66
- ProcessPtr process = make_shared<Process>(SafeLibevPtr(),
66
+ ProcessPtr process = boost::make_shared<Process>(SafeLibevPtr(),
67
67
  (pid_t) count, "gupid-" + toString(count),
68
68
  toString(count),
69
69
  adminSocket.second, FileDescriptor(), sockets,
@@ -81,7 +81,7 @@ public:
81
81
  }
82
82
  };
83
83
 
84
- typedef shared_ptr<DummySpawner> DummySpawnerPtr;
84
+ typedef boost::shared_ptr<DummySpawner> DummySpawnerPtr;
85
85
 
86
86
 
87
87
  } // namespace ApplicationPool2