1. 01 Aug, 2017 4 commits
    • Phil Willoughby's avatar
      C++11 support for Replaceable · ccb56f3c
      Phil Willoughby authored
      Summary: Also add tests for the `is_replaceable` trait.
      
      Reviewed By: yfeldblum
      
      Differential Revision: D5526317
      
      fbshipit-source-id: 92559d55fbb8d115856ef9e8f86b42e327f74e56
      ccb56f3c
    • Neel Goyal's avatar
      Add TLS 1.2+ version for contexts · b669462b
      Neel Goyal authored
      Summary: Add an SSL Version that specifies only TLS 1.2 and up.  This prevents any client with less than TLS 1.2 from connecting.
      
      Reviewed By: knekritz
      
      Differential Revision: D5537423
      
      fbshipit-source-id: 131f5b124af379eaa2b443052be9b43290c41820
      b669462b
    • Neel Goyal's avatar
      Change AsyncUDP's readCallback to be protected. · 432d60d6
      Neel Goyal authored
      Summary: Change AsyncUDPSocket's ReadCallback to be protected so that subclasses can have access to it.
      
      Reviewed By: yangchi
      
      Differential Revision: D5376012
      
      fbshipit-source-id: 7ec21d9bfe6bde525253adea7abf5dea15fb7fa0
      432d60d6
    • Yedidya Feldblum's avatar
      DRY some methods in IPAddress · 6a3a9eb0
      Yedidya Feldblum authored
      Summary:
      [Folly] DRY some methods in `IPAddress`.
      
      Specifically, the ones which just delegate to either `asV4()` or to `asV6()`.
      
      Reviewed By: mzlee
      
      Differential Revision: D5529797
      
      fbshipit-source-id: 4dd3dc893ab19281325700b85400c1c1aadfd77f
      6a3a9eb0
  2. 31 Jul, 2017 6 commits
    • Yang Chi's avatar
      Make sendmsg in AsyncUDPSocket overridable · 53b24a32
      Yang Chi authored
      Summary: Add a protected virtual sendmsg method to AsyncUDPSocket. And make it default to call the system sendmsg function. This enables subclasses of AsyncUDPSocket to be able to override the behavior of sendmseg, also makes AsyncUDPSocket easier to mock and test.
      
      Reviewed By: afrind
      
      Differential Revision: D5459745
      
      fbshipit-source-id: b0227bf7503b1096cb1f0bfc8b9c784db2f2e45d
      53b24a32
    • Yedidya Feldblum's avatar
      No need for strncpy in passwordCallback · e74ceef6
      Yedidya Feldblum authored
      Summary:
      [Folly] No need for `strncpy` in `passwordCallback`.
      
      Careful reading of the documentation:
      
      > The pem_passwd_cb must write the password into the provided buffer `buf` which is of size `size`.
      >
      > https://wiki.openssl.org/index.php?title=Manual:SSL_CTX_set_default_passwd_cb(3)&oldid=761
      
      No mention is made of a requirement on the password being written into `buf` that it be null-terminated.
      
      Reviewed By: knekritz, meyering
      
      Differential Revision: D5524814
      
      fbshipit-source-id: 6cfc588cdf3675281ffe39e6af376f3f0631d1b0
      e74ceef6
    • Phil Willoughby's avatar
      Remove template helper constants · ea815395
      Phil Willoughby authored
      Summary: Not supported by some environments.
      
      Reviewed By: yfeldblum
      
      Differential Revision: D5526180
      
      fbshipit-source-id: 2c2b6f7627860c5f896532b90601c817530e6b69
      ea815395
    • Yedidya Feldblum's avatar
      Consistency in namespace-closing comments · d4aacd24
      Yedidya Feldblum authored
      Summary: [Folly] Consistency in namespace-closing comments.
      
      Reviewed By: Orvid
      
      Differential Revision: D5524744
      
      fbshipit-source-id: ced4dd2398ed6baa3ad5b68b74eee6a5d6b2b103
      d4aacd24
    • Yedidya Feldblum's avatar
      Formatting for template parameters · adf4a5ac
      Yedidya Feldblum authored
      Summary: [Folly] Formatting for template parameters.
      
      Reviewed By: Orvid
      
      Differential Revision: D5525123
      
      fbshipit-source-id: 4feb772300cfdd6ae3168fe9f59f5a951fb85d0e
      adf4a5ac
    • Yedidya Feldblum's avatar
      Simplify the StateSize helper in Random · da591fe6
      Yedidya Feldblum authored
      Summary:
      [Folly] Simplify the `StateSize` helper in `Random`.
      
      * Using member type aliases rather than class constants means we can remove definitions.
      * Partially specializing over all RNG types with `state_size` class constants means we can remove the `mersenne_twister` specializations, which have many template parameters and are a pain.
      
      Reviewed By: Orvid
      
      Differential Revision: D5525144
      
      fbshipit-source-id: bc27f112ed0d9b55befe9dabe08c4d345a402435
      da591fe6
  3. 30 Jul, 2017 5 commits
    • Yedidya Feldblum's avatar
      Outline throw statements in format · 2562ef37
      Yedidya Feldblum authored
      Summary: [Folly] Outline `throw` statements in `format`.
      
      Reviewed By: Orvid
      
      Differential Revision: D5523933
      
      fbshipit-source-id: 371c9ecc707e48dcc05fa4aab4fd326111466161
      2562ef37
    • Yedidya Feldblum's avatar
      Let MacAddress use a helper hex-table · a961f2cd
      Yedidya Feldblum authored
      Summary:
      [Folly] Let `MacAddress` use a helper hex-table.
      
      The table is in the `folly::detail` namespace so it is non-public to users of folly, but the rules may not be quite as strict in at least some cases within folly.
      
      Also the helper `unhex` function that this replaces is not `clang-format`-clean, so this lets us sidestep that.
      
      Reviewed By: Orvid
      
      Differential Revision: D5524229
      
      fbshipit-source-id: 21d6938e20cd675e65499a5b64d2af934f980222
      a961f2cd
    • Yedidya Feldblum's avatar
      Consistent indentation for class visibility labels · 83b9f93f
      Yedidya Feldblum authored
      Summary: [Folly] Consistent indentation for class visibility labels (`public:`, `protected:`, `private:`). Style is +1 column relative to the `class` keyword.
      
      Reviewed By: andrewjcg
      
      Differential Revision: D5524869
      
      fbshipit-source-id: 53e4b6cbda10d5b63bafbd535794a8b7ae01a8e0
      83b9f93f
    • Yedidya Feldblum's avatar
      template< -> template < · fbfe1059
      Yedidya Feldblum authored
      Summary:
      [Folly] `template<` -> `template <`.
      
      And then apply `clang-format` style to affected `template <...>` lines.
      
      Reviewed By: andrewjcg
      
      Differential Revision: D5524792
      
      fbshipit-source-id: 6614eecf384bf3e3ccc2f0cc7c5334a0cb9c76af
      fbfe1059
    • Yedidya Feldblum's avatar
      Mark two implicit ctors as explicit · 92d9e7f7
      Yedidya Feldblum authored
      Summary:
      [Folly] Mark two implicit ctors as `explicit`.
      
      They did not need to be implicit.
      
      Reviewed By: andrewjcg
      
      Differential Revision: D5524798
      
      fbshipit-source-id: a50bc6bfc9da2642891faf0aa38a19f46e75b9da
      92d9e7f7
  4. 29 Jul, 2017 5 commits
    • Yedidya Feldblum's avatar
      Define IPAddressV6 comparison ops in terms of its fields · 4927f087
      Yedidya Feldblum authored
      Summary: [Folly] Define `IPAddressV6` comparison ops in terms of its fields using `std::tie`.
      
      Reviewed By: andrewjcg
      
      Differential Revision: D5524248
      
      fbshipit-source-id: 5f5f2acd6e9cfd6dfd148cc7d95bda720bf81ee9
      4927f087
    • Yedidya Feldblum's avatar
      Merge IPAddressTest.h into the IPAddressTest.cpp · 21099baa
      Yedidya Feldblum authored
      Summary:
      [Folly] Merge `IPAddressTest.h` into the `IPAddressTest.cpp`.
      
      There is no real need to split anything out into a header file.
      
      Reviewed By: andrewjcg
      
      Differential Revision: D5524267
      
      fbshipit-source-id: e128c69c7da38663f19d0ccd73edaae36c3f469a
      21099baa
    • Yedidya Feldblum's avatar
      Outline throw statements in folly/futures/ · 063b4a3d
      Yedidya Feldblum authored
      Summary: [Folly] Outline `throw` statements in `folly/futures/`.
      
      Reviewed By: ericniebler
      
      Differential Revision: D5522791
      
      fbshipit-source-id: 545185bc580ea8628075b9ecae46c2f19308e937
      063b4a3d
    • Yedidya Feldblum's avatar
      Compute masks in IPAddressV4 · 9ab15578
      Yedidya Feldblum authored
      Summary: [Folly] Compute masks in `IPAddressV4`. Just like in `IPAddressV6`.
      
      Reviewed By: WillerZ
      
      Differential Revision: D5524197
      
      fbshipit-source-id: ebeeab28304bff4f6150cf76216d170908e62aa4
      9ab15578
    • 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
  5. 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
  6. 27 Jul, 2017 1 commit
  7. 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