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
@@ -108,3 +108,4 @@
108
108
  base->loadShellEnvvars :
109
109
  add->loadShellEnvvars;
110
110
 
111
+
@@ -78,4 +78,4 @@ end
78
78
  <% else
79
79
  raise "Unknown option type #{option[:type].inspect} for option #{option[:name]}"
80
80
  end %>
81
- <% end %>
81
+ <% end %>
@@ -0,0 +1,73 @@
1
+ /*
2
+ * Phusion Passenger - https://www.phusionpassenger.com/
3
+ * Copyright (c) 2010-2013 Phusion
4
+ *
5
+ * "Phusion Passenger" is a trademark of Hongli Lai & Ninh Bui.
6
+ *
7
+ * Permission is hereby granted, free of charge, to any person obtaining a copy
8
+ * of this software and associated documentation files (the "Software"), to deal
9
+ * in the Software without restriction, including without limitation the rights
10
+ * to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
11
+ * copies of the Software, and to permit persons to whom the Software is
12
+ * furnished to do so, subject to the following conditions:
13
+ *
14
+ * The above copyright notice and this permission notice shall be included in
15
+ * all copies or substantial portions of the Software.
16
+ *
17
+ * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
18
+ * IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
19
+ * FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
20
+ * AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
21
+ * LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
22
+ * OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN
23
+ * THE SOFTWARE.
24
+ */
25
+
26
+ /*
27
+ * SetHeaders.cpp is automatically generated from SetHeaders.cpp.erb,
28
+ * using definitions from lib/phusion_passenger/apache2/config_options.rb.
29
+ * Edits to SetHeaders.cpp will be lost.
30
+ *
31
+ * To update SetHeaders.cpp:
32
+ * rake apache2
33
+ *
34
+ * To force regeneration of SetHeaders.cpp:
35
+ * rm -f ext/apache2/SetHeaders.cpp
36
+ * rake ext/apache2/SetHeaders.cpp
37
+ */
38
+
39
+
40
+
41
+
42
+
43
+ addHeader(output, "PASSENGER_RUBY", config->ruby ? config->ruby : serverConfig.defaultRuby);
44
+
45
+
46
+
47
+ addHeader(r, output, "PASSENGER_MIN_INSTANCES", config->minInstances);
48
+
49
+
50
+
51
+ addHeader(output, "PASSENGER_USER", config->user);
52
+
53
+
54
+
55
+ addHeader(output, "PASSENGER_GROUP", config->group);
56
+
57
+
58
+
59
+ addHeader(r, output, "PASSENGER_MAX_REQUESTS", config->maxRequests);
60
+
61
+
62
+
63
+ addHeader(r, output, "PASSENGER_START_TIMEOUT", config->startTimeout);
64
+
65
+
66
+
67
+ addHeader(r, output, "PASSENGER_MAX_REQUEST_QUEUE_SIZE", config->maxRequestQueueSize);
68
+
69
+
70
+
71
+ addHeader(r, output, "PASSENGER_LOAD_SHELL_ENVVARS", config->loadShellEnvvars);
72
+
73
+
@@ -0,0 +1,88 @@
1
+ /*
2
+ * Phusion Passenger - https://www.phusionpassenger.com/
3
+ * Copyright (c) 2010-2013 Phusion
4
+ *
5
+ * "Phusion Passenger" is a trademark of Hongli Lai & Ninh Bui.
6
+ *
7
+ * Permission is hereby granted, free of charge, to any person obtaining a copy
8
+ * of this software and associated documentation files (the "Software"), to deal
9
+ * in the Software without restriction, including without limitation the rights
10
+ * to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
11
+ * copies of the Software, and to permit persons to whom the Software is
12
+ * furnished to do so, subject to the following conditions:
13
+ *
14
+ * The above copyright notice and this permission notice shall be included in
15
+ * all copies or substantial portions of the Software.
16
+ *
17
+ * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
18
+ * IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
19
+ * FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
20
+ * AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
21
+ * LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
22
+ * OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN
23
+ * THE SOFTWARE.
24
+ */
25
+
26
+ /*
27
+ * SetHeaders.cpp is automatically generated from SetHeaders.cpp.erb,
28
+ * using definitions from lib/phusion_passenger/apache2/config_options.rb.
29
+ * Edits to SetHeaders.cpp will be lost.
30
+ *
31
+ * To update SetHeaders.cpp:
32
+ * rake apache2
33
+ *
34
+ * To force regeneration of SetHeaders.cpp:
35
+ * rm -f ext/apache2/SetHeaders.cpp
36
+ * rake ext/apache2/SetHeaders.cpp
37
+ */
38
+
39
+ <%
40
+ require 'phusion_passenger/apache2/config_options'
41
+
42
+ def filter_eligible_options(options)
43
+ return options.reject do |option|
44
+ option[:alias_for] ||
45
+ option.fetch(:field, true).nil? ||
46
+ option[:field].to_s =~ /\./ ||
47
+ (option.has_key?(:header) && !option[:header])
48
+ end
49
+ end
50
+
51
+ def struct_field_for(option)
52
+ if option.has_key?(:field)
53
+ return option[:field]
54
+ else
55
+ result = option[:name].sub(/^Passenger/, '')
56
+ result[0] = result[0..0].downcase
57
+ return result
58
+ end
59
+ end
60
+
61
+ def header_name_for(option)
62
+ if option[:header]
63
+ return option[:header].inspect
64
+ else
65
+ result = option[:name].sub(/^Passenger/, '')
66
+ result.gsub!(/([A-Z])/, '_\1')
67
+ return "PASSENGER#{result.upcase}".inspect
68
+ end
69
+ end
70
+
71
+ def header_expression_for(option)
72
+ if option[:header_expression]
73
+ return option[:header_expression]
74
+ else
75
+ return "config->" + struct_field_for(option)
76
+ end
77
+ end
78
+ %>
79
+
80
+ <% for option in filter_eligible_options(APACHE2_DIRECTORY_CONFIGURATION_OPTIONS) %>
81
+ <% if option[:type] == :string %>
82
+ addHeader(output, <%= header_name_for(option) %>, <%= header_expression_for(option) %>);
83
+ <% elsif option[:type] == :integer || option[:type] == :flag %>
84
+ addHeader(r, output, <%= header_name_for(option) %>, <%= header_expression_for(option) %>);
85
+ <% else %>
86
+ <% raise "Unknown option type #{option[:type].inspect} for option #{option[:name]}" %>
87
+ <% end %>
88
+ <% end %>
@@ -56,7 +56,7 @@ namespace boost {
56
56
  // Copy the beginning of the sequence
57
57
  Output = std::copy( ::boost::begin(Input), ::boost::begin(M), Output );
58
58
  // Format find result
59
- // Copy formated result
59
+ // Copy formatted result
60
60
  Output = std::copy( ::boost::begin(M.format_result()), ::boost::end(M.format_result()), Output );
61
61
  // Copy the rest of the sequence
62
62
  Output = std::copy( M.end(), ::boost::end(Input), Output );
@@ -118,11 +118,11 @@ namespace boost {
118
118
 
119
119
  InputT Output;
120
120
  // Copy the beginning of the sequence
121
- insert( Output, ::boost::end(Output), ::boost::begin(Input), M.begin() );
122
- // Copy formated result
123
- insert( Output, ::boost::end(Output), M.format_result() );
121
+ boost::algorithm::detail::insert( Output, ::boost::end(Output), ::boost::begin(Input), M.begin() );
122
+ // Copy formatted result
123
+ boost::algorithm::detail::insert( Output, ::boost::end(Output), M.format_result() );
124
124
  // Copy the rest of the sequence
125
- insert( Output, ::boost::end(Output), M.end(), ::boost::end(Input) );
125
+ boost::algorithm::detail::insert( Output, ::boost::end(Output), M.end(), ::boost::end(Input) );
126
126
 
127
127
  return Output;
128
128
  }
@@ -58,7 +58,7 @@ namespace boost {
58
58
  {
59
59
  // Copy the beginning of the sequence
60
60
  Output = std::copy( LastMatch, M.begin(), Output );
61
- // Copy formated result
61
+ // Copy formatted result
62
62
  Output = std::copy( ::boost::begin(M.format_result()), ::boost::end(M.format_result()), Output );
63
63
 
64
64
  // Proceed to the next match
@@ -134,9 +134,9 @@ namespace boost {
134
134
  while( M )
135
135
  {
136
136
  // Copy the beginning of the sequence
137
- insert( Output, ::boost::end(Output), LastMatch, M.begin() );
138
- // Copy formated result
139
- insert( Output, ::boost::end(Output), M.format_result() );
137
+ boost::algorithm::detail::insert( Output, ::boost::end(Output), LastMatch, M.begin() );
138
+ // Copy formatted result
139
+ boost::algorithm::detail::insert( Output, ::boost::end(Output), M.format_result() );
140
140
 
141
141
  // Proceed to the next match
142
142
  LastMatch=M.end();
@@ -218,7 +218,7 @@ namespace boost {
218
218
  // Adjust search iterator
219
219
  SearchIt=M.end();
220
220
 
221
- // Copy formated replace to the storage
221
+ // Copy formatted replace to the storage
222
222
  ::boost::algorithm::detail::copy_to_storage( Storage, M.format_result() );
223
223
 
224
224
  // Find range for a next match
@@ -92,7 +92,7 @@ namespace boost {
92
92
 
93
93
  // find last functor -----------------------------------------------//
94
94
 
95
- // find the last match a subseqeunce in the sequence ( functor )
95
+ // find the last match a subsequence in the sequence ( functor )
96
96
  /*
97
97
  Returns a pair <begin,end> marking the subsequence in the sequence.
98
98
  If the find fails, returns <End,End>
@@ -39,7 +39,7 @@ namespace boost {
39
39
  Constructs a \c const_formatter. Const formatter always returns
40
40
  the same value, regardless of the parameter.
41
41
 
42
- \param Format A predefined value used as a result for formating
42
+ \param Format A predefined value used as a result for formatting
43
43
  \return An instance of the \c const_formatter object.
44
44
  */
45
45
  template<typename RangeT>
@@ -95,7 +95,7 @@ namespace boost {
95
95
  to extract a portion of the formatted sequence. The first finder's match is returned
96
96
  as a result
97
97
 
98
- \param Finder a finder used to select a portion of the formated sequence
98
+ \param Finder a finder used to select a portion of the formatted sequence
99
99
  \return An instance of the \c dissect_formatter object.
100
100
  */
101
101
  template<typename FinderT>
@@ -101,7 +101,12 @@ namespace boost
101
101
  << "***** Internal Program Error - assertion (" << expr << ") failed in "
102
102
  << function << ":\n"
103
103
  << file << '(' << line << "): " << msg << std::endl;
104
- std::abort();
104
+ #ifdef UNDER_CE
105
+ // The Windows CE CRT library does not have abort() so use exit(-1) instead.
106
+ std::exit(-1);
107
+ #else
108
+ std::abort();
109
+ #endif
105
110
  }
106
111
  } // detail
107
112
  } // assertion
@@ -0,0 +1,18 @@
1
+ #ifndef BOOST_ATOMIC_HPP
2
+ #define BOOST_ATOMIC_HPP
3
+
4
+ // Copyright (c) 2011 Helge Bahmann
5
+ //
6
+ // Distributed under the Boost Software License, Version 1.0.
7
+ // See accompanying file LICENSE_1_0.txt or copy at
8
+ // http://www.boost.org/LICENSE_1_0.txt)
9
+
10
+ // This header includes all Boost.Atomic public headers
11
+
12
+ #include <boost/atomic/atomic.hpp>
13
+
14
+ #ifdef BOOST_ATOMIC_HAS_PRAGMA_ONCE
15
+ #pragma once
16
+ #endif
17
+
18
+ #endif
@@ -0,0 +1,241 @@
1
+ #ifndef BOOST_ATOMIC_ATOMIC_HPP
2
+ #define BOOST_ATOMIC_ATOMIC_HPP
3
+
4
+ // Copyright (c) 2011 Helge Bahmann
5
+ // Copyright (c) 2013 Tim Blechmann
6
+ //
7
+ // Distributed under the Boost Software License, Version 1.0.
8
+ // See accompanying file LICENSE_1_0.txt or copy at
9
+ // http://www.boost.org/LICENSE_1_0.txt)
10
+
11
+ #include <cstddef>
12
+ #include <boost/cstdint.hpp>
13
+
14
+ #include <boost/memory_order.hpp>
15
+
16
+ #include <boost/atomic/detail/config.hpp>
17
+ #include <boost/atomic/detail/platform.hpp>
18
+ #include <boost/atomic/detail/type-classification.hpp>
19
+ #include <boost/type_traits/is_signed.hpp>
20
+ #if defined(BOOST_MSVC) && BOOST_MSVC < 1400
21
+ #include <boost/type_traits/is_integral.hpp>
22
+ #include <boost/mpl/and.hpp>
23
+ #endif
24
+
25
+ #ifdef BOOST_ATOMIC_HAS_PRAGMA_ONCE
26
+ #pragma once
27
+ #endif
28
+
29
+ namespace boost {
30
+
31
+ #ifndef BOOST_ATOMIC_CHAR_LOCK_FREE
32
+ #define BOOST_ATOMIC_CHAR_LOCK_FREE 0
33
+ #endif
34
+
35
+ #ifndef BOOST_ATOMIC_CHAR16_T_LOCK_FREE
36
+ #define BOOST_ATOMIC_CHAR16_T_LOCK_FREE 0
37
+ #endif
38
+
39
+ #ifndef BOOST_ATOMIC_CHAR32_T_LOCK_FREE
40
+ #define BOOST_ATOMIC_CHAR32_T_LOCK_FREE 0
41
+ #endif
42
+
43
+ #ifndef BOOST_ATOMIC_WCHAR_T_LOCK_FREE
44
+ #define BOOST_ATOMIC_WCHAR_T_LOCK_FREE 0
45
+ #endif
46
+
47
+ #ifndef BOOST_ATOMIC_SHORT_LOCK_FREE
48
+ #define BOOST_ATOMIC_SHORT_LOCK_FREE 0
49
+ #endif
50
+
51
+ #ifndef BOOST_ATOMIC_INT_LOCK_FREE
52
+ #define BOOST_ATOMIC_INT_LOCK_FREE 0
53
+ #endif
54
+
55
+ #ifndef BOOST_ATOMIC_LONG_LOCK_FREE
56
+ #define BOOST_ATOMIC_LONG_LOCK_FREE 0
57
+ #endif
58
+
59
+ #ifndef BOOST_ATOMIC_LLONG_LOCK_FREE
60
+ #define BOOST_ATOMIC_LLONG_LOCK_FREE 0
61
+ #endif
62
+
63
+ #ifndef BOOST_ATOMIC_POINTER_LOCK_FREE
64
+ #define BOOST_ATOMIC_POINTER_LOCK_FREE 0
65
+ #endif
66
+
67
+ #define BOOST_ATOMIC_ADDRESS_LOCK_FREE BOOST_ATOMIC_POINTER_LOCK_FREE
68
+
69
+ #ifndef BOOST_ATOMIC_BOOL_LOCK_FREE
70
+ #define BOOST_ATOMIC_BOOL_LOCK_FREE 0
71
+ #endif
72
+
73
+ #ifndef BOOST_ATOMIC_THREAD_FENCE
74
+ #define BOOST_ATOMIC_THREAD_FENCE 0
75
+ inline void atomic_thread_fence(memory_order)
76
+ {
77
+ }
78
+ #endif
79
+
80
+ #ifndef BOOST_ATOMIC_SIGNAL_FENCE
81
+ #define BOOST_ATOMIC_SIGNAL_FENCE 0
82
+ inline void atomic_signal_fence(memory_order order)
83
+ {
84
+ atomic_thread_fence(order);
85
+ }
86
+ #endif
87
+
88
+ template<typename T>
89
+ class atomic :
90
+ public atomics::detail::base_atomic<
91
+ T,
92
+ typename atomics::detail::classify<T>::type,
93
+ atomics::detail::storage_size_of<T>::value,
94
+ #if !defined(BOOST_MSVC) || BOOST_MSVC >= 1400
95
+ boost::is_signed<T>::value
96
+ #else
97
+ // MSVC 2003 has problems instantiating is_signed on non-integral types
98
+ mpl::and_< boost::is_integral<T>, boost::is_signed<T> >::value
99
+ #endif
100
+ >
101
+ {
102
+ private:
103
+ typedef T value_type;
104
+ typedef atomics::detail::base_atomic<
105
+ T,
106
+ typename atomics::detail::classify<T>::type,
107
+ atomics::detail::storage_size_of<T>::value,
108
+ #if !defined(BOOST_MSVC) || BOOST_MSVC >= 1400
109
+ boost::is_signed<T>::value
110
+ #else
111
+ // MSVC 2003 has problems instantiating is_signed on non-itegral types
112
+ mpl::and_< boost::is_integral<T>, boost::is_signed<T> >::value
113
+ #endif
114
+ > super;
115
+ public:
116
+ atomic(void) BOOST_NOEXCEPT : super() {}
117
+ BOOST_CONSTEXPR atomic(value_type v) BOOST_NOEXCEPT : super(v) {}
118
+
119
+ value_type operator=(value_type v) volatile BOOST_NOEXCEPT
120
+ {
121
+ this->store(v);
122
+ return v;
123
+ }
124
+
125
+ operator value_type(void) volatile const BOOST_NOEXCEPT
126
+ {
127
+ return this->load();
128
+ }
129
+
130
+ #ifdef BOOST_NO_CXX11_DELETED_FUNCTIONS
131
+ private:
132
+ atomic(const atomic &) /* =delete */ ;
133
+ atomic & operator=(const atomic &) volatile /* =delete */ ;
134
+ #else
135
+ atomic(const atomic &) = delete;
136
+ atomic & operator=(const atomic &) volatile = delete;
137
+ #endif
138
+ };
139
+
140
+ typedef atomic<char> atomic_char;
141
+ typedef atomic<unsigned char> atomic_uchar;
142
+ typedef atomic<signed char> atomic_schar;
143
+ typedef atomic<uint8_t> atomic_uint8_t;
144
+ typedef atomic<int8_t> atomic_int8_t;
145
+ typedef atomic<unsigned short> atomic_ushort;
146
+ typedef atomic<short> atomic_short;
147
+ typedef atomic<uint16_t> atomic_uint16_t;
148
+ typedef atomic<int16_t> atomic_int16_t;
149
+ typedef atomic<unsigned int> atomic_uint;
150
+ typedef atomic<int> atomic_int;
151
+ typedef atomic<uint32_t> atomic_uint32_t;
152
+ typedef atomic<int32_t> atomic_int32_t;
153
+ typedef atomic<unsigned long> atomic_ulong;
154
+ typedef atomic<long> atomic_long;
155
+ typedef atomic<uint64_t> atomic_uint64_t;
156
+ typedef atomic<int64_t> atomic_int64_t;
157
+ #ifdef BOOST_HAS_LONG_LONG
158
+ typedef atomic<boost::ulong_long_type> atomic_ullong;
159
+ typedef atomic<boost::long_long_type> atomic_llong;
160
+ #endif
161
+ typedef atomic<void*> atomic_address;
162
+ typedef atomic<bool> atomic_bool;
163
+ typedef atomic<wchar_t> atomic_wchar_t;
164
+ #if !defined(BOOST_NO_CXX11_CHAR16_T)
165
+ typedef atomic<char16_t> atomic_char16_t;
166
+ #endif
167
+ #if !defined(BOOST_NO_CXX11_CHAR32_T)
168
+ typedef atomic<char32_t> atomic_char32_t;
169
+ #endif
170
+
171
+ typedef atomic<int_least8_t> atomic_int_least8_t;
172
+ typedef atomic<uint_least8_t> atomic_uint_least8_t;
173
+ typedef atomic<int_least16_t> atomic_int_least16_t;
174
+ typedef atomic<uint_least16_t> atomic_uint_least16_t;
175
+ typedef atomic<int_least32_t> atomic_int_least32_t;
176
+ typedef atomic<uint_least32_t> atomic_uint_least32_t;
177
+ typedef atomic<int_least64_t> atomic_int_least64_t;
178
+ typedef atomic<uint_least64_t> atomic_uint_least64_t;
179
+ typedef atomic<int_fast8_t> atomic_int_fast8_t;
180
+ typedef atomic<uint_fast8_t> atomic_uint_fast8_t;
181
+ typedef atomic<int_fast16_t> atomic_int_fast16_t;
182
+ typedef atomic<uint_fast16_t> atomic_uint_fast16_t;
183
+ typedef atomic<int_fast32_t> atomic_int_fast32_t;
184
+ typedef atomic<uint_fast32_t> atomic_uint_fast32_t;
185
+ typedef atomic<int_fast64_t> atomic_int_fast64_t;
186
+ typedef atomic<uint_fast64_t> atomic_uint_fast64_t;
187
+ typedef atomic<intmax_t> atomic_intmax_t;
188
+ typedef atomic<uintmax_t> atomic_uintmax_t;
189
+
190
+ typedef atomic<std::size_t> atomic_size_t;
191
+ typedef atomic<std::ptrdiff_t> atomic_ptrdiff_t;
192
+
193
+ // PGI seems to not support intptr_t/uintptr_t properly. BOOST_HAS_STDINT_H is not defined for this compiler by Boost.Config.
194
+ #if !defined(__PGIC__)
195
+
196
+ #if (defined(BOOST_WINDOWS) && !defined(_WIN32_WCE)) \
197
+ || (defined(_XOPEN_UNIX) && (_XOPEN_UNIX+0 > 0) && !defined(__UCLIBC__)) \
198
+ || defined(__CYGWIN__) \
199
+ || defined(macintosh) || defined(__APPLE__) || defined(__APPLE_CC__) \
200
+ || defined(__FreeBSD__) || defined(__NetBSD__) || defined(__OpenBSD__) || defined(__DragonFly__)
201
+ typedef atomic<intptr_t> atomic_intptr_t;
202
+ typedef atomic<uintptr_t> atomic_uintptr_t;
203
+ #elif defined(__GNUC__) || defined(__clang__)
204
+ #if defined(__INTPTR_TYPE__)
205
+ typedef atomic< __INTPTR_TYPE__ > atomic_intptr_t;
206
+ #endif
207
+ #if defined(__UINTPTR_TYPE__)
208
+ typedef atomic< __UINTPTR_TYPE__ > atomic_uintptr_t;
209
+ #endif
210
+ #endif
211
+
212
+ #endif
213
+
214
+ #ifndef BOOST_ATOMIC_FLAG_LOCK_FREE
215
+ #define BOOST_ATOMIC_FLAG_LOCK_FREE 0
216
+ class atomic_flag
217
+ {
218
+ public:
219
+ BOOST_CONSTEXPR atomic_flag(void) BOOST_NOEXCEPT : v_(false) {}
220
+
221
+ bool
222
+ test_and_set(memory_order order = memory_order_seq_cst) BOOST_NOEXCEPT
223
+ {
224
+ return v_.exchange(true, order);
225
+ }
226
+
227
+ void
228
+ clear(memory_order order = memory_order_seq_cst) volatile BOOST_NOEXCEPT
229
+ {
230
+ v_.store(false, order);
231
+ }
232
+ private:
233
+ atomic_flag(const atomic_flag &) /* = delete */ ;
234
+ atomic_flag & operator=(const atomic_flag &) /* = delete */ ;
235
+ atomic<bool> v_;
236
+ };
237
+ #endif
238
+
239
+ }
240
+
241
+ #endif