1. 29 Jul, 2017 1 commit
    • Phil Willoughby's avatar
      Fix the copy constructor in Replaceable · efc4ca1e
      Phil Willoughby authored
      Summary:
      Fix the copy constructor, and add the missing testcase which would have found
      this problem.
      
      Reviewed By: yfeldblum
      
      Differential Revision: D5516628
      
      fbshipit-source-id: 3e688c34f061511df5b68243111fecb83483d79d
      efc4ca1e
  2. 28 Jul, 2017 5 commits
    • Yedidya Feldblum's avatar
      Optimal make_integer_sequence · 890625b2
      Yedidya Feldblum authored
      Summary:
      [Folly] Optimal `make_integer_sequence`.
      
      When the builtin `__make_integer_seq` is available, use that. It is the most optimal implementation.
      
      Otherwise, use a tweaked divide-and-conquer implementation. Designed to reuse more template instantiations than the straightforward divide-and-conquer approach in libstdc++ >= 6. And definitely not linearly recursive as in libstdc++ < 6.
      
      Illustrating with an example. Let `M` be whatever template type implements `make_integer_sequence`. For `M<17>`, libstdc++ < 6 does linear recursion (least optimal), instantiating `M<16>`, `M<15>`, ..., `M<1>`. libstdc++ >= 6 does straightforward divide-and-conquer recursion, instantiating `M<8>` and `M<9>`, recursing into `M<4>` and `M<5>`, recursing into `M<2>` and `M<3>`, recursing into `M<1>`. Our implementation does a variant of divide-and-conquer recursion to maximize reuse, instantiating `M<8>` and `M<1>`, recursing into `M<4>`, recursing into `M<2>`.
      
      Implementation derived from `fatal/type/sequence.h`.
      
      Reviewed By: ericniebler
      
      Differential Revision: D5496975
      
      fbshipit-source-id: 449b4e0a1c7b4a5b602752c1d3dd8914bf9a8e71
      890625b2
    • stryku's avatar
      Prevent IsOneOf unused template specialization instantiation · 160f868c
      stryku authored
      Summary:
      Current `IsOneOf` implementation does unnecessary work because it instantiates all of the possible template specializations, even if type is same as the first of the tested ones. E.g.
      `IsOneOf<char, char, int, float>` will instantiate:
      ```
      IsOneOf<char, char, int, float>
      IsOneOf<char, char, int>
      IsOneOf<char, char>
      IsOneOf<char>
      ```
      
      With the proposed inheritance, compiler will stop initializing at the first match.
      Closes https://github.com/facebook/folly/pull/643
      
      Reviewed By: ericniebler
      
      Differential Revision: D5482783
      
      Pulled By: yfeldblum
      
      fbshipit-source-id: 3d04c750ce72fa9b19b4d0588cccfb396a9e0715
      160f868c
    • Mingtao Yang's avatar
      Add X509_REVOKED_get0_* OpenSSL shims · 45245cb2
      Mingtao Yang authored
      Reviewed By: yfeldblum
      
      Differential Revision: D5509756
      
      fbshipit-source-id: 0b9581dafb073c5e3e5a229c032c6cf272ceb2e0
      45245cb2
    • Andrew Krieger's avatar
      Fix StringPiece ostream overloads to properly not rely on <ostream> · cd2511af
      Andrew Krieger authored
      Summary:
      std::ostream may be incomplete because Range.h doesn't use <ostream>,
      only <iosfwd>. Changing the operator<< overloads to be templated on the char
      type defers typechecking until callsites, which will avoid the potential problem.
      
      Reviewed By: yfeldblum, ericniebler
      
      Differential Revision: D5494648
      
      fbshipit-source-id: e59b6fdfba6c08ec70ebb1e10c14a43307a1119f
      cd2511af
    • Andrew Krieger's avatar
      std::basic_ostream operator<< overload for FixedString · 8dde913d
      Andrew Krieger authored
      Summary:
      When attempting to output a FixedString into eg. glog or
      some other ostream, it is first being implicitly converted to StringPiece
      and then that is printed using the overloaded operator<<. If another
      suitable implicit conversion is provided, eg. to `dynamic`, compilers
      cannot choose between either one. Instead, overload operator<< directly
      on FixedString to resolve the ambiguity.
      
      Reviewed By: yfeldblum, ericniebler
      
      Differential Revision: D5492779
      
      fbshipit-source-id: 92d661e5471a91057d7a0d010420709c5d59232f
      8dde913d
  3. 27 Jul, 2017 1 commit
  4. 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
  5. 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
  6. 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
  7. 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
  8. 22 Jul, 2017 2 commits
  9. 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
  10. 20 Jul, 2017 3 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