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
@@ -29,23 +29,23 @@ private:
29
29
 
30
30
  public:
31
31
 
32
- typedef T element_type;
32
+ typedef typename boost::detail::sp_element< T >::type element_type;
33
33
 
34
- weak_ptr(): px(0), pn() // never throws in 1.30+
34
+ weak_ptr() BOOST_NOEXCEPT : px(0), pn() // never throws in 1.30+
35
35
  {
36
36
  }
37
37
 
38
38
  // generated copy constructor, assignment, destructor are fine...
39
39
 
40
- #if defined( BOOST_HAS_RVALUE_REFS )
40
+ #if !defined( BOOST_NO_CXX11_RVALUE_REFERENCES )
41
41
 
42
42
  // ... except in C++0x, move disables the implicit copy
43
43
 
44
- weak_ptr( weak_ptr const & r ): px( r.px ), pn( r.pn ) // never throws
44
+ weak_ptr( weak_ptr const & r ) BOOST_NOEXCEPT : px( r.px ), pn( r.pn )
45
45
  {
46
46
  }
47
47
 
48
- weak_ptr & operator=( weak_ptr const & r ) // never throws
48
+ weak_ptr & operator=( weak_ptr const & r ) BOOST_NOEXCEPT
49
49
  {
50
50
  px = r.px;
51
51
  pn = r.pn;
@@ -81,11 +81,12 @@ public:
81
81
  weak_ptr( weak_ptr<Y> const & r )
82
82
 
83
83
  #endif
84
- : px(r.lock().get()), pn(r.pn) // never throws
84
+ BOOST_NOEXCEPT : px(r.lock().get()), pn(r.pn)
85
85
  {
86
+ boost::detail::sp_assert_convertible< Y, T >();
86
87
  }
87
88
 
88
- #if defined( BOOST_HAS_RVALUE_REFS )
89
+ #if !defined( BOOST_NO_CXX11_RVALUE_REFERENCES )
89
90
 
90
91
  template<class Y>
91
92
  #if !defined( BOOST_SP_NO_SP_CONVERTIBLE )
@@ -97,19 +98,21 @@ public:
97
98
  weak_ptr( weak_ptr<Y> && r )
98
99
 
99
100
  #endif
100
- : px( r.lock().get() ), pn( static_cast< boost::detail::weak_count && >( r.pn ) ) // never throws
101
+ BOOST_NOEXCEPT : px( r.lock().get() ), pn( static_cast< boost::detail::weak_count && >( r.pn ) )
101
102
  {
103
+ boost::detail::sp_assert_convertible< Y, T >();
102
104
  r.px = 0;
103
105
  }
104
106
 
105
107
  // for better efficiency in the T == Y case
106
- weak_ptr( weak_ptr && r ): px( r.px ), pn( static_cast< boost::detail::weak_count && >( r.pn ) ) // never throws
108
+ weak_ptr( weak_ptr && r )
109
+ BOOST_NOEXCEPT : px( r.px ), pn( static_cast< boost::detail::weak_count && >( r.pn ) )
107
110
  {
108
111
  r.px = 0;
109
112
  }
110
113
 
111
114
  // for better efficiency in the T == Y case
112
- weak_ptr & operator=( weak_ptr && r ) // never throws
115
+ weak_ptr & operator=( weak_ptr && r ) BOOST_NOEXCEPT
113
116
  {
114
117
  this_type( static_cast< weak_ptr && >( r ) ).swap( *this );
115
118
  return *this;
@@ -128,24 +131,28 @@ public:
128
131
  weak_ptr( shared_ptr<Y> const & r )
129
132
 
130
133
  #endif
131
- : px( r.px ), pn( r.pn ) // never throws
134
+ BOOST_NOEXCEPT : px( r.px ), pn( r.pn )
132
135
  {
136
+ boost::detail::sp_assert_convertible< Y, T >();
133
137
  }
134
138
 
135
139
  #if !defined(BOOST_MSVC) || (BOOST_MSVC >= 1300)
136
140
 
137
141
  template<class Y>
138
- weak_ptr & operator=(weak_ptr<Y> const & r) // never throws
142
+ weak_ptr & operator=( weak_ptr<Y> const & r ) BOOST_NOEXCEPT
139
143
  {
144
+ boost::detail::sp_assert_convertible< Y, T >();
145
+
140
146
  px = r.lock().get();
141
147
  pn = r.pn;
148
+
142
149
  return *this;
143
150
  }
144
151
 
145
- #if defined( BOOST_HAS_RVALUE_REFS )
152
+ #if !defined( BOOST_NO_CXX11_RVALUE_REFERENCES )
146
153
 
147
154
  template<class Y>
148
- weak_ptr & operator=( weak_ptr<Y> && r )
155
+ weak_ptr & operator=( weak_ptr<Y> && r ) BOOST_NOEXCEPT
149
156
  {
150
157
  this_type( static_cast< weak_ptr<Y> && >( r ) ).swap( *this );
151
158
  return *this;
@@ -154,26 +161,29 @@ public:
154
161
  #endif
155
162
 
156
163
  template<class Y>
157
- weak_ptr & operator=(shared_ptr<Y> const & r) // never throws
164
+ weak_ptr & operator=( shared_ptr<Y> const & r ) BOOST_NOEXCEPT
158
165
  {
166
+ boost::detail::sp_assert_convertible< Y, T >();
167
+
159
168
  px = r.px;
160
169
  pn = r.pn;
170
+
161
171
  return *this;
162
172
  }
163
173
 
164
174
  #endif
165
175
 
166
- shared_ptr<T> lock() const // never throws
176
+ shared_ptr<T> lock() const BOOST_NOEXCEPT
167
177
  {
168
- return shared_ptr<element_type>( *this, boost::detail::sp_nothrow_tag() );
178
+ return shared_ptr<T>( *this, boost::detail::sp_nothrow_tag() );
169
179
  }
170
180
 
171
- long use_count() const // never throws
181
+ long use_count() const BOOST_NOEXCEPT
172
182
  {
173
183
  return pn.use_count();
174
184
  }
175
185
 
176
- bool expired() const // never throws
186
+ bool expired() const BOOST_NOEXCEPT
177
187
  {
178
188
  return pn.use_count() == 0;
179
189
  }
@@ -183,29 +193,30 @@ public:
183
193
  return pn.empty();
184
194
  }
185
195
 
186
- void reset() // never throws in 1.30+
196
+ void reset() BOOST_NOEXCEPT // never throws in 1.30+
187
197
  {
188
198
  this_type().swap(*this);
189
199
  }
190
200
 
191
- void swap(this_type & other) // never throws
201
+ void swap(this_type & other) BOOST_NOEXCEPT
192
202
  {
193
203
  std::swap(px, other.px);
194
204
  pn.swap(other.pn);
195
205
  }
196
206
 
197
- void _internal_assign(T * px2, boost::detail::shared_count const & pn2)
207
+ template<typename Y>
208
+ void _internal_aliasing_assign(weak_ptr<Y> const & r, element_type * px2)
198
209
  {
199
210
  px = px2;
200
- pn = pn2;
211
+ pn = r.pn;
201
212
  }
202
213
 
203
- template<class Y> bool owner_before( weak_ptr<Y> const & rhs ) const
214
+ template<class Y> bool owner_before( weak_ptr<Y> const & rhs ) const BOOST_NOEXCEPT
204
215
  {
205
216
  return pn < rhs.pn;
206
217
  }
207
218
 
208
- template<class Y> bool owner_before( shared_ptr<Y> const & rhs ) const
219
+ template<class Y> bool owner_before( shared_ptr<Y> const & rhs ) const BOOST_NOEXCEPT
209
220
  {
210
221
  return pn < rhs.pn;
211
222
  }
@@ -222,17 +233,17 @@ private:
222
233
 
223
234
  #endif
224
235
 
225
- T * px; // contained pointer
236
+ element_type * px; // contained pointer
226
237
  boost::detail::weak_count pn; // reference counter
227
238
 
228
239
  }; // weak_ptr
229
240
 
230
- template<class T, class U> inline bool operator<(weak_ptr<T> const & a, weak_ptr<U> const & b)
241
+ template<class T, class U> inline bool operator<(weak_ptr<T> const & a, weak_ptr<U> const & b) BOOST_NOEXCEPT
231
242
  {
232
243
  return a.owner_before( b );
233
244
  }
234
245
 
235
- template<class T> void swap(weak_ptr<T> & a, weak_ptr<T> & b)
246
+ template<class T> void swap(weak_ptr<T> & a, weak_ptr<T> & b) BOOST_NOEXCEPT
236
247
  {
237
248
  a.swap(b);
238
249
  }
@@ -17,10 +17,23 @@
17
17
  #include <boost/config.hpp>
18
18
  #include <boost/detail/workaround.hpp>
19
19
 
20
- #ifndef BOOST_NO_STATIC_ASSERT
21
- # define BOOST_STATIC_ASSERT_MSG( B, Msg ) static_assert(B, Msg)
20
+ #if defined(__GNUC__) && !defined(__GXX_EXPERIMENTAL_CXX0X__)
21
+ //
22
+ // This is horrible, but it seems to be the only we can shut up the
23
+ // "anonymous variadic macros were introduced in C99 [-Wvariadic-macros]"
24
+ // warning that get spewed out otherwise in non-C++11 mode.
25
+ //
26
+ #pragma GCC system_header
27
+ #endif
28
+
29
+ #ifndef BOOST_NO_CXX11_STATIC_ASSERT
30
+ # ifndef BOOST_NO_CXX11_VARIADIC_MACROS
31
+ # define BOOST_STATIC_ASSERT_MSG( ... ) static_assert(__VA_ARGS__)
32
+ # else
33
+ # define BOOST_STATIC_ASSERT_MSG( B, Msg ) BOOST_STATIC_ASSERT( B )
34
+ # endif
22
35
  #else
23
- # define BOOST_STATIC_ASSERT_MSG( B, Msg ) BOOST_STATIC_ASSERT( B )
36
+ # define BOOST_STATIC_ASSERT_MSG( B, Msg ) BOOST_STATIC_ASSERT( B )
24
37
  #endif
25
38
 
26
39
  #ifdef __BORLANDC__
@@ -39,13 +52,33 @@
39
52
  // then enable this:
40
53
  //
41
54
  #if defined(__GNUC__) && ((__GNUC__ > 3) || ((__GNUC__ == 3) && (__GNUC_MINOR__ >= 4)))
42
- # define BOOST_STATIC_ASSERT_BOOL_CAST( x ) ((x) == 0 ? false : true)
55
+ # ifndef BOOST_NO_CXX11_VARIADIC_MACROS
56
+ # define BOOST_STATIC_ASSERT_BOOL_CAST( ... ) ((__VA_ARGS__) == 0 ? false : true)
57
+ # else
58
+ # define BOOST_STATIC_ASSERT_BOOL_CAST( x ) ((x) == 0 ? false : true)
59
+ # endif
60
+ #else
61
+ # ifndef BOOST_NO_CXX11_VARIADIC_MACROS
62
+ # define BOOST_STATIC_ASSERT_BOOL_CAST( ... ) (bool)(__VA_ARGS__)
63
+ # else
64
+ # define BOOST_STATIC_ASSERT_BOOL_CAST(x) (bool)(x)
65
+ # endif
66
+ #endif
67
+ //
68
+ // If the compiler warns about unused typedefs then enable this:
69
+ //
70
+ #if defined(__GNUC__) && ((__GNUC__ > 4) || ((__GNUC__ == 4) && (__GNUC_MINOR__ >= 7)))
71
+ # define BOOST_STATIC_ASSERT_UNUSED_ATTRIBUTE __attribute__((unused))
43
72
  #else
44
- # define BOOST_STATIC_ASSERT_BOOL_CAST(x) (bool)(x)
73
+ # define BOOST_STATIC_ASSERT_UNUSED_ATTRIBUTE
45
74
  #endif
46
75
 
47
- #ifndef BOOST_NO_STATIC_ASSERT
48
- # define BOOST_STATIC_ASSERT( B ) static_assert(B, #B)
76
+ #ifndef BOOST_NO_CXX11_STATIC_ASSERT
77
+ # ifndef BOOST_NO_CXX11_VARIADIC_MACROS
78
+ # define BOOST_STATIC_ASSERT( ... ) static_assert(__VA_ARGS__, #__VA_ARGS__)
79
+ # else
80
+ # define BOOST_STATIC_ASSERT( B ) static_assert(B, #B)
81
+ # endif
49
82
  #else
50
83
 
51
84
  namespace boost{
@@ -91,17 +124,28 @@ template<int x> struct static_assert_test{};
91
124
  typedef ::boost::static_assert_test<\
92
125
  sizeof(::boost::STATIC_ASSERTION_FAILURE< (bool)( B ) >)\
93
126
  > boost_static_assert_typedef_
94
- #elif defined(BOOST_MSVC)
127
+ #elif defined(BOOST_MSVC) && defined(BOOST_NO_CXX11_VARIADIC_MACROS)
95
128
  #define BOOST_STATIC_ASSERT( B ) \
96
129
  typedef ::boost::static_assert_test<\
97
130
  sizeof(::boost::STATIC_ASSERTION_FAILURE< BOOST_STATIC_ASSERT_BOOL_CAST ( B ) >)>\
98
131
  BOOST_JOIN(boost_static_assert_typedef_, __COUNTER__)
99
- #elif defined(BOOST_INTEL_CXX_VERSION) || defined(BOOST_SA_GCC_WORKAROUND)
132
+ #elif defined(BOOST_MSVC)
133
+ #define BOOST_STATIC_ASSERT(...) \
134
+ typedef ::boost::static_assert_test<\
135
+ sizeof(::boost::STATIC_ASSERTION_FAILURE< BOOST_STATIC_ASSERT_BOOL_CAST (__VA_ARGS__) >)>\
136
+ BOOST_JOIN(boost_static_assert_typedef_, __COUNTER__)
137
+ #elif (defined(BOOST_INTEL_CXX_VERSION) || defined(BOOST_SA_GCC_WORKAROUND)) && defined(BOOST_NO_CXX11_VARIADIC_MACROS)
100
138
  // agurt 15/sep/02: a special care is needed to force Intel C++ issue an error
101
139
  // instead of warning in case of failure
102
140
  # define BOOST_STATIC_ASSERT( B ) \
103
141
  typedef char BOOST_JOIN(boost_static_assert_typedef_, __LINE__) \
104
142
  [ ::boost::STATIC_ASSERTION_FAILURE< BOOST_STATIC_ASSERT_BOOL_CAST( B ) >::value ]
143
+ #elif (defined(BOOST_INTEL_CXX_VERSION) || defined(BOOST_SA_GCC_WORKAROUND)) && !defined(BOOST_NO_CXX11_VARIADIC_MACROS)
144
+ // agurt 15/sep/02: a special care is needed to force Intel C++ issue an error
145
+ // instead of warning in case of failure
146
+ # define BOOST_STATIC_ASSERT(...) \
147
+ typedef char BOOST_JOIN(boost_static_assert_typedef_, __LINE__) \
148
+ [ ::boost::STATIC_ASSERTION_FAILURE< BOOST_STATIC_ASSERT_BOOL_CAST( __VA_ARGS__ ) >::value ]
105
149
  #elif defined(__sgi)
106
150
  // special version for SGI MIPSpro compiler
107
151
  #define BOOST_STATIC_ASSERT( B ) \
@@ -119,19 +163,32 @@ template<int x> struct static_assert_test{};
119
163
  sizeof(::boost::STATIC_ASSERTION_FAILURE< BOOST_STATIC_ASSERT_BOOL_CAST( B ) >) )
120
164
  #else
121
165
  // generic version
122
- #define BOOST_STATIC_ASSERT( B ) \
123
- typedef ::boost::static_assert_test<\
124
- sizeof(::boost::STATIC_ASSERTION_FAILURE< BOOST_STATIC_ASSERT_BOOL_CAST( B ) >)>\
125
- BOOST_JOIN(boost_static_assert_typedef_, __LINE__)
166
+ # ifndef BOOST_NO_CXX11_VARIADIC_MACROS
167
+ # define BOOST_STATIC_ASSERT( ... ) \
168
+ typedef ::boost::static_assert_test<\
169
+ sizeof(::boost::STATIC_ASSERTION_FAILURE< BOOST_STATIC_ASSERT_BOOL_CAST( __VA_ARGS__ ) >)>\
170
+ BOOST_JOIN(boost_static_assert_typedef_, __LINE__) BOOST_STATIC_ASSERT_UNUSED_ATTRIBUTE
171
+ # else
172
+ # define BOOST_STATIC_ASSERT( B ) \
173
+ typedef ::boost::static_assert_test<\
174
+ sizeof(::boost::STATIC_ASSERTION_FAILURE< BOOST_STATIC_ASSERT_BOOL_CAST( B ) >)>\
175
+ BOOST_JOIN(boost_static_assert_typedef_, __LINE__) BOOST_STATIC_ASSERT_UNUSED_ATTRIBUTE
176
+ # endif
126
177
  #endif
127
178
 
128
179
  #else
129
180
  // alternative enum based implementation:
130
- #define BOOST_STATIC_ASSERT( B ) \
131
- enum { BOOST_JOIN(boost_static_assert_enum_, __LINE__) \
132
- = sizeof(::boost::STATIC_ASSERTION_FAILURE< (bool)( B ) >) }
181
+ # ifndef BOOST_NO_CXX11_VARIADIC_MACROS
182
+ # define BOOST_STATIC_ASSERT( ... ) \
183
+ enum { BOOST_JOIN(boost_static_assert_enum_, __LINE__) \
184
+ = sizeof(::boost::STATIC_ASSERTION_FAILURE< (bool)( __VA_ARGS__ ) >) }
185
+ # else
186
+ # define BOOST_STATIC_ASSERT(B) \
187
+ enum { BOOST_JOIN(boost_static_assert_enum_, __LINE__) \
188
+ = sizeof(::boost::STATIC_ASSERTION_FAILURE< (bool)( B ) >) }
189
+ # endif
133
190
  #endif
134
- #endif // defined(BOOST_NO_STATIC_ASSERT)
191
+ #endif // defined(BOOST_NO_CXX11_STATIC_ASSERT)
135
192
 
136
193
  #endif // BOOST_STATIC_ASSERT_HPP
137
194
 
@@ -23,7 +23,7 @@
23
23
  #include <functional>
24
24
 
25
25
  // TODO: undef these macros if not already defined
26
- #include <boost/cerrno.hpp>
26
+ #include <boost/cerrno.hpp>
27
27
 
28
28
  #if !defined(BOOST_POSIX_API) && !defined(BOOST_WINDOWS_API)
29
29
  # error BOOST_POSIX_API or BOOST_WINDOWS_API must be defined
@@ -31,6 +31,10 @@
31
31
 
32
32
  #include <boost/config/abi_prefix.hpp> // must be the last #include
33
33
 
34
+ #ifndef BOOST_SYSTEM_NOEXCEPT
35
+ #define BOOST_SYSTEM_NOEXCEPT BOOST_NOEXCEPT
36
+ #endif
37
+
34
38
  namespace boost
35
39
  {
36
40
  namespace system
@@ -184,17 +188,17 @@ namespace boost
184
188
  public:
185
189
  virtual ~error_category(){}
186
190
 
187
- virtual const char * name() const = 0;
191
+ virtual const char * name() const BOOST_SYSTEM_NOEXCEPT = 0;
188
192
  virtual std::string message( int ev ) const = 0;
189
- virtual error_condition default_error_condition( int ev ) const;
190
- virtual bool equivalent( int code,
191
- const error_condition & condition ) const;
192
- virtual bool equivalent( const error_code & code,
193
- int condition ) const;
194
-
195
- bool operator==(const error_category & rhs) const { return this == &rhs; }
196
- bool operator!=(const error_category & rhs) const { return this != &rhs; }
197
- bool operator<( const error_category & rhs ) const
193
+ inline virtual error_condition default_error_condition( int ev ) const BOOST_SYSTEM_NOEXCEPT;
194
+ inline virtual bool equivalent( int code,
195
+ const error_condition & condition ) const BOOST_SYSTEM_NOEXCEPT;
196
+ inline virtual bool equivalent( const error_code & code,
197
+ int condition ) const BOOST_SYSTEM_NOEXCEPT;
198
+
199
+ bool operator==(const error_category & rhs) const BOOST_SYSTEM_NOEXCEPT { return this == &rhs; }
200
+ bool operator!=(const error_category & rhs) const BOOST_SYSTEM_NOEXCEPT { return this != &rhs; }
201
+ bool operator<( const error_category & rhs ) const BOOST_SYSTEM_NOEXCEPT
198
202
  {
199
203
  return std::less<const error_category*>()( this, &rhs );
200
204
  }
@@ -202,9 +206,13 @@ namespace boost
202
206
 
203
207
  // predefined error categories -----------------------------------------//
204
208
 
205
- BOOST_SYSTEM_DECL const error_category & system_category();
206
- BOOST_SYSTEM_DECL const error_category & generic_category();
207
-
209
+ # ifdef BOOST_ERROR_CODE_HEADER_ONLY
210
+ inline const error_category & system_category() BOOST_SYSTEM_NOEXCEPT;
211
+ inline const error_category & generic_category() BOOST_SYSTEM_NOEXCEPT;
212
+ #else
213
+ BOOST_SYSTEM_DECL const error_category & system_category() BOOST_SYSTEM_NOEXCEPT;
214
+ BOOST_SYSTEM_DECL const error_category & generic_category() BOOST_SYSTEM_NOEXCEPT;
215
+ #endif
208
216
  // deprecated synonyms --------------------------------------------------//
209
217
 
210
218
  # ifndef BOOST_SYSTEM_NO_DEPRECATED
@@ -225,52 +233,52 @@ namespace boost
225
233
  public:
226
234
 
227
235
  // constructors:
228
- error_condition() : m_val(0), m_cat(&generic_category()) {}
229
- error_condition( int val, const error_category & cat ) : m_val(val), m_cat(&cat) {}
236
+ error_condition() BOOST_SYSTEM_NOEXCEPT : m_val(0), m_cat(&generic_category()) {}
237
+ error_condition( int val, const error_category & cat ) BOOST_SYSTEM_NOEXCEPT : m_val(val), m_cat(&cat) {}
230
238
 
231
239
  template <class ErrorConditionEnum>
232
240
  error_condition(ErrorConditionEnum e,
233
- typename boost::enable_if<is_error_condition_enum<ErrorConditionEnum> >::type* = 0)
241
+ typename boost::enable_if<is_error_condition_enum<ErrorConditionEnum> >::type* = 0) BOOST_SYSTEM_NOEXCEPT
234
242
  {
235
243
  *this = make_error_condition(e);
236
244
  }
237
245
 
238
246
  // modifiers:
239
247
 
240
- void assign( int val, const error_category & cat )
241
- {
248
+ void assign( int val, const error_category & cat ) BOOST_SYSTEM_NOEXCEPT
249
+ {
242
250
  m_val = val;
243
251
  m_cat = &cat;
244
252
  }
245
-
253
+
246
254
  template<typename ErrorConditionEnum>
247
255
  typename boost::enable_if<is_error_condition_enum<ErrorConditionEnum>, error_condition>::type &
248
- operator=( ErrorConditionEnum val )
249
- {
256
+ operator=( ErrorConditionEnum val ) BOOST_SYSTEM_NOEXCEPT
257
+ {
250
258
  *this = make_error_condition(val);
251
259
  return *this;
252
260
  }
253
261
 
254
- void clear()
262
+ void clear() BOOST_SYSTEM_NOEXCEPT
255
263
  {
256
264
  m_val = 0;
257
265
  m_cat = &generic_category();
258
266
  }
259
267
 
260
268
  // observers:
261
- int value() const { return m_val; }
262
- const error_category & category() const { return *m_cat; }
269
+ int value() const BOOST_SYSTEM_NOEXCEPT { return m_val; }
270
+ const error_category & category() const BOOST_SYSTEM_NOEXCEPT { return *m_cat; }
263
271
  std::string message() const { return m_cat->message(value()); }
264
272
 
265
273
  typedef void (*unspecified_bool_type)();
266
274
  static void unspecified_bool_true() {}
267
275
 
268
- operator unspecified_bool_type() const // true if error
269
- {
276
+ operator unspecified_bool_type() const BOOST_SYSTEM_NOEXCEPT // true if error
277
+ {
270
278
  return m_val == 0 ? 0 : unspecified_bool_true;
271
279
  }
272
280
 
273
- bool operator!() const // true if no error
281
+ bool operator!() const BOOST_SYSTEM_NOEXCEPT // true if no error
274
282
  {
275
283
  return m_val == 0;
276
284
  }
@@ -279,13 +287,13 @@ namespace boost
279
287
  // the more symmetrical non-member syntax allows enum
280
288
  // conversions work for both rhs and lhs.
281
289
  inline friend bool operator==( const error_condition & lhs,
282
- const error_condition & rhs )
290
+ const error_condition & rhs ) BOOST_SYSTEM_NOEXCEPT
283
291
  {
284
292
  return lhs.m_cat == rhs.m_cat && lhs.m_val == rhs.m_val;
285
- }
293
+ }
286
294
 
287
295
  inline friend bool operator<( const error_condition & lhs,
288
- const error_condition & rhs )
296
+ const error_condition & rhs ) BOOST_SYSTEM_NOEXCEPT
289
297
  // the more symmetrical non-member syntax allows enum
290
298
  // conversions work for both rhs and lhs.
291
299
  {
@@ -312,59 +320,59 @@ namespace boost
312
320
  public:
313
321
 
314
322
  // constructors:
315
- error_code() : m_val(0), m_cat(&system_category()) {}
316
- error_code( int val, const error_category & cat ) : m_val(val), m_cat(&cat) {}
323
+ error_code() BOOST_SYSTEM_NOEXCEPT : m_val(0), m_cat(&system_category()) {}
324
+ error_code( int val, const error_category & cat ) BOOST_SYSTEM_NOEXCEPT : m_val(val), m_cat(&cat) {}
317
325
 
318
326
  template <class ErrorCodeEnum>
319
327
  error_code(ErrorCodeEnum e,
320
- typename boost::enable_if<is_error_code_enum<ErrorCodeEnum> >::type* = 0)
328
+ typename boost::enable_if<is_error_code_enum<ErrorCodeEnum> >::type* = 0) BOOST_SYSTEM_NOEXCEPT
321
329
  {
322
330
  *this = make_error_code(e);
323
331
  }
324
332
 
325
333
  // modifiers:
326
- void assign( int val, const error_category & cat )
327
- {
334
+ void assign( int val, const error_category & cat ) BOOST_SYSTEM_NOEXCEPT
335
+ {
328
336
  m_val = val;
329
337
  m_cat = &cat;
330
338
  }
331
-
339
+
332
340
  template<typename ErrorCodeEnum>
333
341
  typename boost::enable_if<is_error_code_enum<ErrorCodeEnum>, error_code>::type &
334
- operator=( ErrorCodeEnum val )
335
- {
342
+ operator=( ErrorCodeEnum val ) BOOST_SYSTEM_NOEXCEPT
343
+ {
336
344
  *this = make_error_code(val);
337
345
  return *this;
338
346
  }
339
347
 
340
- void clear()
348
+ void clear() BOOST_SYSTEM_NOEXCEPT
341
349
  {
342
350
  m_val = 0;
343
351
  m_cat = &system_category();
344
352
  }
345
353
 
346
354
  // observers:
347
- int value() const { return m_val; }
348
- const error_category & category() const { return *m_cat; }
349
- error_condition default_error_condition() const { return m_cat->default_error_condition(value()); }
355
+ int value() const BOOST_SYSTEM_NOEXCEPT { return m_val; }
356
+ const error_category & category() const BOOST_SYSTEM_NOEXCEPT { return *m_cat; }
357
+ error_condition default_error_condition() const BOOST_SYSTEM_NOEXCEPT { return m_cat->default_error_condition(value()); }
350
358
  std::string message() const { return m_cat->message(value()); }
351
359
 
352
360
  typedef void (*unspecified_bool_type)();
353
361
  static void unspecified_bool_true() {}
354
362
 
355
- operator unspecified_bool_type() const // true if error
356
- {
363
+ operator unspecified_bool_type() const BOOST_SYSTEM_NOEXCEPT // true if error
364
+ {
357
365
  return m_val == 0 ? 0 : unspecified_bool_true;
358
366
  }
359
367
 
360
- bool operator!() const // true if no error
368
+ bool operator!() const BOOST_SYSTEM_NOEXCEPT // true if no error
361
369
  {
362
370
  return m_val == 0;
363
371
  }
364
372
 
365
373
  // relationals:
366
374
  inline friend bool operator==( const error_code & lhs,
367
- const error_code & rhs )
375
+ const error_code & rhs ) BOOST_SYSTEM_NOEXCEPT
368
376
  // the more symmetrical non-member syntax allows enum
369
377
  // conversions work for both rhs and lhs.
370
378
  {
@@ -372,15 +380,15 @@ namespace boost
372
380
  }
373
381
 
374
382
  inline friend bool operator<( const error_code & lhs,
375
- const error_code & rhs )
383
+ const error_code & rhs ) BOOST_SYSTEM_NOEXCEPT
376
384
  // the more symmetrical non-member syntax allows enum
377
385
  // conversions work for both rhs and lhs.
378
386
  {
379
387
  return lhs.m_cat < rhs.m_cat
380
388
  || (lhs.m_cat == rhs.m_cat && lhs.m_val < rhs.m_val);
381
389
  }
382
-
383
- private:
390
+
391
+ private:
384
392
  int m_val;
385
393
  const error_category * m_cat;
386
394
 
@@ -414,43 +422,43 @@ namespace boost
414
422
  // non-member functions ------------------------------------------------//
415
423
 
416
424
  inline bool operator!=( const error_code & lhs,
417
- const error_code & rhs )
425
+ const error_code & rhs ) BOOST_SYSTEM_NOEXCEPT
418
426
  {
419
427
  return !(lhs == rhs);
420
428
  }
421
429
 
422
430
  inline bool operator!=( const error_condition & lhs,
423
- const error_condition & rhs )
431
+ const error_condition & rhs ) BOOST_SYSTEM_NOEXCEPT
424
432
  {
425
433
  return !(lhs == rhs);
426
434
  }
427
435
 
428
436
  inline bool operator==( const error_code & code,
429
- const error_condition & condition )
437
+ const error_condition & condition ) BOOST_SYSTEM_NOEXCEPT
430
438
  {
431
439
  return code.category().equivalent( code.value(), condition )
432
440
  || condition.category().equivalent( code, condition.value() );
433
441
  }
434
-
442
+
435
443
  inline bool operator!=( const error_code & lhs,
436
- const error_condition & rhs )
444
+ const error_condition & rhs ) BOOST_SYSTEM_NOEXCEPT
437
445
  {
438
446
  return !(lhs == rhs);
439
447
  }
440
-
448
+
441
449
  inline bool operator==( const error_condition & condition,
442
- const error_code & code )
450
+ const error_code & code ) BOOST_SYSTEM_NOEXCEPT
443
451
  {
444
452
  return condition.category().equivalent( code, condition.value() )
445
453
  || code.category().equivalent( code.value(), condition );
446
454
  }
447
-
455
+
448
456
  inline bool operator!=( const error_condition & lhs,
449
- const error_code & rhs )
457
+ const error_code & rhs ) BOOST_SYSTEM_NOEXCEPT
450
458
  {
451
459
  return !(lhs == rhs);
452
460
  }
453
-
461
+
454
462
  // TODO: both of these may move elsewhere, but the LWG hasn't spoken yet.
455
463
 
456
464
  template <class charT, class traits>
@@ -472,29 +480,29 @@ namespace boost
472
480
  namespace errc
473
481
  {
474
482
  // explicit conversion:
475
- inline error_code make_error_code( errc_t e )
483
+ inline error_code make_error_code( errc_t e ) BOOST_SYSTEM_NOEXCEPT
476
484
  { return error_code( e, generic_category() ); }
477
485
 
478
486
  // implicit conversion:
479
- inline error_condition make_error_condition( errc_t e )
487
+ inline error_condition make_error_condition( errc_t e ) BOOST_SYSTEM_NOEXCEPT
480
488
  { return error_condition( e, generic_category() ); }
481
489
  }
482
490
 
483
491
  // error_category default implementation -------------------------------//
484
492
 
485
- inline error_condition error_category::default_error_condition( int ev ) const
486
- {
493
+ error_condition error_category::default_error_condition( int ev ) const BOOST_SYSTEM_NOEXCEPT
494
+ {
487
495
  return error_condition( ev, *this );
488
496
  }
489
497
 
490
- inline bool error_category::equivalent( int code,
491
- const error_condition & condition ) const
498
+ bool error_category::equivalent( int code,
499
+ const error_condition & condition ) const BOOST_SYSTEM_NOEXCEPT
492
500
  {
493
501
  return default_error_condition( code ) == condition;
494
502
  }
495
503
 
496
- inline bool error_category::equivalent( const error_code & code,
497
- int condition ) const
504
+ bool error_category::equivalent( const error_code & code,
505
+ int condition ) const BOOST_SYSTEM_NOEXCEPT
498
506
  {
499
507
  return *this == code.category() && code.value() == condition;
500
508
  }