1. 26 Jul, 2017 14 commits
    • Yedidya Feldblum's avatar
      Add FOLLY_HAS_FEATURE and use it · f99fa528
      Yedidya Feldblum authored
      Summary:
      [Folly] Add `FOLLY_HAS_FEATURE` and use it.
      
      Use it in the definitions of `FOLLY_SANITIZE_ADDRESS` and `FOLLY_SANITIZE_THREAD`.
      
      Reviewed By: meyering
      
      Differential Revision: D5496915
      
      fbshipit-source-id: e272137ad8ba891e64fc98444edf573115764ee2
      f99fa528
    • Yedidya Feldblum's avatar
      Cut moveFromTry · 1dd8e387
      Yedidya Feldblum authored
      Summary: [Folly] Cut `moveFromTry`. Not necessary, and is even longer than `std::move`.
      
      Reviewed By: WillerZ, ericniebler
      
      Differential Revision: D5478450
      
      fbshipit-source-id: ecd01cb1bcd435e49268a76dd558e57ba8dd9b9e
      1dd8e387
    • Yedidya Feldblum's avatar
      Outline throw statements in dynamic · 12b5fff0
      Yedidya Feldblum authored
      Summary:
      [Folly] Outline `throw` statements in `dynamic`.
      
      There is no need for them to be inline - definitionally, they are always cold.
      
      Reviewed By: WillerZ
      
      Differential Revision: D5497457
      
      fbshipit-source-id: 7b649c59b5b2609f838eb10e9329468d1bd1d558
      12b5fff0
    • Xiangyu Bu's avatar
      Kill folly::SSLContext::switchCiphersIfTLS11. · 4fbcb4b8
      Xiangyu Bu authored
      Summary: It has been years since BEAST attack surfaced. The vulnerabilities have been patched and the mitigation using RC4 cipher is no longer needed. This diff removes the code relevant to mitigating BEAST years ago.
      
      Reviewed By: anirudhvr
      
      Differential Revision: D5409859
      
      fbshipit-source-id: 58178e68a447f372b19491832a7be590af9402e9
      4fbcb4b8
    • Neel Goyal's avatar
      Add getEventBase() to AsyncUDPSocket · 709f4ff7
      Neel Goyal authored
      Summary: Add an event base getter for AsyncUDPSocket similar to the other socket classes.
      
      Reviewed By: knekritz
      
      Differential Revision: D5498587
      
      fbshipit-source-id: ac3179e03485328417ed9863f6bb790de7c691cb
      709f4ff7
    • Dave Watson's avatar
      ConcurrentHashMap · f0b5826b
      Dave Watson authored
      Summary:
      A ConcurrentHashMap with wait-free readers, as in Java's ConcurrentHashMap.
      
      It's a pretty generic closed-addressing chaining hashtable, except find() uses two hazard pointers
      to do hand-over-hand traversal of the list, so it never takes a lock.
      
      On rehash, only the part of the chain that remains the same (i.e. is still hashed to the same bucket)
      is reused, otherwise we have to allocate new nodes.
      
      Reallocating nodes means we either have to copy the value_type, or add in an extra indirection
      to access it.  Both are supported.
      
      There's still a couple opportunities to squeeze some more perf out with optimistic loading
      of nodes / cachelines, but I didn't go that far yet, it sill looks pretty good.
      
      Reviewed By: davidtgoldblatt
      
      Differential Revision: D5349966
      
      fbshipit-source-id: 022e8adacd0ddd32b2a4563caa99c0c4878851d8
      f0b5826b
    • Dave Watson's avatar
      Allow stealing pointer bits · 763b84fb
      Dave Watson authored
      Summary:
      Currently hazard pointers doesn't support stealing any of the pointer bits.
      You can *almost* roll it yourself using try_protect, but this prevents
      implementations from choosing their type of barrier.
      
      This adds a new get_protected interface that you can use to steal bits, or
      otherwise manipulate pointers as you would like.
      
      This also adds a MWMR list based set example that uses it, that is wait-free
      for readers (unlike the SWMR example, that is only lock-free).
      
      Reviewed By: magedm
      
      Differential Revision: D5455615
      
      fbshipit-source-id: 53d282eda433e00b6b53cd804d4e1c32c74c2fb8
      763b84fb
    • Phil Willoughby's avatar
      Update Optional · 99d6990e
      Phil Willoughby authored
      Summary: Now const-optimizer safe, and safe when the contained value overloads unary operator&
      
      Reviewed By: yfeldblum
      
      Differential Revision: D5480170
      
      fbshipit-source-id: 3b53b0b6ce608857aa29d3f61eccd0b793b4cddc
      99d6990e
    • Phil Willoughby's avatar
      clang-format Optional.h · 215da678
      Phil Willoughby authored
      Reviewed By: yfeldblum
      
      Differential Revision: D5497522
      
      fbshipit-source-id: bb208aeb37b5b9ce99619193d4cd2d0f3fb39178
      215da678
    • Yedidya Feldblum's avatar
      Add FOLLY_HAS_BUILTIN and use it · ccb206fc
      Yedidya Feldblum authored
      Summary:
      [Folly] Add `FOLLY_HAS_BUILTIN` and use it.
      
      Use it in the definition of `folly::launder`. Of course, since GCC does not have `__has_builtin`, we still have to check its version.
      
      Reviewed By: WillerZ
      
      Differential Revision: D5496748
      
      fbshipit-source-id: 3bd6e89424dfd2c9cb9795ee4d88f66c4294cc4c
      ccb206fc
    • Yedidya Feldblum's avatar
      Cut throwOnFail · c815830f
      Yedidya Feldblum authored
      Summary:
      [Folly] Cut `throwOnFail`.
      
      It is not necessary, and `CHECK_THROW`, its reason for existing, can be implemented without it.
      
      It can also easily be a pessimization because there is no way to delay computation of the arguments to the exception ctor until after the check. So if there is, say, a computation using `sformat` to compute a string argument to the exception ctor, that will always be performed rather than being performed only should the check fail.
      
      Reviewed By: Orvid
      
      Differential Revision: D5478804
      
      fbshipit-source-id: 71a125c126eae76c6e95ef1bd23ee883b1db39a5
      c815830f
    • Yangqing Jia's avatar
      folly: changes to make nvcc happy · 5a40209a
      Yangqing Jia authored
      Summary:
      (1) small_vector.h line 1099: wrap the default return in an else statement to
      avoid compiler warning of "unreachable statement".
      (2) Constexpr.h: need to treat cudacc similarly to msvc.
      
      (Note: this ignores all push blocking failures!)
      
      Reviewed By: dzhulgakov
      
      Differential Revision: D5387061
      
      fbshipit-source-id: f002ab5ec00d4dcd85d86386f87a0327023afa1b
      5a40209a
    • Yedidya Feldblum's avatar
      Move __CLANG_PREREQ to folly/CPortabiilty.h · f634a701
      Yedidya Feldblum authored
      Summary: [Folly] Move `__CLANG_PREREQ` to `folly/CPortabiilty.h`.
      
      Reviewed By: Orvid
      
      Differential Revision: D5496372
      
      fbshipit-source-id: 710af3d30aa8bd0e5f645beede354e3463f1bb25
      f634a701
    • Yedidya Feldblum's avatar
      There is no HAVE_SHADOW_LOCAL_WARNINGS · 20408f9a
      Yedidya Feldblum authored
      Summary:
      [Folly] There is no `HAVE_SHADOW_LOCAL_WARNINGS`
      
      It is `FOLLY_HAVE_SHADOW_LOCAL_WARNINGS`.
      
      Reviewed By: Orvid
      
      Differential Revision: D5496247
      
      fbshipit-source-id: 689f40180180465bdc44593059e44fb64cf3e415
      20408f9a
  2. 25 Jul, 2017 5 commits
    • Mingtao Yang's avatar
      Fix include typo · 489ee579
      Mingtao Yang authored
      Reviewed By: anirudhvr
      
      Differential Revision: D5492790
      
      fbshipit-source-id: 10e868976a7ea42673d5b5c906a53c6c9495a288
      489ee579
    • nicksbyman's avatar
      add import to main in logging example · 9fc87c83
      nicksbyman authored
      Summary: Closes https://github.com/facebook/folly/pull/642
      
      Reviewed By: Orvid
      
      Differential Revision: D5471368
      
      Pulled By: yfeldblum
      
      fbshipit-source-id: 3bbafd04b93828121ba829027959b6b3e0e55888
      9fc87c83
    • Mingtao Yang's avatar
      Move OpenSSL locking code out of SSLContext · 40966706
      Mingtao Yang authored
      Summary:
      OpenSSL 1.1.0 deprecates the callback based locking setup in favor
      for platform native mutexes.
      
      Added `OPENSSL_init_ssl` in the OpenSSL portability module for OpenSSL API < 1.1.0. This implements
      the standard OpenSSL library initialization routines (taken from SSLContext::initializeOpenSSL).
      
      Added `OPENSSL_cleanup` in the OpenSSL portability module for OpenSSL API < 1.1.0. This implements
      the cleanup routine from SSLContext::cleanupOpenSSL.
      
      Removed `SSLContext::SSLLockType`. Replaced with `folly::ssl::LockType`.
      
      Reviewed By: mzlee, ngoyal
      
      Differential Revision: D5404777
      
      fbshipit-source-id: 7e5d9bf4a6683afb5560ada0a5b73cac3ff2662b
      40966706
    • Nicholas Ormrod's avatar
      Fix double-free in DynamicConverter · d1ddabb0
      Nicholas Ormrod authored
      Summary:
      If an exception is thrown during the construction of value in a container, then the Transformer iterator will not successfully reconstruct a cache_ object after explicitly calling its destructor (due to the exception being thrown), which results in a double-free when cache_ is destroyed as part of Transformer's destructor.
      
      Conveniently, there exists a piece of code designed to solve just this problem: folly::Optional. Replace cache_ and valid_ with folly::Optional.
      
      This also fixes the unnecessary requirement that container value types have default constructors, since cache_ is no longer default constructed inside of Transformer.
      
      Reviewed By: markisaa
      
      Differential Revision: D5472342
      
      fbshipit-source-id: eade1f7ce260b9b3406d92af8255b5ffa4e4a51c
      d1ddabb0
    • Phil Willoughby's avatar
      Replaceable · fbfd3029
      Phil Willoughby authored
      Summary:
      An instance of `Replaceable<T>` wraps an instance of `T`.
      
      You access the inner `T` instance with `operator*` and `operator->` (as if
      it were a smart pointer).
      
      `Replaceable<T>` adds no indirection cost and performs no allocations.
      
      `Replaceable<T>` has the same size and alignment as `T`.
      
      You can replace the `T` within a `Replaceable<T>` using the `emplace` method
      (presuming that it is constructible and destructible without throwing
      exceptions). If the destructor or constructor you're using could throw an
      exception you should use `Optional<T>` instead, as it's not a logic error for
      that to be empty.
      
      Reviewed By: yfeldblum
      
      Differential Revision: D5346528
      
      fbshipit-source-id: c7d72e73ea04e371325327a7ff0b345315d6e5ac
      fbfd3029
  3. 24 Jul, 2017 2 commits
    • Yedidya Feldblum's avatar
      Move the SpookyHash libraries into folly/hash · ebff31e4
      Yedidya Feldblum authored
      Summary:
      [Folly] Move the SpookyHash libraries into `folly/hash`.
      
      And propagate the changes to `#include` lines, etc.
      
      Reviewed By: Orvid
      
      Differential Revision: D5477735
      
      fbshipit-source-id: 94fe95ece05b52bde1466ab5f9fb8b53a4c59bed
      ebff31e4
    • Yedidya Feldblum's avatar
      Outline the throw statements in Try · 1d7c30b2
      Yedidya Feldblum authored
      Summary:
      [Folly] Outline the `throw` statements in `Try`.
      
      They are by definition cold and so we gain nothing from inlining them.
      
      Reviewed By: Orvid
      
      Differential Revision: D5478237
      
      fbshipit-source-id: f413251a56ca4cbddcf3baea6679a552ae5bb19e
      1d7c30b2
  4. 23 Jul, 2017 1 commit
    • Subodh Iyengar's avatar
      Add fnv1-a hash to Hash · b3698ed4
      Subodh Iyengar authored
      Summary:
      Add fnv1-a 64 bit hash to Hash.h.
      fnv1-a is supposed to be preferred over
      fnv1.
      
      Reviewed By: yfeldblum
      
      Differential Revision: D5453401
      
      fbshipit-source-id: c13f12ef11eb6745c95f3901b14ceafce90ea0ea
      b3698ed4
  5. 22 Jul, 2017 2 commits
  6. 21 Jul, 2017 6 commits
    • Stephen Chen's avatar
      crc32c: add missing header for std::runtime_error · f90eaa17
      Stephen Chen authored
      Summary: On the non sse42 path, we throw std::runtime_error, but Crc32cDetail.cpp is missing the header for it so it fails to compile on aarch64.
      
      Reviewed By: yfeldblum
      
      Differential Revision: D5468906
      
      fbshipit-source-id: 2d5408621cb2b6758d3501407ed3d2a40d79f1b0
      f90eaa17
    • Yedidya Feldblum's avatar
      Apply clang-format to folly/experimental/symbolizer/ · 04458d15
      Yedidya Feldblum authored
      Summary: [Folly] Apply `clang-format` to `folly/experimental/symbolizer/`.
      
      Reviewed By: Orvid
      
      Differential Revision: D5468832
      
      fbshipit-source-id: 94a0f82312769be0e8be724c11f97e14425ead10
      04458d15
    • Yedidya Feldblum's avatar
      Apply clang-format to folly/experimental/io/ · f7920221
      Yedidya Feldblum authored
      Summary: [Folly] Apply `clang-format` to `folly/experimental/io/`.
      
      Reviewed By: Orvid
      
      Differential Revision: D5460571
      
      fbshipit-source-id: d19aff829316dd277e65620196e12db8cad46787
      f7920221
    • Yedidya Feldblum's avatar
      Style tweaks to max_align_v calculation · 1804caee
      Yedidya Feldblum authored
      Summary:
      [Folly] Style tweaks to `max_align_v` calculation.
      
      * Change ns from `folly::detail` since that can be crowded and many other folly libraries may include this header.
      * Extract a 2-param `max` alias.
      * Fix an incorrectly hardcoded `size_t`.
      
      Reviewed By: WillerZ
      
      Differential Revision: D5468758
      
      fbshipit-source-id: 14a3f67323020a3cfce2b3b46f5f64f3e6125027
      1804caee
    • Yedidya Feldblum's avatar
      Apply clang-format to folly/tracing/ · efce8553
      Yedidya Feldblum authored
      Summary: [Folly] Apply `clang-format` to `folly/tracing/`.
      
      Reviewed By: Orvid
      
      Differential Revision: D5460511
      
      fbshipit-source-id: c7a7d34211044a1b76934f184a8552a96d0bad91
      efce8553
    • Yedidya Feldblum's avatar
      Parse suffixes without switch-fallthrough in huge-pages · af8f1710
      Yedidya Feldblum authored
      Summary: [Folly] Parse suffixes without switch-fallthrough in huge-pages. It is clever, but weird. We can use an immediately-executed lambda expression to make it convenient.
      
      Reviewed By: Orvid
      
      Differential Revision: D5467585
      
      fbshipit-source-id: 02ddb97641db97e38e3f40388ecc522eccd436cb
      af8f1710
  7. 20 Jul, 2017 8 commits
    • Yedidya Feldblum's avatar
      Apply clang-format to folly/experimental/bser/ · 060471a0
      Yedidya Feldblum authored
      Summary: [Folly] Apply `clang-format` to `folly/experimental/bser/`.
      
      Reviewed By: Orvid
      
      Differential Revision: D5460552
      
      fbshipit-source-id: e103f8920eb29b7c14688f5bbb3e28129ef35e96
      060471a0
    • Yedidya Feldblum's avatar
      Drop a remnant of gcc48 support in futures · 93dc9876
      Yedidya Feldblum authored
      Summary: [Folly] Drop a remnant of gcc48 support in futures. Because gcc48 is no longer supported.
      
      Reviewed By: Orvid, meyering
      
      Differential Revision: D5460788
      
      fbshipit-source-id: 86e2985a0980357641d18f59fd25b9667ec30ab0
      93dc9876
    • Jeff Cai's avatar
      fix ExceptionWrapper comment · 663e27f9
      Jeff Cai authored
      Summary:
      Fix comment for exception_wrapper's `operator bool()`.
      It reads "return `true` if `*this` is not holding an exception"
      but the actual behavior is to return `true` if `*this` *is* holding
      an exception.
      
      Reviewed By: yfeldblum
      
      Differential Revision: D5456386
      
      fbshipit-source-id: ec3a472ea441476d835881e94036a3957bb2ab32
      663e27f9
    • Phil Willoughby's avatar
      Introduce folly::max_align_t and folly::max_align_v · 2177f05a
      Phil Willoughby authored
      Summary:
      `folly::max_align_t` is a portable replacement for `std::max_align_t`.
      
      `folly::max_align_v` is a `constexpr size_t` with the same value as `alignof(folly::max_align_t)`
      
      32-bit iOS environments have `alignof(std::max_align_t) == 4`, which is not correct. This is more
      correct in that I have not yet found a more-aligned basic type.
      
      Reviewed By: yfeldblum
      
      Differential Revision: D5442333
      
      fbshipit-source-id: 0a93e48a730d65ef76e04f132b5976c93587b14c
      2177f05a
    • Subodh Iyengar's avatar
      Add folly non null · 339c14d3
      Subodh Iyengar authored
      Summary:
      Add non null annotation to
      folly to help with linters
      complaining when a pointer could
      be null, however it never is.
      
      Reviewed By: yfeldblum
      
      Differential Revision: D5453255
      
      fbshipit-source-id: cf7ccbcc86d171ef4f6d373b6f751f709e4587b1
      339c14d3
    • Yedidya Feldblum's avatar
      Move futures helper types into folly::futures::detail · 5a81b5df
      Yedidya Feldblum authored
      Summary:
      [Folly] Move futures helper types into `folly::futures::detail`.
      
      From `folly::detail`, where it would be easier to collide. Especially for names like `Core`.
      
      Reviewed By: WillerZ
      
      Differential Revision: D5460766
      
      fbshipit-source-id: 3f7bff784bbb89c7c86d2f1824323d71321c7ad6
      5a81b5df
    • Benjamin Reesman's avatar
      do not crash process by default when ExceptionTracer fails to reflect over cxxabi · 05a686a7
      Benjamin Reesman authored
      Summary: It is possible in certain cirucmstances for the cxxabi reflection code in `ExceptionTracer` to fail to cope with exceptions that we've seen in production and it currently aborts the process in that case. This diff switches this to `DFATAL`/`DCHECK`.
      
      Reviewed By: yfeldblum
      
      Differential Revision: D5431445
      
      fbshipit-source-id: c3d68372c2fadbb518f78fe99e817db611953d22
      05a686a7
    • Tom Jackson's avatar
      Visit, for monitoring or mutating pipelines · e1fb97e7
      Tom Jackson authored
      Summary: The pattern `mapped([](auto&& i) { ...; return std::move(i); }` is quite common. Evidently people need some good mechanism to just observe or possibly mutate items in pipelines. Note that this is still lazy, it is only called when the pipeline is run.
      
      Reviewed By: yfeldblum
      
      Differential Revision: D5457196
      
      fbshipit-source-id: 3a892b8895e02dd8fcd6a7fd4d3b27063d1b071f
      e1fb97e7
  8. 19 Jul, 2017 2 commits
    • Victor Gao's avatar
      change the definition of FOLLY_MAYBE_UNUSED · 4b807f9e
      Victor Gao authored
      Summary:
      Currently gcc does not support attributes declared using square brackets well and some builds might break because of this.
      
      Since `__attribute__((...))` works for both clang and gcc, we should switch to it for now.
      
      Reviewed By: yfeldblum
      
      Differential Revision: D5456734
      
      fbshipit-source-id: d7a8bf1389afc5d60604f22d37c93611dc46259c
      4b807f9e
    • Dave Watson's avatar
      3-way crc32c · 74102328
      Dave Watson authored
      Summary: Current folly version uses a single crc32c.  crc32c has a latency of 3, so pipelining three in a row makes it nearly 3x faster (for data all in cache).
      
      Reviewed By: yfeldblum
      
      Differential Revision: D5418228
      
      fbshipit-source-id: d3a250e1b4fe1f0bc99b44c660df94cf233aebd6
      74102328