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,14 +1,21 @@
1
1
  // This header intentionally has no include guards.
2
2
  //
3
- // Copyright (c) 2001-2009 Peter Dimov
3
+ // Copyright (c) 2001-2009, 2012 Peter Dimov
4
4
  //
5
5
  // Distributed under the Boost Software License, Version 1.0.
6
6
  // See accompanying file LICENSE_1_0.txt or copy at
7
7
  // http://www.boost.org/LICENSE_1_0.txt
8
8
 
9
- #if ( defined(__SUNPRO_CC) && BOOST_WORKAROUND(__SUNPRO_CC, < 0x570) ) || defined(__CINT__)
9
+ #if !defined( BOOST_NO_CXX11_EXPLICIT_CONVERSION_OPERATORS ) && !defined( BOOST_NO_CXX11_NULLPTR )
10
10
 
11
- operator bool () const
11
+ explicit operator bool () const BOOST_NOEXCEPT
12
+ {
13
+ return px != 0;
14
+ }
15
+
16
+ #elif ( defined(__SUNPRO_CC) && BOOST_WORKAROUND(__SUNPRO_CC, < 0x570) ) || defined(__CINT__)
17
+
18
+ operator bool () const BOOST_NOEXCEPT
12
19
  {
13
20
  return px != 0;
14
21
  }
@@ -21,7 +28,7 @@
21
28
 
22
29
  typedef void (*unspecified_bool_type)( this_type*** );
23
30
 
24
- operator unspecified_bool_type() const // never throws
31
+ operator unspecified_bool_type() const BOOST_NOEXCEPT
25
32
  {
26
33
  return px == 0? 0: unspecified_bool;
27
34
  }
@@ -31,18 +38,18 @@
31
38
  ( defined(__GNUC__) && (__GNUC__ * 100 + __GNUC_MINOR__ < 304) ) || \
32
39
  ( defined(__SUNPRO_CC) && BOOST_WORKAROUND(__SUNPRO_CC, <= 0x590) )
33
40
 
34
- typedef T * (this_type::*unspecified_bool_type)() const;
41
+ typedef element_type * (this_type::*unspecified_bool_type)() const;
35
42
 
36
- operator unspecified_bool_type() const // never throws
43
+ operator unspecified_bool_type() const BOOST_NOEXCEPT
37
44
  {
38
45
  return px == 0? 0: &this_type::get;
39
46
  }
40
47
 
41
48
  #else
42
49
 
43
- typedef T * this_type::*unspecified_bool_type;
50
+ typedef element_type * this_type::*unspecified_bool_type;
44
51
 
45
- operator unspecified_bool_type() const // never throws
52
+ operator unspecified_bool_type() const BOOST_NOEXCEPT
46
53
  {
47
54
  return px == 0? 0: &this_type::px;
48
55
  }
@@ -50,7 +57,7 @@
50
57
  #endif
51
58
 
52
59
  // operator! is redundant, but some compilers need it
53
- bool operator! () const // never throws
60
+ bool operator! () const BOOST_NOEXCEPT
54
61
  {
55
62
  return px == 0;
56
63
  }
@@ -35,7 +35,14 @@
35
35
  // rather than including <memory> directly:
36
36
  #include <boost/config/no_tr1/memory.hpp> // std::auto_ptr
37
37
  #include <functional> // std::less
38
- #include <new> // std::bad_alloc
38
+
39
+ #ifdef BOOST_NO_EXCEPTIONS
40
+ # include <new> // std::bad_alloc
41
+ #endif
42
+
43
+ #if !defined( BOOST_NO_CXX11_SMART_PTR )
44
+ # include <boost/utility/addressof.hpp>
45
+ #endif
39
46
 
40
47
  namespace boost
41
48
  {
@@ -56,6 +63,38 @@ template< class D > struct sp_inplace_tag
56
63
  {
57
64
  };
58
65
 
66
+ #if !defined( BOOST_NO_CXX11_SMART_PTR )
67
+
68
+ template< class T > class sp_reference_wrapper
69
+ {
70
+ public:
71
+
72
+ explicit sp_reference_wrapper( T & t): t_( boost::addressof( t ) )
73
+ {
74
+ }
75
+
76
+ template< class Y > void operator()( Y * p ) const
77
+ {
78
+ (*t_)( p );
79
+ }
80
+
81
+ private:
82
+
83
+ T * t_;
84
+ };
85
+
86
+ template< class D > struct sp_convert_reference
87
+ {
88
+ typedef D type;
89
+ };
90
+
91
+ template< class D > struct sp_convert_reference< D& >
92
+ {
93
+ typedef sp_reference_wrapper< D > type;
94
+ };
95
+
96
+ #endif
97
+
59
98
  class weak_count;
60
99
 
61
100
  class shared_count
@@ -161,7 +200,7 @@ public:
161
200
  }
162
201
  catch( ... )
163
202
  {
164
- D()( p ); // delete p
203
+ D::operator_fn( p ); // delete p
165
204
  throw;
166
205
  }
167
206
 
@@ -171,7 +210,7 @@ public:
171
210
 
172
211
  if( pi_ == 0 )
173
212
  {
174
- D()( p ); // delete p
213
+ D::operator_fn( p ); // delete p
175
214
  boost::throw_exception( std::bad_alloc() );
176
215
  }
177
216
 
@@ -247,7 +286,7 @@ public:
247
286
  }
248
287
  catch(...)
249
288
  {
250
- D()( p );
289
+ D::operator_fn( p );
251
290
 
252
291
  if( pi_ != 0 )
253
292
  {
@@ -267,7 +306,7 @@ public:
267
306
  }
268
307
  else
269
308
  {
270
- D()( p );
309
+ D::operator_fn( p );
271
310
  boost::throw_exception( std::bad_alloc() );
272
311
  }
273
312
 
@@ -300,6 +339,33 @@ public:
300
339
 
301
340
  #endif
302
341
 
342
+ #if !defined( BOOST_NO_CXX11_SMART_PTR )
343
+
344
+ template<class Y, class D>
345
+ explicit shared_count( std::unique_ptr<Y, D> & r ): pi_( 0 )
346
+ #if defined(BOOST_SP_ENABLE_DEBUG_HOOKS)
347
+ , id_(shared_count_id)
348
+ #endif
349
+ {
350
+ typedef typename sp_convert_reference<D>::type D2;
351
+
352
+ D2 d2( r.get_deleter() );
353
+ pi_ = new sp_counted_impl_pd< typename std::unique_ptr<Y, D>::pointer, D2 >( r.get(), d2 );
354
+
355
+ #ifdef BOOST_NO_EXCEPTIONS
356
+
357
+ if( pi_ == 0 )
358
+ {
359
+ boost::throw_exception( std::bad_alloc() );
360
+ }
361
+
362
+ #endif
363
+
364
+ r.release();
365
+ }
366
+
367
+ #endif
368
+
303
369
  ~shared_count() // nothrow
304
370
  {
305
371
  if( pi_ != 0 ) pi_->release();
@@ -316,7 +382,7 @@ public:
316
382
  if( pi_ != 0 ) pi_->add_ref_copy();
317
383
  }
318
384
 
319
- #if defined( BOOST_HAS_RVALUE_REFS )
385
+ #if !defined( BOOST_NO_CXX11_RVALUE_REFERENCES )
320
386
 
321
387
  shared_count(shared_count && r): pi_(r.pi_) // nothrow
322
388
  #if defined(BOOST_SP_ENABLE_DEBUG_HOOKS)
@@ -381,6 +447,11 @@ public:
381
447
  {
382
448
  return pi_? pi_->get_deleter( ti ): 0;
383
449
  }
450
+
451
+ void * get_untyped_deleter() const
452
+ {
453
+ return pi_? pi_->get_untyped_deleter(): 0;
454
+ }
384
455
  };
385
456
 
386
457
 
@@ -423,7 +494,7 @@ public:
423
494
 
424
495
  // Move support
425
496
 
426
- #if defined( BOOST_HAS_RVALUE_REFS )
497
+ #if !defined( BOOST_NO_CXX11_RVALUE_REFERENCES )
427
498
 
428
499
  weak_count(weak_count && r): pi_(r.pi_) // nothrow
429
500
  #if defined(BOOST_SP_ENABLE_DEBUG_HOOKS)
@@ -48,6 +48,21 @@ template< class Y, class T > struct sp_convertible
48
48
  enum _vt { value = sizeof( (f)( static_cast<Y*>(0) ) ) == sizeof(yes) };
49
49
  };
50
50
 
51
+ template< class Y, class T > struct sp_convertible< Y, T[] >
52
+ {
53
+ enum _vt { value = false };
54
+ };
55
+
56
+ template< class Y, class T > struct sp_convertible< Y[], T[] >
57
+ {
58
+ enum _vt { value = sp_convertible< Y[1], T[1] >::value };
59
+ };
60
+
61
+ template< class Y, std::size_t N, class T > struct sp_convertible< Y[N], T[] >
62
+ {
63
+ enum _vt { value = sp_convertible< Y[1], T[1] >::value };
64
+ };
65
+
51
66
  struct sp_empty
52
67
  {
53
68
  };
@@ -32,25 +32,28 @@
32
32
  #elif defined( BOOST_DISABLE_THREADS ) && !defined( BOOST_SP_ENABLE_THREADS ) && !defined( BOOST_DISABLE_WIN32 )
33
33
  # include <boost/smart_ptr/detail/sp_counted_base_nt.hpp>
34
34
 
35
- #elif defined( __GNUC__ ) && ( defined( __i386__ ) || defined( __x86_64__ ) )
36
- # include <boost/smart_ptr/detail/sp_counted_base_gcc_x86.hpp>
35
+ #elif defined( __SNC__ )
36
+ # include <boost/smart_ptr/detail/sp_counted_base_snc_ps3.hpp>
37
37
 
38
- #elif defined( __GNUC__ ) && defined( __ia64__ ) && !defined( __INTEL_COMPILER )
39
- # include <boost/smart_ptr/detail/sp_counted_base_gcc_ia64.hpp>
38
+ #elif defined( __GNUC__ ) && ( defined( __i386__ ) || defined( __x86_64__ ) ) && !defined(__PATHSCALE__)
39
+ # include <boost/smart_ptr/detail/sp_counted_base_gcc_x86.hpp>
40
40
 
41
41
  #elif defined(__HP_aCC) && defined(__ia64)
42
42
  # include <boost/smart_ptr/detail/sp_counted_base_acc_ia64.hpp>
43
43
 
44
+ #elif defined( __GNUC__ ) && defined( __ia64__ ) && !defined( __INTEL_COMPILER ) && !defined(__PATHSCALE__)
45
+ # include <boost/smart_ptr/detail/sp_counted_base_gcc_ia64.hpp>
46
+
44
47
  #elif defined( __IBMCPP__ ) && defined( __powerpc )
45
48
  # include <boost/smart_ptr/detail/sp_counted_base_vacpp_ppc.hpp>
46
49
 
47
50
  #elif defined( __MWERKS__ ) && defined( __POWERPC__ )
48
51
  # include <boost/smart_ptr/detail/sp_counted_base_cw_ppc.hpp>
49
52
 
50
- #elif defined( __GNUC__ ) && ( defined( __powerpc__ ) || defined( __ppc__ ) || defined( __ppc ) )
53
+ #elif defined( __GNUC__ ) && ( defined( __powerpc__ ) || defined( __ppc__ ) || defined( __ppc ) ) && !defined(__PATHSCALE__) && !defined( _AIX )
51
54
  # include <boost/smart_ptr/detail/sp_counted_base_gcc_ppc.hpp>
52
55
 
53
- #elif defined( __GNUC__ ) && ( defined( __mips__ ) || defined( _mips ) )
56
+ #elif defined( __GNUC__ ) && ( defined( __mips__ ) || defined( _mips ) ) && !defined(__PATHSCALE__)
54
57
  # include <boost/smart_ptr/detail/sp_counted_base_gcc_mips.hpp>
55
58
 
56
59
  #elif defined( BOOST_SP_HAS_SYNC )
@@ -62,6 +65,9 @@
62
65
  #elif defined( WIN32 ) || defined( _WIN32 ) || defined( __WIN32__ ) || defined(__CYGWIN__)
63
66
  # include <boost/smart_ptr/detail/sp_counted_base_w32.hpp>
64
67
 
68
+ #elif defined( _AIX )
69
+ # include <boost/smart_ptr/detail/sp_counted_base_aix.hpp>
70
+
65
71
  #elif !defined( BOOST_HAS_THREADS )
66
72
  # include <boost/smart_ptr/detail/sp_counted_base_nt.hpp>
67
73
 
@@ -104,6 +104,7 @@ public:
104
104
  }
105
105
 
106
106
  virtual void * get_deleter( sp_typeinfo const & ti ) = 0;
107
+ virtual void * get_untyped_deleter() = 0;
107
108
 
108
109
  void add_ref_copy()
109
110
  {
@@ -96,6 +96,7 @@ public:
96
96
  }
97
97
 
98
98
  virtual void * get_deleter( sp_typeinfo const & ti ) = 0;
99
+ virtual void * get_untyped_deleter() = 0;
99
100
 
100
101
  void add_ref_copy()
101
102
  {
@@ -124,6 +124,7 @@ public:
124
124
  }
125
125
 
126
126
  virtual void * get_deleter( sp_typeinfo const & ti ) = 0;
127
+ virtual void * get_untyped_deleter() = 0;
127
128
 
128
129
  void add_ref_copy()
129
130
  {
@@ -112,6 +112,7 @@ public:
112
112
  }
113
113
 
114
114
  virtual void * get_deleter( sp_typeinfo const & ti ) = 0;
115
+ virtual void * get_untyped_deleter() = 0;
115
116
 
116
117
  void add_ref_copy()
117
118
  {
@@ -111,6 +111,7 @@ public:
111
111
  }
112
112
 
113
113
  virtual void * get_deleter( sp_typeinfo const & ti ) = 0;
114
+ virtual void * get_untyped_deleter() = 0;
114
115
 
115
116
  void add_ref_copy()
116
117
  {
@@ -135,6 +135,7 @@ public:
135
135
  }
136
136
 
137
137
  virtual void * get_deleter( sp_typeinfo const & ti ) = 0;
138
+ virtual void * get_untyped_deleter() = 0;
138
139
 
139
140
  void add_ref_copy()
140
141
  {
@@ -135,6 +135,7 @@ public:
135
135
  }
136
136
 
137
137
  virtual void * get_deleter( sp_typeinfo const & ti ) = 0;
138
+ virtual void * get_untyped_deleter() = 0;
138
139
 
139
140
  void add_ref_copy()
140
141
  {
@@ -120,6 +120,7 @@ public:
120
120
  }
121
121
 
122
122
  virtual void * get_deleter( sp_typeinfo const & ti ) = 0;
123
+ virtual void * get_untyped_deleter() = 0;
123
124
 
124
125
  void add_ref_copy()
125
126
  {
@@ -127,6 +127,7 @@ public:
127
127
  }
128
128
 
129
129
  virtual void * get_deleter( sp_typeinfo const & ti ) = 0;
130
+ virtual void * get_untyped_deleter() = 0;
130
131
 
131
132
  void add_ref_copy()
132
133
  {
@@ -59,6 +59,7 @@ public:
59
59
  }
60
60
 
61
61
  virtual void * get_deleter( sp_typeinfo const & ti ) = 0;
62
+ virtual void * get_untyped_deleter() = 0;
62
63
 
63
64
  void add_ref_copy()
64
65
  {
@@ -70,6 +70,7 @@ public:
70
70
  }
71
71
 
72
72
  virtual void * get_deleter( sp_typeinfo const & ti ) = 0;
73
+ virtual void * get_untyped_deleter() = 0;
73
74
 
74
75
  void add_ref_copy()
75
76
  {
@@ -0,0 +1,162 @@
1
+ #ifndef BOOST_SMART_PTR_DETAIL_SP_COUNTED_BASE_SNC_PS3_HPP_INCLUDED
2
+ #define BOOST_SMART_PTR_DETAIL_SP_COUNTED_BASE_SNC_PS3_HPP_INCLUDED
3
+
4
+ // MS compatible compilers support #pragma once
5
+ #if defined(_MSC_VER) && (_MSC_VER >= 1020)
6
+ # pragma once
7
+ #endif
8
+
9
+ // detail/sp_counted_base_gcc_sparc.hpp - g++ on Sparc V8+
10
+ //
11
+ // Copyright (c) 2006 Piotr Wyderski
12
+ // Copyright (c) 2006 Tomas Puverle
13
+ // Copyright (c) 2006 Peter Dimov
14
+ // Copyright (c) 2011 Emil Dotchevski
15
+ //
16
+ // Distributed under the Boost Software License, Version 1.0.
17
+ // See accompanying file LICENSE_1_0.txt or copy at
18
+ // http://www.boost.org/LICENSE_1_0.txt
19
+ //
20
+ // Thanks to Michael van der Westhuizen
21
+
22
+ #include <boost/detail/sp_typeinfo.hpp>
23
+ #include <inttypes.h> // uint32_t
24
+
25
+ namespace boost
26
+ {
27
+
28
+ namespace detail
29
+ {
30
+
31
+ inline uint32_t compare_and_swap( uint32_t * dest_, uint32_t compare_, uint32_t swap_ )
32
+ {
33
+ return __builtin_cellAtomicCompareAndSwap32(dest_,compare_,swap_);
34
+ }
35
+
36
+ inline uint32_t atomic_fetch_and_add( uint32_t * pw, uint32_t dv )
37
+ {
38
+ // long r = *pw;
39
+ // *pw += dv;
40
+ // return r;
41
+
42
+ for( ;; )
43
+ {
44
+ uint32_t r = *pw;
45
+
46
+ if( __builtin_expect((compare_and_swap(pw, r, r + dv) == r), 1) )
47
+ {
48
+ return r;
49
+ }
50
+ }
51
+ }
52
+
53
+ inline void atomic_increment( uint32_t * pw )
54
+ {
55
+ (void) __builtin_cellAtomicIncr32( pw );
56
+ }
57
+
58
+ inline uint32_t atomic_decrement( uint32_t * pw )
59
+ {
60
+ return __builtin_cellAtomicDecr32( pw );
61
+ }
62
+
63
+ inline uint32_t atomic_conditional_increment( uint32_t * pw )
64
+ {
65
+ // long r = *pw;
66
+ // if( r != 0 ) ++*pw;
67
+ // return r;
68
+
69
+ for( ;; )
70
+ {
71
+ uint32_t r = *pw;
72
+
73
+ if( r == 0 )
74
+ {
75
+ return r;
76
+ }
77
+
78
+ if( __builtin_expect( ( compare_and_swap( pw, r, r + 1 ) == r ), 1 ) )
79
+ {
80
+ return r;
81
+ }
82
+ }
83
+ }
84
+
85
+ class sp_counted_base
86
+ {
87
+ private:
88
+
89
+ sp_counted_base( sp_counted_base const & );
90
+ sp_counted_base & operator= ( sp_counted_base const & );
91
+
92
+ uint32_t use_count_; // #shared
93
+ uint32_t weak_count_; // #weak + (#shared != 0)
94
+
95
+ public:
96
+
97
+ sp_counted_base(): use_count_( 1 ), weak_count_( 1 )
98
+ {
99
+ }
100
+
101
+ virtual ~sp_counted_base() // nothrow
102
+ {
103
+ }
104
+
105
+ // dispose() is called when use_count_ drops to zero, to release
106
+ // the resources managed by *this.
107
+
108
+ virtual void dispose() = 0; // nothrow
109
+
110
+ // destroy() is called when weak_count_ drops to zero.
111
+
112
+ virtual void destroy() // nothrow
113
+ {
114
+ delete this;
115
+ }
116
+
117
+ virtual void * get_deleter( sp_typeinfo const & ti ) = 0;
118
+ virtual void * get_untyped_deleter() = 0;
119
+
120
+ void add_ref_copy()
121
+ {
122
+ atomic_increment( &use_count_ );
123
+ }
124
+
125
+ bool add_ref_lock() // true on success
126
+ {
127
+ return atomic_conditional_increment( &use_count_ ) != 0;
128
+ }
129
+
130
+ void release() // nothrow
131
+ {
132
+ if( atomic_decrement( &use_count_ ) == 1 )
133
+ {
134
+ dispose();
135
+ weak_release();
136
+ }
137
+ }
138
+
139
+ void weak_add_ref() // nothrow
140
+ {
141
+ atomic_increment( &weak_count_ );
142
+ }
143
+
144
+ void weak_release() // nothrow
145
+ {
146
+ if( atomic_decrement( &weak_count_ ) == 1 )
147
+ {
148
+ destroy();
149
+ }
150
+ }
151
+
152
+ long use_count() const // nothrow
153
+ {
154
+ return const_cast< uint32_t const volatile & >( use_count_ );
155
+ }
156
+ };
157
+
158
+ } // namespace detail
159
+
160
+ } // namespace boost
161
+
162
+ #endif // #ifndef BOOST_SMART_PTR_DETAIL_SP_COUNTED_BASE_SNC_PS3_HPP_INCLUDED