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
@@ -163,7 +163,7 @@ public:
163
163
  }
164
164
  };
165
165
 
166
- typedef shared_ptr<Session> SessionPtr;
166
+ typedef boost::shared_ptr<Session> SessionPtr;
167
167
 
168
168
 
169
169
  } // namespace ApplicationPool2
@@ -35,7 +35,7 @@ using namespace boost;
35
35
  using namespace oxt;
36
36
 
37
37
 
38
- class SmartSpawner: public Spawner, public enable_shared_from_this<SmartSpawner> {
38
+ class SmartSpawner: public Spawner, public boost::enable_shared_from_this<SmartSpawner> {
39
39
  private:
40
40
  /**
41
41
  * Structure containing arguments and working state for negotiating
@@ -159,7 +159,8 @@ private:
159
159
  // remaining stderr output for at most 2 seconds.
160
160
  if (errorKind != SpawnException::PRELOADER_STARTUP_TIMEOUT
161
161
  && errorKind != SpawnException::APP_STARTUP_TIMEOUT
162
- && stderrCapturer != NULL) {
162
+ && stderrCapturer != NULL)
163
+ {
163
164
  bool done = false;
164
165
  unsigned long long timeout = 2000;
165
166
  while (!done) {
@@ -186,7 +187,10 @@ private:
186
187
 
187
188
  // Now throw SpawnException with the captured stderr output
188
189
  // as error response.
189
- SpawnException e(msg, stderrOutput, false, errorKind);
190
+ SpawnException e(msg,
191
+ createErrorPageFromStderrOutput(msg, errorKind, stderrOutput),
192
+ true,
193
+ errorKind);
190
194
  e.setPreloaderCommand(getPreloaderCommandString());
191
195
  annotatePreloaderException(e, debugDir);
192
196
  throw e;
@@ -215,7 +219,7 @@ private:
215
219
  vector<string> command = createRealPreloaderCommand(options, args);
216
220
  SocketPair adminSocket = createUnixSocketPair();
217
221
  Pipe errorPipe = createPipe();
218
- DebugDirPtr debugDir = make_shared<DebugDir>(preparation.uid, preparation.gid);
222
+ DebugDirPtr debugDir = boost::make_shared<DebugDir>(preparation.uid, preparation.gid);
219
223
  pid_t pid;
220
224
 
221
225
  pid = syscalls::fork();
@@ -285,12 +289,12 @@ private:
285
289
 
286
290
  PipeWatcherPtr watcher;
287
291
 
288
- watcher = make_shared<PipeWatcher>(adminSocket.second,
292
+ watcher = boost::make_shared<PipeWatcher>(adminSocket.second,
289
293
  "stdout", pid, config->forwardStdout);
290
294
  watcher->initialize();
291
295
  watcher->start();
292
296
 
293
- watcher = make_shared<PipeWatcher>(errorPipe.first,
297
+ watcher = boost::make_shared<PipeWatcher>(errorPipe.first,
294
298
  "stderr", pid, config->forwardStderr);
295
299
  watcher->initialize();
296
300
  watcher->start();
@@ -529,11 +533,19 @@ private:
529
533
  }
530
534
 
531
535
  void handleInvalidResponseType(StartupDetails &details, const string &line) {
532
- throwPreloaderSpawnException("An error occurred while starting up "
533
- "the preloader. It sent an unknown response type \"" +
534
- cEscapeString(line) + "\".",
535
- SpawnException::PRELOADER_STARTUP_PROTOCOL_ERROR,
536
- details);
536
+ if (line.empty()) {
537
+ throwPreloaderSpawnException("An error occurred while starting up "
538
+ "the preloader. It exited before signalling successful "
539
+ "startup back to " PROGRAM_NAME ".",
540
+ SpawnException::PRELOADER_STARTUP_ERROR,
541
+ details);
542
+ } else {
543
+ throwPreloaderSpawnException("An error occurred while starting up "
544
+ "the preloader. It sent an unknown response type \"" +
545
+ cEscapeString(line) + "\".",
546
+ SpawnException::PRELOADER_STARTUP_PROTOCOL_ERROR,
547
+ details);
548
+ }
537
549
  }
538
550
 
539
551
  string negotiatePreloaderStartup(StartupDetails &details) {
@@ -715,7 +727,7 @@ public:
715
727
  m_lastUsed = SystemTime::getUsec();
716
728
 
717
729
  if (_config == NULL) {
718
- config = make_shared<SpawnerConfig>();
730
+ config = boost::make_shared<SpawnerConfig>();
719
731
  } else {
720
732
  config = _config;
721
733
  }
@@ -162,7 +162,7 @@ public:
162
162
  }
163
163
 
164
164
  void checkinConnection(Connection connection) {
165
- unique_lock<boost::mutex> l(connectionPoolLock);
165
+ boost::unique_lock<boost::mutex> l(connectionPoolLock);
166
166
 
167
167
  if (connection.persistent) {
168
168
  if (connection.fail) {
@@ -237,7 +237,7 @@ public:
237
237
  }
238
238
  };
239
239
 
240
- typedef shared_ptr<SocketList> SocketListPtr;
240
+ typedef boost::shared_ptr<SocketList> SocketListPtr;
241
241
 
242
242
 
243
243
  } // namespace ApplicationPool2
@@ -211,16 +211,22 @@ protected:
211
211
  }
212
212
  };
213
213
 
214
- typedef shared_ptr<BackgroundIOCapturer> BackgroundIOCapturerPtr;
214
+ typedef boost::shared_ptr<BackgroundIOCapturer> BackgroundIOCapturerPtr;
215
215
 
216
216
  /**
217
217
  * A temporary directory for spawned child processes to write
218
218
  * debugging information to. It is removed after spawning has
219
219
  * determined to be successful or failed.
220
220
  */
221
- struct DebugDir {
221
+ class DebugDir {
222
+ private:
222
223
  string path;
223
224
 
225
+ static void doClosedir(DIR *dir) {
226
+ closedir(dir);
227
+ }
228
+
229
+ public:
224
230
  DebugDir(uid_t uid, gid_t gid) {
225
231
  char buf[PATH_MAX] = "/tmp/passenger.spawn-debug.XXXXXXXXXX";
226
232
  const char *result = mkdtemp(buf);
@@ -247,7 +253,7 @@ protected:
247
253
  map<string, string> readAll() {
248
254
  map<string, string> result;
249
255
  DIR *dir = opendir(path.c_str());
250
- ScopeGuard guard(boost::bind(closedir, dir));
256
+ ScopeGuard guard(boost::bind(doClosedir, dir));
251
257
  struct dirent *ent;
252
258
 
253
259
  while ((ent = readdir(dir)) != NULL) {
@@ -265,7 +271,7 @@ protected:
265
271
  }
266
272
  };
267
273
 
268
- typedef shared_ptr<DebugDir> DebugDirPtr;
274
+ typedef boost::shared_ptr<DebugDir> DebugDirPtr;
269
275
 
270
276
  /**
271
277
  * Contains information that will be used after fork()ing but before exec()ing,
@@ -419,7 +425,7 @@ private:
419
425
 
420
426
  ProcessPtr handleSpawnResponse(NegotiationDetails &details) {
421
427
  TRACE_POINT();
422
- SocketListPtr sockets = make_shared<SocketList>();
428
+ SocketListPtr sockets = boost::make_shared<SocketList>();
423
429
  while (true) {
424
430
  string line;
425
431
 
@@ -507,7 +513,7 @@ private:
507
513
  details);
508
514
  }
509
515
 
510
- return make_shared<Process>(details.libev, details.pid,
516
+ return boost::make_shared<Process>(details.libev, details.pid,
511
517
  details.gupid, details.connectPassword,
512
518
  details.adminSocket, details.errorPipe,
513
519
  sockets, creationTime, details.spawnStartTime,
@@ -675,7 +681,8 @@ protected:
675
681
  // remaining stderr output for at most 2 seconds.
676
682
  if (errorKind != SpawnException::PRELOADER_STARTUP_TIMEOUT
677
683
  && errorKind != SpawnException::APP_STARTUP_TIMEOUT
678
- && details.stderrCapturer != NULL) {
684
+ && details.stderrCapturer != NULL)
685
+ {
679
686
  bool done = false;
680
687
  unsigned long long timeout = 2000;
681
688
  while (!done) {
@@ -702,7 +709,10 @@ protected:
702
709
 
703
710
  // Now throw SpawnException with the captured stderr output
704
711
  // as error response.
705
- SpawnException e(msg, stderrOutput, false, errorKind);
712
+ SpawnException e(msg,
713
+ createErrorPageFromStderrOutput(msg, errorKind, stderrOutput),
714
+ true,
715
+ errorKind);
706
716
  annotateAppSpawnException(e, details);
707
717
  throw e;
708
718
  }
@@ -713,6 +723,37 @@ protected:
713
723
  }
714
724
  }
715
725
 
726
+ string createErrorPageFromStderrOutput(const string &msg,
727
+ SpawnException::ErrorKind errorKind,
728
+ const string &stderrOutput)
729
+ {
730
+ // These kinds of SpawnExceptions are not supposed to be handled through this function.
731
+ assert(errorKind != SpawnException::PRELOADER_STARTUP_EXPLAINABLE_ERROR);
732
+ assert(errorKind != SpawnException::APP_STARTUP_EXPLAINABLE_ERROR);
733
+
734
+ string result = escapeHTML(msg);
735
+
736
+ if (errorKind == SpawnException::PRELOADER_STARTUP_TIMEOUT
737
+ || errorKind == SpawnException::APP_STARTUP_TIMEOUT
738
+ || errorKind == SpawnException::PRELOADER_STARTUP_ERROR
739
+ || errorKind == SpawnException::APP_STARTUP_ERROR)
740
+ {
741
+ result.append(" Please read <a href=\"https://github.com/phusion/passenger/wiki/Debugging-application-startup-problems\">this article</a> "
742
+ "for more information about this problem.");
743
+ }
744
+ result.append("<br>\n<h2>Raw process output:</h2>\n");
745
+
746
+ if (strip(stderrOutput).empty()) {
747
+ result.append("(empty)");
748
+ } else {
749
+ result.append("<pre>");
750
+ result.append(escapeHTML(stderrOutput));
751
+ result.append("</pre>");
752
+ }
753
+
754
+ return result;
755
+ }
756
+
716
757
  template<typename Details>
717
758
  string readMessageLine(Details &details) {
718
759
  TRACE_POINT();
@@ -942,6 +983,7 @@ protected:
942
983
 
943
984
  appendNullTerminatedKeyValue(result, "IN_PASSENGER", "1");
944
985
  appendNullTerminatedKeyValue(result, "PYTHONUNBUFFERED", "1");
986
+ appendNullTerminatedKeyValue(result, "NODE_PATH", resourceLocator.getNodeLibDir());
945
987
  appendNullTerminatedKeyValue(result, "RAILS_ENV", options.environment);
946
988
  appendNullTerminatedKeyValue(result, "RACK_ENV", options.environment);
947
989
  appendNullTerminatedKeyValue(result, "WSGI_ENV", options.environment);
@@ -1229,11 +1271,19 @@ protected:
1229
1271
  }
1230
1272
 
1231
1273
  void handleInvalidSpawnResponseType(const string &line, NegotiationDetails &details) {
1232
- throwAppSpawnException("An error occurred while starting "
1233
- "the web application. It sent an unknown response type \"" +
1234
- cEscapeString(line) + "\".",
1235
- SpawnException::APP_STARTUP_PROTOCOL_ERROR,
1236
- details);
1274
+ if (line.empty()) {
1275
+ throwAppSpawnException("An error occurred while starting "
1276
+ "the web application. It exited before signalling successful "
1277
+ "startup back to " PROGRAM_NAME ".",
1278
+ SpawnException::APP_STARTUP_ERROR,
1279
+ details);
1280
+ } else {
1281
+ throwAppSpawnException("An error occurred while starting "
1282
+ "the web application. It sent an unknown response type \"" +
1283
+ cEscapeString(line) + "\".",
1284
+ SpawnException::APP_STARTUP_PROTOCOL_ERROR,
1285
+ details);
1286
+ }
1237
1287
  }
1238
1288
 
1239
1289
  public:
@@ -1266,7 +1316,7 @@ public:
1266
1316
  return config;
1267
1317
  }
1268
1318
  };
1269
- typedef shared_ptr<Spawner> SpawnerPtr;
1319
+ typedef boost::shared_ptr<Spawner> SpawnerPtr;
1270
1320
 
1271
1321
 
1272
1322
  } // namespace ApplicationPool2
@@ -60,7 +60,7 @@ private:
60
60
  } else {
61
61
  return SpawnerPtr();
62
62
  }
63
- return make_shared<SmartSpawner>(libev, resourceLocator,
63
+ return boost::make_shared<SmartSpawner>(libev, resourceLocator,
64
64
  generation, preloaderCommand, options, config);
65
65
  }
66
66
 
@@ -74,7 +74,7 @@ public:
74
74
  generation(_generation)
75
75
  {
76
76
  if (_config == NULL) {
77
- config = make_shared<SpawnerConfig>();
77
+ config = boost::make_shared<SpawnerConfig>();
78
78
  } else {
79
79
  config = _config;
80
80
  }
@@ -86,13 +86,13 @@ public:
86
86
  if (options.spawnMethod == "smart" || options.spawnMethod == "smart-lv2") {
87
87
  SpawnerPtr spawner = tryCreateSmartSpawner(options);
88
88
  if (spawner == NULL) {
89
- spawner = make_shared<DirectSpawner>(libev,
89
+ spawner = boost::make_shared<DirectSpawner>(libev,
90
90
  resourceLocator, generation, config);
91
91
  }
92
92
  return spawner;
93
93
  } else if (options.spawnMethod == "direct" || options.spawnMethod == "conservative") {
94
- shared_ptr<DirectSpawner> spawner = make_shared<DirectSpawner>(libev,
95
- resourceLocator, generation, config);
94
+ boost::shared_ptr<DirectSpawner> spawner = boost::make_shared<DirectSpawner>(
95
+ libev, resourceLocator, generation, config);
96
96
  return spawner;
97
97
  } else if (options.spawnMethod == "dummy") {
98
98
  syscalls::usleep(config->spawnerCreationSleepTime);
@@ -110,7 +110,7 @@ public:
110
110
  DummySpawnerPtr getDummySpawner() {
111
111
  boost::lock_guard<boost::mutex> l(syncher);
112
112
  if (dummySpawner == NULL) {
113
- dummySpawner = make_shared<DummySpawner>(resourceLocator, config);
113
+ dummySpawner = boost::make_shared<DummySpawner>(resourceLocator, config);
114
114
  }
115
115
  return dummySpawner;
116
116
  }
@@ -131,7 +131,7 @@ public:
131
131
  }
132
132
  };
133
133
 
134
- typedef shared_ptr<SpawnerFactory> SpawnerFactoryPtr;
134
+ typedef boost::shared_ptr<SpawnerFactory> SpawnerFactoryPtr;
135
135
 
136
136
 
137
137
  } // namespace ApplicationPool2
@@ -111,7 +111,7 @@ using namespace oxt;
111
111
  * Except for otherwise documented parts, this class is not thread-safe,
112
112
  * so only access it within the ApplicationPool lock.
113
113
  */
114
- class SuperGroup: public enable_shared_from_this<SuperGroup> {
114
+ class SuperGroup: public boost::enable_shared_from_this<SuperGroup> {
115
115
  public:
116
116
  enum State {
117
117
  /** This SuperGroup is being initialized. `groups` is empty and
@@ -168,7 +168,7 @@ public:
168
168
  CANCELED
169
169
  };
170
170
 
171
- typedef function<void (ShutdownResult result)> ShutdownCallback;
171
+ typedef boost::function<void (ShutdownResult result)> ShutdownCallback;
172
172
 
173
173
  private:
174
174
  friend class Pool;
@@ -193,7 +193,7 @@ private:
193
193
  static void runAllActions(const vector<Callback> &actions);
194
194
  string generateSecret() const;
195
195
 
196
- void createInterruptableThread(const function<void ()> &func, const string &name,
196
+ void createInterruptableThread(const boost::function<void ()> &func, const string &name,
197
197
  unsigned int stackSize);
198
198
 
199
199
  void verifyInvariants() const {
@@ -328,7 +328,7 @@ private:
328
328
  // Wait until 'detachedGroups' is empty.
329
329
  UPDATE_TRACE_POINT();
330
330
  PoolPtr pool = getPool();
331
- unique_lock<boost::mutex> lock(getPoolSyncher(pool));
331
+ boost::unique_lock<boost::mutex> lock(getPoolSyncher(pool));
332
332
  verifyInvariants();
333
333
  while (true) {
334
334
  if (OXT_UNLIKELY(this->generation != generation)) {
@@ -366,7 +366,7 @@ private:
366
366
 
367
367
  public:
368
368
  mutable boost::mutex backrefSyncher;
369
- const weak_ptr<Pool> pool;
369
+ const boost::weak_ptr<Pool> pool;
370
370
 
371
371
  State state;
372
372
  string name;
@@ -41,7 +41,7 @@ using namespace oxt;
41
41
  struct BackgroundEventLoopPrivate {
42
42
  oxt::thread *thr;
43
43
  boost::mutex lock;
44
- condition_variable cond;
44
+ boost::condition_variable cond;
45
45
  bool started;
46
46
  };
47
47
 
@@ -53,7 +53,7 @@ signalBackgroundEventLoopExit(struct ev_loop *loop, ev_async *async, int revents
53
53
 
54
54
  static void
55
55
  startBackgroundLoop(BackgroundEventLoop *bg) {
56
- unique_lock<boost::mutex> l(bg->priv->lock);
56
+ boost::unique_lock<boost::mutex> l(bg->priv->lock);
57
57
  bg->safe->setCurrentThread();
58
58
  bg->priv->started = true;
59
59
  bg->priv->cond.notify_all();
@@ -83,7 +83,7 @@ BackgroundEventLoop::BackgroundEventLoop(bool scalable) {
83
83
  async->data = this;
84
84
  ev_async_init(async, signalBackgroundEventLoopExit);
85
85
  ev_async_start(loop, async);
86
- safe = make_shared<SafeLibev>(loop);
86
+ safe = boost::make_shared<SafeLibev>(loop);
87
87
  priv = new BackgroundEventLoopPrivate();
88
88
  priv->thr = NULL;
89
89
  priv->started = false;
@@ -99,7 +99,7 @@ BackgroundEventLoop::~BackgroundEventLoop() {
99
99
  void
100
100
  BackgroundEventLoop::start(const string &threadName, unsigned int stackSize) {
101
101
  assert(priv->thr == NULL);
102
- unique_lock<boost::mutex> l(priv->lock);
102
+ boost::unique_lock<boost::mutex> l(priv->lock);
103
103
  priv->thr = new oxt::thread(
104
104
  boost::bind(startBackgroundLoop, this),
105
105
  threadName,
@@ -46,7 +46,7 @@ namespace Passenger {
46
46
  struct BackgroundEventLoop {
47
47
  struct ev_loop *loop;
48
48
  ev_async *async;
49
- shared_ptr<SafeLibev> safe;
49
+ boost::shared_ptr<SafeLibev> safe;
50
50
  BackgroundEventLoopPrivate *priv;
51
51
 
52
52
  BackgroundEventLoop(bool scalable = false);
@@ -36,6 +36,8 @@
36
36
  #define DEFAULT_BACKEND_ACCOUNT_RIGHTS Account::DETACH
37
37
 
38
38
 
39
+ #define APACHE2_DOC_URL "http://www.modrails.com/documentation/Users%20guide%20Apache.html"
40
+
39
41
  #define DEFAULT_ANALYTICS_LOG_GROUP ""
40
42
 
41
43
  #define DEFAULT_ANALYTICS_LOG_PERMISSIONS "u=rwx,g=rx,o=rx"
@@ -68,11 +70,15 @@
68
70
 
69
71
  #define FEEDBACK_FD 3
70
72
 
73
+ #define INDEX_DOC_URL "http://www.modrails.com/documentation/Users%20guide.html"
74
+
71
75
  #define MESSAGE_SERVER_MAX_PASSWORD_SIZE 100
72
76
 
73
77
  #define MESSAGE_SERVER_MAX_USERNAME_SIZE 100
74
78
 
75
- #define PASSENGER_VERSION "4.0.20"
79
+ #define NGINX_DOC_URL "http://www.modrails.com/documentation/Users%20guide%20Nginx.html"
80
+
81
+ #define PASSENGER_VERSION "4.0.21"
76
82
 
77
83
  #define POOL_HELPER_THREAD_STACK_SIZE 262144
78
84
 
@@ -80,6 +86,8 @@
80
86
 
81
87
  #define PROCESS_SHUTDOWN_TIMEOUT_DISPLAY "1 minute"
82
88
 
89
+ #define PROGRAM_NAME "Phusion Passenger"
90
+
83
91
  #define SERVER_INSTANCE_DIR_GENERATION_STRUCTURE_MAJOR_VERSION 2
84
92
 
85
93
  #define SERVER_INSTANCE_DIR_GENERATION_STRUCTURE_MINOR_VERSION 0
@@ -88,7 +96,11 @@
88
96
 
89
97
  #define SERVER_INSTANCE_DIR_STRUCTURE_MINOR_VERSION 0
90
98
 
99
+ #define STANDALONE_DOC_URL "http://www.modrails.com/documentation/Users%20guide%20Standalone.html"
100
+
91
101
  #define STANDALONE_NGINX_CONFIGURE_OPTIONS "--with-cc-opt='-Wno-error' --without-http_fastcgi_module --without-http_scgi_module --without-http_uwsgi_module --with-http_gzip_static_module --with-http_stub_status_module"
92
102
 
103
+ #define SUPPORT_URL "http://www.phusionpassenger.com/support"
104
+
93
105
 
94
106
  #endif /* _PASSENGER_CONSTANTS_H */