1. 17 Jul, 2017 2 commits
    • Yedidya Feldblum's avatar
      Let exception_wrapper::handle, when empty, show the right error message · 6139d03f
      Yedidya Feldblum authored
      Summary:
      [Folly] Let `exception_wrapper::handle`, when empty, show the right error message.
      
      The error message currently says that `throw_exception` cannot be called on an empty `exception_wrapper`, but should say that `handle` cannot be called on an empty `exception_wrapper`.
      
      Reviewed By: Orvid
      
      Differential Revision: D5432380
      
      fbshipit-source-id: ffa69c7675ee332e596e861e59ea273c39fc4717
      6139d03f
    • Yedidya Feldblum's avatar
      CodeMod: Prefer ADD_FAILURE() over EXPECT_TRUE(false), et cetera · b15db0d8
      Yedidya Feldblum authored
      Summary:
      CodeMod: Prefer `ADD_FAILURE()` over `EXPECT_TRUE(false)`, et cetera.
      
      The tautologically-conditioned and tautologically-contradicted boolean expectations/assertions have better alternatives: unconditional passes and failures.
      
      Reviewed By: Orvid
      
      Differential Revision:
      D5432398
      
      Tags: codemod, codemod-opensource
      
      fbshipit-source-id: d16b447e8696a6feaa94b41199f5052226ef6914
      b15db0d8
  2. 15 Jul, 2017 1 commit
    • Christopher Dykes's avatar
      Use long long for the 64-bit fingerprint table · eb0730c9
      Christopher Dykes authored
      Summary: Because these are always 64-bit values. This hasn't actually been an issue but is the correct thing to do.
      
      Reviewed By: yfeldblum
      
      Differential Revision: D5425658
      
      fbshipit-source-id: 5bc204b3d1af2c710bd8b1665211d2971ccf7be7
      eb0730c9
  3. 14 Jul, 2017 8 commits
    • Christopher Dykes's avatar
      Replace all includes of pthread.h with the portability header · d63e7a1b
      Christopher Dykes authored
      Summary: It is a non-portable include as it is include-order sensitive.
      
      Reviewed By: yfeldblum
      
      Differential Revision: D5427885
      
      fbshipit-source-id: 50850064fc8fa3ed6f8fc235f31edbda4144663c
      d63e7a1b
    • Christopher Dykes's avatar
      Switch future's Core<T> to std::is_nothrow_constructible · 61684201
      Christopher Dykes authored
      Summary:
      MSVC has issues with the way it was written, so just use the standard version instead.
      
      Upstream bug report: https://developercommunity.visualstudio.com/content/problem/80433/incorrect-error-c2462-cannot-define-a-type-in-a-ne.html
      
      Reviewed By: yfeldblum
      
      Differential Revision: D5427029
      
      fbshipit-source-id: ae3737175d5b8e9738ed6b9573412d1d566b0e1c
      61684201
    • Christopher Dykes's avatar
      Add an sfmt19937 benchmark (again) · 112ec135
      Christopher Dykes authored
      Summary: `__gnu_cxx::sfmt19937` is 3.5x faster than `std::mt19937` according to the benchmark.
      
      Reviewed By: yfeldblum
      
      Differential Revision: D5410705
      
      fbshipit-source-id: d503544a0b9b1b0c614a27466a297a4e6902fc15
      112ec135
    • Phil Willoughby's avatar
      Re-align LifoSem · 6678c4e6
      Phil Willoughby authored
      Summary:
      Previously it generated a warning if compiled with -Wover-align because its alignment exceeded alignof(std::max_align_t).
      
      This also meant that heap-allocated LifoSem objects were not guaranteed to be on their own cache-line, potentially degrading performance.
      
      This change adds padding before the important part of the LifoSem (to match the existing after-padding) and reduces its alignment requirement.
      
      Reviewed By: yfeldblum
      
      Differential Revision: D5380700
      
      fbshipit-source-id: 7fdd593a58a2e0c7b03df11152ee4bb66f57e717
      6678c4e6
    • Christopher Dykes's avatar
      Fix building the stl_vector tests with -Wshadow-compatible-local · 4203522c
      Christopher Dykes authored
      Summary: It was shadowing locals.
      
      Reviewed By: yfeldblum
      
      Differential Revision: D5422356
      
      fbshipit-source-id: 91da6fcf0b2ea3821394068e9847976e04f43ca9
      4203522c
    • Eli Lindsey's avatar
      replace getnameinfo with inet_ntop in v6 string formatting · a45eee72
      Eli Lindsey authored
      Summary: Some implementations of getnameinfo are triggering reverse DNS lookups despite us specifying NI_NUMERICHOST. Avoid all that by instead producing our string representations of v6 addresses manually via inet_ntop and if_indextoname.
      
      Reviewed By: yangchi
      
      Differential Revision: D5415477
      
      fbshipit-source-id: 67853a85db6517d374d94c8261e56400f4c00fc5
      a45eee72
    • Phil Willoughby's avatar
      Update CachelinePadded · 46a851f4
      Phil Willoughby authored
      Summary:
      The C++ standard doesn't guarantee alignment of things bigger than std::max_align_t which is typically 16 bytes. This means that to ensure something is the only thing on a cache-line we need padding on each side of it to exclude anything else.
      
      CachelinePadded<T> will now be larger than it was before, and reinterpret_cast to/from T is no longer valid.
      
      Reviewed By: yfeldblum
      
      Differential Revision: D5380849
      
      fbshipit-source-id: 20f275c875eb4bede4aef19ac7224913ce9b6d51
      46a851f4
    • Xiangyu Bu's avatar
      Break long lines in SSLContext. · 130d4f66
      Xiangyu Bu authored
      Summary: Break a few long lines in folly::SSLContext.
      
      Reviewed By: yfeldblum
      
      Differential Revision: D5418517
      
      fbshipit-source-id: fc2ac310d1f931a1f8a4af077aa5cde347b1042d
      130d4f66
  4. 13 Jul, 2017 6 commits
    • Christopher Dykes's avatar
      Fix the build of the socket tests on Windows · 7113180a
      Christopher Dykes authored
      Summary: There were references to things that don't exist or have an equivalent on Windows.
      
      Reviewed By: yfeldblum
      
      Differential Revision: D5099802
      
      fbshipit-source-id: 9a5a2d0e5cb3a33ecad00bf8a2e1c13315a015cc
      7113180a
    • Christopher Dykes's avatar
      Add support for closing a TemporaryFile early · 050671f8
      Christopher Dykes authored
      Summary:
      The file itself will still get removed when `TemporaryFile` is destroyed, but closing it before then allows it to be read when on Windows, because `TemporaryFile` opens the temporary file with `O_EXCL`, so Windows denies read access of the file to everything else.
      This is needed to fix one of the AsyncFileWriter tests on Windows.
      
      Reviewed By: simpkins
      
      Differential Revision: D5307719
      
      fbshipit-source-id: bd65962cc3d34f382cc7b0b55dbf2659ed5ebfce
      050671f8
    • Christopher Dykes's avatar
      Force string pooling to workaround a codegen bug · 6ecf60a9
      Christopher Dykes authored
      Summary:
      There are bugs in MSVC's codegen that causes `StringPiece`'s evaluated in a `constexpr` context to have the start pointer point to one copy of the string and the end pointer point to another. Using the `StringPiece` at compile-time is perfectly fine, it just has the wrong values at runtime.
      We can work around this issue by enabling string pooling in all modes.
      
      Original bug report:
      https://developercommunity.visualstudio.com/content/problem/3216/c-incorrect-data-duplication-in-constexpr-context.html
      
      Reviewed By: yfeldblum
      
      Differential Revision: D5409753
      
      fbshipit-source-id: 24e2b343209ba7c86d0dd39a1358d0abe9ee6d4d
      6ecf60a9
    • Ankit Shah's avatar
      Getters and setters for ECDSA_SIG · 4f6e47f9
      Ankit Shah authored
      Summary:
      Added getters and setters for ECDSA_SIG to allow for compatibility
      between OpenSSL 1.1.0 and 1.0.2
      
      Reviewed By: knekritz
      
      Differential Revision: D5408934
      
      fbshipit-source-id: 7a3d9df774728c81270cc4da34c75202018e430d
      4f6e47f9
    • Yedidya Feldblum's avatar
      Sort #include lines · 520e20a8
      Yedidya Feldblum authored
      Summary: [Folly] Sort `#include` lines, as required by `clang-format`.
      
      Reviewed By: igorsugak, Orvid
      
      Differential Revision: D5405153
      
      fbshipit-source-id: 3bb1c2b84271bcf7a195e07680777dbfdd499823
      520e20a8
    • Eli Lindsey's avatar
      Revert D5408572: replace getnameinfo with inet_ntop in v6 string formatting · 4ac665a6
      Eli Lindsey authored
      Summary: This reverts commit 69b0171a9a54738045f9041381aea5512b17eb13
      
      Differential Revision: D5408572
      
      fbshipit-source-id: 3ec8ce96575b632fb134be99cc0d2538a01a7d85
      4ac665a6
  5. 12 Jul, 2017 4 commits
    • Eli Lindsey's avatar
      replace getnameinfo with inet_ntop in v6 string formatting · 0d38f577
      Eli Lindsey authored
      Summary: Some implementations of getnameinfo are triggering reverse DNS lookups despite us specifying NI_NUMERICHOST. Avoid all that by instead producing our string representations of v6 addresses manually via inet_ntop and if_indextoname.
      
      Differential Revision: D5408572
      
      fbshipit-source-id: 69b0171a9a54738045f9041381aea5512b17eb13
      0d38f577
    • Mickey Phoenix's avatar
      Fix documentation for folly's to<double>() method's handling of 'NaN' and unparseable inputs · 604c1b15
      Mickey Phoenix authored
      Summary:
      The documentation for folly::to<double>()'s handling of unparseable inputs (including "") is incorrect.  Additionally, the documentation does not document to<double>()'s handling of the inputs "NaN", "-NaN", "inf", "infinity", "-inf", and "-infinity".
      
      This corrects the documentation.
      
      See https://github.com/facebook/folly/blob/3272dfdbe243e0ac02acca1dd82bc391d1da079a/folly/docs/Conv.md under the heading "Parsing floating-point types" for the incorrect documentation as rendered.
      
      Reviewed By: yfeldblum
      
      Differential Revision: D5367656
      
      fbshipit-source-id: 22b38e2bb85d2e647975798360ead39eed6caae8
      604c1b15
    • Tom Jackson's avatar
      Don't use range construction for associative containers in convertTo() · 96a65f54
      Tom Jackson authored
      Summary: This avoids having exceptions occur while constructing hashtables.
      
      Reviewed By: ot, yfeldblum
      
      Differential Revision: D5384419
      
      fbshipit-source-id: ba2de8cffa46df550bdc62abbe529801249e45cd
      96a65f54
    • Phil Willoughby's avatar
      Improve launder · fccb5ab6
      Phil Willoughby authored
      Summary:
      Should now work on GCC-compatible compilers, and all other compilers which don't attempt any inter-TU optimizations.
      
      Moved out of Utility.h because it now requires a supporting .cpp file and some clients presume that Utility.h can be used header-only.
      
      Reviewed By: ot
      
      Differential Revision: D5381042
      
      fbshipit-source-id: 7e954fed47de4386c85d46a61d56a8fe7fc516f4
      fccb5ab6
  6. 11 Jul, 2017 8 commits
    • Christopher Dykes's avatar
      Revert D5393697: [Folly] Add an sfmt19937 benchmark · dcb41c96
      Christopher Dykes authored
      Summary: This reverts commit bc725838dc7f62d030c7e68bc6d229042df2b46c
      
      Differential Revision: D5393697
      
      fbshipit-source-id: 4b9ef1e733b0ad73e6deea7ac8a52dfe785b4f2b
      dcb41c96
    • Benjamin Renard's avatar
      add helper method to generate same crc32 results as php and boost::crc_32_type · 13feee4b
      Benjamin Renard authored
      Summary:
      This revision adds a helper method in folly/Checksum.h, that returns the same crc32 value as php's built-in implementationa and boost::crc_32_type.
      
      folly's default implementation only differs from the final xor (with 0xFFFFFFFF for boost and php, 0 for folly), which is added here.
      
      Reviewed By: djwatson
      
      Differential Revision: D5396671
      
      fbshipit-source-id: 14874af2d5a80408c772875142de6e340ce01038
      13feee4b
    • Christopher Dykes's avatar
      Add an sfmt19937 benchmark · 4169222e
      Christopher Dykes authored
      Summary: `__gnu_cxx::sfmt19937` is 3.5x faster than `std::mt19937` according to the benchmark.
      
      Reviewed By: yfeldblum
      
      Differential Revision: D5393697
      
      fbshipit-source-id: bc725838dc7f62d030c7e68bc6d229042df2b46c
      4169222e
    • Peter DeLong's avatar
      Allow fiber to be called on both type Fiber and Fiber* · 3f97ccef
      Peter DeLong authored
      Summary: The fiber command can now be run on a value of type folly::fibers::Fiber or a value of type folly::fibers::Fiber*
      
      Reviewed By: andriigrynenko
      
      Differential Revision: D5393491
      
      fbshipit-source-id: 1f48e08288f75c59852c939062db616eb06cea73
      3f97ccef
    • Giuseppe Ottaviano's avatar
      Use Baton (again) in EventBase::runInEventBaseThreadAndWait · 6e904443
      Giuseppe Ottaviano authored
      Summary:
      `Baton` is more lightweight than a mutex+condition variable, and the code is much simpler. This was actually the original implementation, but the dependency had to be dropped because `Baton` was unsupported on some architectures. That is not a problem anymore.
      
      Also reorganize the includes to follow the conventions.
      
      Reviewed By: andriigrynenko, yfeldblum
      
      Differential Revision: D5396631
      
      fbshipit-source-id: d782cf271eb35723aaeb3c372e1c1dafeaaf0f0a
      6e904443
    • Xiangyu Bu's avatar
      Update providedCiphersStr_ in one place. · 9d23df15
      Xiangyu Bu authored
      Summary:
      The function `setCipherList` seems to forget to update the data member
      `providedCipherString_`. This diff updates `providedCiphersString_` at
      a single place `setCiphersOrThrow()`, and adds two test cases to make
      sure the derived `SSL*` uses the desired set of ciphers.
      
      Reviewed By: yfeldblum
      
      Differential Revision: D5372758
      
      fbshipit-source-id: 8144ab3bc518b2b9fa8090af62f3bd6475bbbece
      9d23df15
    • Yedidya Feldblum's avatar
      Compute masks in IPAddressV6 · 9b6eade1
      Yedidya Feldblum authored
      Summary:
      [Folly] Compute masks in `IPAddressV6`.
      
      At runtime, instead of storing a 2Kb masks array in the binary.
      
      Reviewed By: WillerZ, ot
      
      Differential Revision: D5369901
      
      fbshipit-source-id: 031a4eeda1670021236d8ab97f6e85e753675ae5
      9b6eade1
    • Peter DeLong's avatar
      Add function to folly_fibers.py to get the address of a specific fiber from a fiberManager · d6f902fb
      Peter DeLong authored
      Summary: Add a fiber_address(fiberManager, index) function so that you can programatically get the address of a given fiber in a fiberManager
      
      Reviewed By: andriigrynenko
      
      Differential Revision: D5377605
      
      fbshipit-source-id: b9504f7d253e8f702e9329c6f08ff406d4296a6e
      d6f902fb
  7. 10 Jul, 2017 2 commits
  8. 09 Jul, 2017 1 commit
    • Yedidya Feldblum's avatar
      In-place construction for Future · e8527d2e
      Yedidya Feldblum authored
      Summary:
      [Folly] In-place construction for `Future`.
      
      Using `in_place` as the first argument. Avoid constructing a contained object and then moving it into the `Future`, which may be more expensive, by providing an unambiguous way to specify perfect forwarding.
      
      And a matching overload of `makeFuture` for no particularly good reason.
      
      Differential Revision: D5362324
      
      fbshipit-source-id: e612965f34ed0fae5fac17db631f7eab9984c696
      e8527d2e
  9. 08 Jul, 2017 1 commit
  10. 07 Jul, 2017 3 commits
    • Eric Niebler's avatar
      make FunctionRef constexpr on compilers that support it · 81c9d2a6
      Eric Niebler authored
      Summary:
      `constexpr` All The Things! Although only very recent versions of modern compilers support this, FunctionRef can and should be `constexpr` (demonstration here: https://godbolt.org/g/NJ72RG).
      
      This change also changes the `FunctionRef` constructor such that it no longer participates in overload resolution if the argument is not callable with the specified arguments. In addition, it perfectly forwards the callable object such that if it was an rvalue when it was passed to the constructor, it will be invoked as an rvalue in `operator()`.
      
      Reviewed By: yfeldblum
      
      Differential Revision: D5366720
      
      fbshipit-source-id: bc64053213478aab5a5bd5950c7b2d6f364d86bd
      81c9d2a6
    • Jiahao Li's avatar
      Adds `make_mock` to `folly::LeakySingleton`. · 7f15a179
      Jiahao Li authored
      Summary:
      Provides a `make_mock` interface to `folly::LeakySingleton` for unit test
      mocking.
      
      Reviewed By: andriigrynenko
      
      Differential Revision: D5382003
      
      fbshipit-source-id: 9ab81dd64703f4f02772bfb8c85e020680abcc85
      7f15a179
    • Christopher Dykes's avatar
      Determine noexcept'ness of folly::Optional with std::is_nothrow_constructible · f0dfe0f6
      Christopher Dykes authored
      Summary: Because MSVC is not happy about how it's written now.
      
      Reviewed By: yfeldblum
      
      Differential Revision: D5378740
      
      fbshipit-source-id: 8b77d1a05da75b331e0cb72bd0ad859b89e54b36
      f0dfe0f6
  11. 06 Jul, 2017 2 commits
    • Christopher Dykes's avatar
      Define OPENSSL_NO_SSL2 under OpenSSL 1.1.0 · 9c5c5801
      Christopher Dykes authored
      Summary: OpenSSL 1.1.0 drops support for SSLv2, and in doing so also removes the define that user-code used to guard on whether SSLv2 was supported. This adds the define to the portability header to indicate SSLv2 is not supported.
      
      Reviewed By: anirudhvr
      
      Differential Revision: D5376869
      
      fbshipit-source-id: 04708db138dc13e7747cfff582f4cfed291648b3
      9c5c5801
    • Phil Willoughby's avatar
      launder · 1eee8628
      Phil Willoughby authored
      Summary: Backport C++17's `std::launder`.
      
      Reviewed By: yfeldblum, ot
      
      Differential Revision: D5370531
      
      fbshipit-source-id: b7cc6701d082b6c4855fa77bb644e151ce882deb
      1eee8628
  12. 05 Jul, 2017 2 commits
    • Adam Simpkins's avatar
      fix double comparison in histogram test · 737be952
      Adam Simpkins authored
      Summary:
      The TestDoubleWidthTooBig test was performing an exact equality check on
      two double values. This equality check fails when run on 32-bit
      platforms.
      
      Replace the EXPECT_EQ() check with EXPECT_NEAR(), and simply check that
      the two values do not differ by more than 1e-14.
      
      Reviewed By: Orvid
      
      Differential Revision: D652767
      
      fbshipit-source-id: 7bf7ed560a4180a2e2d07a6050d1df18e18d1eea
      737be952
    • Adam Simpkins's avatar
      logging: fix compiler compatibility for one more constexpr function · 7b116ffe
      Adam Simpkins authored
      Summary:
      Update LogLevel's operator+() to consist only of a single return statement.
      This is required for pre-C++14 compiler support.
      
      Reviewed By: yfeldblum
      
      Differential Revision: D5368256
      
      fbshipit-source-id: 9ecbcde5edd1d0b3e7580d6263ad926e44908219
      7b116ffe