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
@@ -1,6 +1,6 @@
1
1
  /*
2
2
  * Phusion Passenger - https://www.phusionpassenger.com/
3
- * Copyright (c) 2010 Phusion
3
+ * Copyright (c) 2010-2013 Phusion
4
4
  *
5
5
  * "Phusion Passenger" is a trademark of Hongli Lai & Ninh Bui.
6
6
  *
@@ -30,10 +30,19 @@
30
30
  * There are too many ways to include hash_map/unordered_map!
31
31
  * This header autodetects the correct method.
32
32
  */
33
- #if defined(HAS_TR1_UNORDERED_MAP)
33
+ #if defined(HAS_UNORDERED_MAP)
34
+ #include <unordered_map>
35
+ #define HashMap std::unordered_map
36
+ #elif defined(HAS_TR1_UNORDERED_MAP)
34
37
  #include <tr1/unordered_map>
35
38
  #define HashMap std::tr1::unordered_map
36
39
  #elif defined(HASH_NAMESPACE) && defined(HASH_MAP_HEADER)
40
+ #ifndef _GLIBCXX_PERMIT_BACKWARD_HASH
41
+ // Prevent deprecation warning on newer libstdc++ systems.
42
+ // The warning suggests using unordered_map, but that is only
43
+ // available when C++11 features are explicitly enabled.
44
+ #define _GLIBCXX_PERMIT_BACKWARD_HASH
45
+ #endif
37
46
  #include HASH_MAP_HEADER
38
47
  #define HashMap HASH_NAMESPACE::hash_map
39
48
  #elif defined(__GNUC__)
@@ -43,8 +52,8 @@
43
52
  #include <hash_map>
44
53
  #define HashMap stdext::hash_map
45
54
  #else
46
- #include <tr/unordered_map>
47
- #define HashMap std::tr1::unordered_map;
55
+ #include <boost/unordered_map.hpp>
56
+ #define HashMap boost::unordered_map
48
57
  #endif
49
58
 
50
59
  #endif /* _PASSENGER_HASH_MAP_H_ */
@@ -1,6 +1,6 @@
1
1
  /*
2
2
  * Phusion Passenger - https://www.phusionpassenger.com/
3
- * Copyright (c) 2010-2012 Phusion
3
+ * Copyright (c) 2010-2013 Phusion
4
4
  *
5
5
  * "Phusion Passenger" is a trademark of Hongli Lai & Ninh Bui.
6
6
  *
@@ -817,14 +817,14 @@ findDataPositionIndexAndOffset(struct iovec data[], size_t count,
817
817
  *offset = 0;
818
818
  }
819
819
 
820
- ssize_t
821
- gatheredWrite(int fd, const StaticString *data, unsigned int dataCount, string &restBuffer) {
820
+ static ssize_t
821
+ realGatheredWrite(int fd, const StaticString *data, unsigned int dataCount, string &restBuffer,
822
+ struct iovec *iov)
823
+ {
822
824
  size_t totalSize, iovCount, i;
823
825
  ssize_t ret;
824
826
 
825
827
  if (restBuffer.empty()) {
826
- struct iovec iov[dataCount];
827
-
828
828
  totalSize = staticStringArrayToIoVec(data, dataCount, iov, iovCount);
829
829
  if (totalSize == 0) {
830
830
  errno = 0;
@@ -876,8 +876,6 @@ gatheredWrite(int fd, const StaticString *data, unsigned int dataCount, string &
876
876
  return totalSize;
877
877
  }
878
878
  } else {
879
- struct iovec iov[dataCount + 1];
880
-
881
879
  iov[0].iov_base = (char *) restBuffer.data();
882
880
  iov[0].iov_len = restBuffer.size();
883
881
  totalSize = staticStringArrayToIoVec(data, dataCount, iov + 1, iovCount);
@@ -946,6 +944,18 @@ gatheredWrite(int fd, const StaticString *data, unsigned int dataCount, string &
946
944
  }
947
945
  }
948
946
 
947
+ ssize_t
948
+ gatheredWrite(int fd, const StaticString *data, unsigned int dataCount, string &restBuffer) {
949
+ if (dataCount < 8) {
950
+ struct iovec iov[8];
951
+ return realGatheredWrite(fd, data, dataCount, restBuffer, iov);
952
+ } else {
953
+ vector<struct iovec> iov;
954
+ iov.reserve(dataCount + 1);
955
+ return realGatheredWrite(fd, data, dataCount, restBuffer, &iov[0]);
956
+ }
957
+ }
958
+
949
959
  static size_t
950
960
  eraseBeginningOfIoVec(struct iovec *iov, size_t count, size_t index, size_t offset) {
951
961
  size_t i, newCount;
@@ -961,9 +971,10 @@ eraseBeginningOfIoVec(struct iovec *iov, size_t count, size_t index, size_t offs
961
971
  return newCount;
962
972
  }
963
973
 
964
- void
965
- gatheredWrite(int fd, const StaticString *data, unsigned int count, unsigned long long *timeout) {
966
- struct iovec iov[count];
974
+ static void
975
+ realGatheredWrite(int fd, const StaticString *data, unsigned int count, unsigned long long *timeout,
976
+ struct iovec *iov)
977
+ {
967
978
  size_t total, iovCount;
968
979
  size_t written = 0;
969
980
 
@@ -988,6 +999,18 @@ gatheredWrite(int fd, const StaticString *data, unsigned int count, unsigned lon
988
999
  assert(written == total);
989
1000
  }
990
1001
 
1002
+ void
1003
+ gatheredWrite(int fd, const StaticString *data, unsigned int count, unsigned long long *timeout) {
1004
+ if (count <= 8) {
1005
+ struct iovec iov[8];
1006
+ realGatheredWrite(fd, data, count, timeout, iov);
1007
+ } else {
1008
+ vector<struct iovec> iov;
1009
+ iov.reserve(count);
1010
+ realGatheredWrite(fd, data, count, timeout, &iov[0]);
1011
+ }
1012
+ }
1013
+
991
1014
  void
992
1015
  setWritevFunction(WritevFunction func) {
993
1016
  if (func != NULL) {
@@ -165,7 +165,7 @@ public:
165
165
  };
166
166
  };
167
167
 
168
- typedef shared_ptr<IniFileLexer::Token> TokenPtr;
168
+ typedef boost::shared_ptr<IniFileLexer::Token> TokenPtr;
169
169
 
170
170
 
171
171
 
@@ -342,7 +342,7 @@ public:
342
342
  TokenPtr peekToken() {
343
343
  if (upcomingTokenPtrIsStale) {
344
344
  Token upcomingToken = getToken();
345
- upcomingTokenPtr = make_shared<Token>(upcomingToken);
345
+ upcomingTokenPtr = boost::make_shared<Token>(upcomingToken);
346
346
  upcomingTokenPtrIsStale = false;
347
347
  }
348
348
 
@@ -396,7 +396,7 @@ public:
396
396
  }
397
397
  };
398
398
 
399
- typedef shared_ptr<IniFileSection> IniFileSectionPtr;
399
+ typedef boost::shared_ptr<IniFileSection> IniFileSectionPtr;
400
400
 
401
401
 
402
402
  class IniFile {
@@ -12,10 +12,10 @@ typedef boost::lock_guard<boost::mutex> LockGuard;
12
12
  typedef boost::unique_lock<boost::mutex> ScopedLock;
13
13
 
14
14
  /** Nicer syntax for conditionally locking the mutex during construction. */
15
- class DynamicScopedLock: public unique_lock<boost::mutex> {
15
+ class DynamicScopedLock: public boost::unique_lock<boost::mutex> {
16
16
  public:
17
17
  DynamicScopedLock(boost::mutex &m, bool lockNow = true)
18
- : unique_lock<boost::mutex>(m, defer_lock)
18
+ : boost::unique_lock<boost::mutex>(m, boost::defer_lock)
19
19
  {
20
20
  if (lockNow) {
21
21
  lock();
@@ -62,8 +62,8 @@ using namespace boost;
62
62
  */
63
63
  class MessageBox;
64
64
  struct Message;
65
- typedef shared_ptr<MessageBox> MessageBoxPtr;
66
- typedef shared_ptr<Message> MessagePtr;
65
+ typedef boost::shared_ptr<MessageBox> MessageBoxPtr;
66
+ typedef boost::shared_ptr<Message> MessagePtr;
67
67
 
68
68
  inline void _sendToMessageBox(const MessageBoxPtr &messageBox, const MessagePtr &message);
69
69
 
@@ -71,7 +71,7 @@ inline void _sendToMessageBox(const MessageBoxPtr &messageBox, const MessagePtr
71
71
  struct Message {
72
72
  string name;
73
73
  VariantMap args;
74
- weak_ptr<MessageBox> from;
74
+ boost::weak_ptr<MessageBox> from;
75
75
  void *data;
76
76
  void (*freeData)(void *p);
77
77
 
@@ -101,7 +101,7 @@ struct Message {
101
101
  }
102
102
 
103
103
  void setFrom(const MessageBoxPtr &messageBox) {
104
- from = weak_ptr<MessageBox>(messageBox);
104
+ from = boost::weak_ptr<MessageBox>(messageBox);
105
105
  }
106
106
 
107
107
  void sendReply(const MessagePtr &message) {
@@ -117,13 +117,13 @@ struct Message {
117
117
  };
118
118
 
119
119
 
120
- class MessageBox: public enable_shared_from_this<MessageBox> {
120
+ class MessageBox: public boost::enable_shared_from_this<MessageBox> {
121
121
  typedef list<MessagePtr> MessageList;
122
122
  typedef MessageList::iterator Iterator;
123
123
  typedef MessageList::const_iterator ConstIterator;
124
124
 
125
125
  mutable boost::mutex syncher;
126
- condition_variable cond;
126
+ boost::condition_variable cond;
127
127
  MessageList messages;
128
128
 
129
129
  Iterator search(const string &name) {
@@ -163,7 +163,7 @@ class MessageBox: public enable_shared_from_this<MessageBox> {
163
163
  return end;
164
164
  }
165
165
 
166
- bool checkTimeout(unique_lock<boost::mutex> &l, unsigned long long *timeout,
166
+ bool checkTimeout(boost::unique_lock<boost::mutex> &l, unsigned long long *timeout,
167
167
  unsigned long long beginTime, posix_time::ptime deadline)
168
168
  {
169
169
  posix_time::time_duration diff = deadline -
@@ -209,7 +209,7 @@ public:
209
209
  }
210
210
 
211
211
  const MessagePtr peek(const string &name) const {
212
- unique_lock<boost::mutex> l(syncher);
212
+ boost::unique_lock<boost::mutex> l(syncher);
213
213
  ConstIterator it = search(name);
214
214
  if (it == messages.end()) {
215
215
  return MessagePtr();
@@ -219,7 +219,7 @@ public:
219
219
  }
220
220
 
221
221
  MessagePtr recv(const string &name, unsigned long long *timeout = NULL) {
222
- unique_lock<boost::mutex> l(syncher);
222
+ boost::unique_lock<boost::mutex> l(syncher);
223
223
  posix_time::ptime deadline;
224
224
  unsigned long long beginTime = 0; // Shut up compiler warning.
225
225
  if (timeout != NULL) {
@@ -258,7 +258,7 @@ public:
258
258
 
259
259
  template<typename StringCollection>
260
260
  MessagePtr recvAny(const StringCollection &names, unsigned long long *timeout = NULL) {
261
- unique_lock<boost::mutex> l(syncher);
261
+ boost::unique_lock<boost::mutex> l(syncher);
262
262
  posix_time::ptime deadline;
263
263
  unsigned long long beginTime = 0; // Shut up compiler warning.
264
264
  if (timeout != NULL) {
@@ -219,10 +219,8 @@ private:
219
219
  *data = endOfWord;
220
220
  return result;
221
221
  }
222
-
223
- static long long readNextWordAsLongLong(const char **data) {
224
- StaticString word = readNextWord(data);
225
- char nullTerminatedWord[word.size() + 1];
222
+
223
+ static long long processNextWordAsLongLong(const StaticString &word, char *nullTerminatedWord) {
226
224
  memcpy(nullTerminatedWord, word.c_str(), word.size());
227
225
  nullTerminatedWord[word.size()] = '\0';
228
226
  if (*nullTerminatedWord == '\0') {
@@ -232,9 +230,18 @@ private:
232
230
  }
233
231
  }
234
232
 
235
- static int readNextWordAsInt(const char **data) {
233
+ static long long readNextWordAsLongLong(const char **data) {
236
234
  StaticString word = readNextWord(data);
237
- char nullTerminatedWord[word.size() + 1];
235
+ if (word.size() < 50) {
236
+ char nullTerminatedWord[50];
237
+ return processNextWordAsLongLong(word, nullTerminatedWord);
238
+ } else {
239
+ string nullTerminatedWord(word.size() + 1, '\0');
240
+ return processNextWordAsLongLong(word, &nullTerminatedWord[0]);
241
+ }
242
+ }
243
+
244
+ static int processNextWordAsInt(const StaticString &word, char *nullTerminatedWord) {
238
245
  memcpy(nullTerminatedWord, word.c_str(), word.size());
239
246
  nullTerminatedWord[word.size()] = '\0';
240
247
  if (*nullTerminatedWord == '\0') {
@@ -244,6 +251,17 @@ private:
244
251
  }
245
252
  }
246
253
 
254
+ static int readNextWordAsInt(const char **data) {
255
+ StaticString word = readNextWord(data);
256
+ if (word.size() < 50) {
257
+ char nullTerminatedWord[50];
258
+ return processNextWordAsInt(word, nullTerminatedWord);
259
+ } else {
260
+ string nullTerminatedWord(word.size() + 1, '\0');
261
+ return processNextWordAsInt(word, &nullTerminatedWord[0]);
262
+ }
263
+ }
264
+
247
265
  string runCommandAndCaptureOutput(const char **command) const {
248
266
  pid_t pid;
249
267
  int e;
@@ -50,13 +50,13 @@ using namespace oxt;
50
50
  */
51
51
  class ScopeGuard: public noncopyable {
52
52
  private:
53
- function<void ()> func;
53
+ boost::function<void ()> func;
54
54
  bool interruptable;
55
55
 
56
56
  public:
57
57
  ScopeGuard() { }
58
58
 
59
- ScopeGuard(const function<void ()> &func, bool interruptable = false) {
59
+ ScopeGuard(const boost::function<void ()> &func, bool interruptable = false) {
60
60
  this->func = func;
61
61
  this->interruptable = interruptable;
62
62
  }
@@ -74,12 +74,12 @@ public:
74
74
  }
75
75
 
76
76
  void clear() {
77
- func = function<void()>();
77
+ func = boost::function<void()>();
78
78
  }
79
79
 
80
80
  void runNow() {
81
- function<void ()> oldFunc = func;
82
- func = function<void()>();
81
+ boost::function<void ()> oldFunc = func;
82
+ func = boost::function<void()>();
83
83
  if (interruptable) {
84
84
  oldFunc();
85
85
  } else {
@@ -203,6 +203,7 @@ uintToString( LargestUInt value,
203
203
  #include <cstring>
204
204
  #include <iostream>
205
205
  #include <stdexcept>
206
+ #include <string.h>
206
207
 
207
208
  #if _MSC_VER >= 1400 // VC++ 8.0
208
209
  #pragma warning( disable : 4996 ) // disable warning about strdup being deprecated.
@@ -3397,6 +3398,7 @@ Path::make( Value &root ) const
3397
3398
  #include <iostream>
3398
3399
  #include <sstream>
3399
3400
  #include <iomanip>
3401
+ #include <ios>
3400
3402
 
3401
3403
  #if _MSC_VER >= 1400 // VC++ 8.0
3402
3404
  #pragma warning( disable : 4996 ) // disable warning about strdup being deprecated.
@@ -77,45 +77,45 @@ using namespace boost;
77
77
  * All FileBackedPipe methods may only be called from the event loop on which it
78
78
  * is installed.
79
79
  *
80
- * FileBackedPipe *must* be dynamically allocated and assigned to a shared_ptr.
80
+ * FileBackedPipe *must* be dynamically allocated and assigned to a boost::shared_ptr.
81
81
  */
82
- class FileBackedPipe: public enable_shared_from_this<FileBackedPipe> {
82
+ class FileBackedPipe: public boost::enable_shared_from_this<FileBackedPipe> {
83
83
  public:
84
84
  class ConsumeCallback {
85
85
  private:
86
- mutable weak_ptr<FileBackedPipe> wself;
86
+ mutable boost::weak_ptr<FileBackedPipe> wself;
87
87
  unsigned int generation;
88
88
 
89
89
  public:
90
90
  ConsumeCallback() { }
91
91
 
92
- ConsumeCallback(const shared_ptr<FileBackedPipe> &self, unsigned int _generation)
92
+ ConsumeCallback(const boost::shared_ptr<FileBackedPipe> &self, unsigned int _generation)
93
93
  : wself(self),
94
94
  generation(_generation)
95
95
  { }
96
96
 
97
97
  void operator()(size_t consumed, bool done) const {
98
- shared_ptr<FileBackedPipe> self = wself.lock();
98
+ boost::shared_ptr<FileBackedPipe> self = wself.lock();
99
99
  if (self != NULL) {
100
100
  wself.reset();
101
101
  self->dataConsumed(consumed, done, generation);
102
102
  }
103
103
  }
104
104
 
105
- function<void (size_t, bool)> toFunction() const {
106
- shared_ptr<FileBackedPipe> self = wself.lock();
105
+ boost::function<void (size_t, bool)> toFunction() const {
106
+ boost::shared_ptr<FileBackedPipe> self = wself.lock();
107
107
  if (self != NULL) {
108
108
  return boost::bind(&ConsumeCallback::operator(), this, _1, _2);
109
109
  } else {
110
- return function<void (size_t, bool)>();
110
+ return boost::function<void (size_t, bool)>();
111
111
  }
112
112
  }
113
113
  };
114
114
 
115
- typedef void (*DataCallback)(const shared_ptr<FileBackedPipe> &source, const char *data,
115
+ typedef void (*DataCallback)(const boost::shared_ptr<FileBackedPipe> &source, const char *data,
116
116
  size_t size, const ConsumeCallback &consumed);
117
- typedef void (*ErrorCallback)(const shared_ptr<FileBackedPipe> &source, int errorCode);
118
- typedef void (*Callback)(const shared_ptr<FileBackedPipe> &source);
117
+ typedef void (*ErrorCallback)(const boost::shared_ptr<FileBackedPipe> &source, int errorCode);
118
+ typedef void (*Callback)(const boost::shared_ptr<FileBackedPipe> &source);
119
119
 
120
120
  enum DataState {
121
121
  IN_MEMORY,
@@ -124,9 +124,9 @@ public:
124
124
  };
125
125
 
126
126
  private:
127
- typedef function<void (int err, const char *data, size_t size)> EioReadCallback;
127
+ typedef boost::function<void (int err, const char *data, size_t size)> EioReadCallback;
128
128
 
129
- // We already have a shared_ptr reference to libev through MultiLibeio.
129
+ // We already have a boost::shared_ptr reference to libev through MultiLibeio.
130
130
  const string dir;
131
131
  size_t threshold;
132
132
 
@@ -271,7 +271,7 @@ private:
271
271
  libeio.open(filename.str().c_str(), O_CREAT | O_RDWR | O_TRUNC, 0, 0,
272
272
  boost::bind(&FileBackedPipe::openCallback, this,
273
273
  _1, filename.str(), generation,
274
- weak_ptr<FileBackedPipe>(shared_from_this())
274
+ boost::weak_ptr<FileBackedPipe>(shared_from_this())
275
275
  )
276
276
  );
277
277
  }
@@ -302,7 +302,7 @@ private:
302
302
  &FileBackedPipe::writeBufferToFileCallback, this,
303
303
  _1, file.fd, buffer, file.writeBuffer.size(),
304
304
  generation,
305
- weak_ptr<FileBackedPipe>(shared_from_this())
305
+ boost::weak_ptr<FileBackedPipe>(shared_from_this())
306
306
  )
307
307
  );
308
308
  }
@@ -310,9 +310,9 @@ private:
310
310
 
311
311
  void writeBufferToFileCallback(eio_req req, FileDescriptor fd,
312
312
  shared_array<char> buffer, size_t size,
313
- unsigned int generation, weak_ptr<FileBackedPipe> wself)
313
+ unsigned int generation, boost::weak_ptr<FileBackedPipe> wself)
314
314
  {
315
- shared_ptr<FileBackedPipe> self = wself.lock();
315
+ boost::shared_ptr<FileBackedPipe> self = wself.lock();
316
316
  if (self == NULL || EIO_CANCELLED(&req) || generation != self->generation) {
317
317
  return;
318
318
  }
@@ -333,9 +333,9 @@ private:
333
333
  }
334
334
 
335
335
  void openCallback(eio_req req, string filename, unsigned int generation,
336
- weak_ptr<FileBackedPipe> &wself)
336
+ boost::weak_ptr<FileBackedPipe> &wself)
337
337
  {
338
- shared_ptr<FileBackedPipe> self = wself.lock();
338
+ boost::shared_ptr<FileBackedPipe> self = wself.lock();
339
339
  if (self == NULL || EIO_CANCELLED(&req) || generation != self->generation) {
340
340
  if (req.result != -1 || EIO_CANCELLED(&req)) {
341
341
  eio_close(req.result, 0, successCallback, NULL);
@@ -354,7 +354,7 @@ private:
354
354
  } else {
355
355
  getLibev()->runAfter(openTimeout,
356
356
  boost::bind(&FileBackedPipe::finalizeOpenFileAfterTimeout, this,
357
- weak_ptr<FileBackedPipe>(shared_from_this()),
357
+ boost::weak_ptr<FileBackedPipe>(shared_from_this()),
358
358
  generation, FileDescriptor(req.result)));
359
359
  }
360
360
  }
@@ -366,10 +366,10 @@ private:
366
366
  writeBufferToFile();
367
367
  }
368
368
 
369
- void finalizeOpenFileAfterTimeout(weak_ptr<FileBackedPipe> wself,
369
+ void finalizeOpenFileAfterTimeout(boost::weak_ptr<FileBackedPipe> wself,
370
370
  unsigned int generation, FileDescriptor fd)
371
371
  {
372
- shared_ptr<FileBackedPipe> self = wself.lock();
372
+ boost::shared_ptr<FileBackedPipe> self = wself.lock();
373
373
  if (self != NULL || generation != self->generation) {
374
374
  self->finalizeOpenFile(fd);
375
375
  }
@@ -390,7 +390,7 @@ private:
390
390
  boost::bind(
391
391
  &FileBackedPipe::readCallback, this,
392
392
  _1, file.fd, buffer, callback, generation,
393
- weak_ptr<FileBackedPipe>(shared_from_this())
393
+ boost::weak_ptr<FileBackedPipe>(shared_from_this())
394
394
  )
395
395
  );
396
396
  if (req == NULL) {
@@ -400,9 +400,9 @@ private:
400
400
  }
401
401
 
402
402
  void readCallback(eio_req req, FileDescriptor fd, shared_array<char> buffer,
403
- EioReadCallback callback, unsigned int generation, weak_ptr<FileBackedPipe> wself)
403
+ EioReadCallback callback, unsigned int generation, boost::weak_ptr<FileBackedPipe> wself)
404
404
  {
405
- shared_ptr<FileBackedPipe> self = wself.lock();
405
+ boost::shared_ptr<FileBackedPipe> self = wself.lock();
406
406
  if (self == NULL || EIO_CANCELLED(&req) || generation != self->generation) {
407
407
  return;
408
408
  }
@@ -724,7 +724,7 @@ public:
724
724
  }
725
725
  };
726
726
 
727
- typedef shared_ptr<FileBackedPipe> FileBackedPipePtr;
727
+ typedef boost::shared_ptr<FileBackedPipe> FileBackedPipePtr;
728
728
 
729
729
 
730
730
  } // namespace Passenger