1. 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
  2. 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
  3. 05 Jul, 2017 4 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
    • Yedidya Feldblum's avatar
      Promise<T>::makeEmpty() and Future<T>::makeEmpty() · fbeb95ac
      Yedidya Feldblum authored
      Summary:
      [Folly] `Promise<T>::makeEmpty()` and `Future<T>::makeEmpty()`.
      
      These can currently be done by creating, and then moving away from, regular promises and futures. But that allocates; this is semantically equivalent but more efficient.
      
      Differential Revision: D5368339
      
      fbshipit-source-id: de054cfc75c701c5d39aac64d9a2949cd34b1896
      fbeb95ac
    • Jim Meyering's avatar
      folly/futures/detail/Core.h: avoid FP from clang's -Wconditional-uninitialized · 70f35fe3
      Jim Meyering authored
      Summary:
      Avoid this false positive from clang:
      
        folly/futures/detail/Core.h:369:15: error: variable 'priority' may be uninitialized when used here [-Werror,-Wconditional-uninitialized]
      
      Reviewed By: yfeldblum
      
      Differential Revision: D5369916
      
      fbshipit-source-id: 49649417d1b799cc3945cba456b42ab438ad2ddc
      70f35fe3
  4. 04 Jul, 2017 6 commits
    • Yedidya Feldblum's avatar
      Apply clang-format to folly/stats/ · 344f49c4
      Yedidya Feldblum authored
      Summary: [Folly] Apply clang-format to `folly/stats/`.
      
      Reviewed By: Orvid
      
      Differential Revision: D5366745
      
      fbshipit-source-id: 3b7419d4ab4c6203693603722cd8e707741d3953
      344f49c4
    • Yedidya Feldblum's avatar
      Apply clang-format to folly/ssl/ · 1fd03592
      Yedidya Feldblum authored
      Summary: [Folly] Apply `clang-format` to `folly/ssl/`.
      
      Reviewed By: Orvid
      
      Differential Revision: D5366760
      
      fbshipit-source-id: ad4ec0570050f80d69c78626906e18b5892a999f
      1fd03592
    • Yedidya Feldblum's avatar
      Apply clang-format to folly/concurrency/ · d34ef77f
      Yedidya Feldblum authored
      Summary: [Folly] Apply `clang-format` to `folly/concurrency/`.
      
      Reviewed By: Orvid
      
      Differential Revision: D5366946
      
      fbshipit-source-id: 2c9de7c4d8534e02c367fd235fb1ea943ba0539e
      d34ef77f
    • Yedidya Feldblum's avatar
      Extract the namespace choice in FBString.h · a60fee27
      Yedidya Feldblum authored
      Summary:
      [Folly] Extract the namespace choice in `FBString.h`.
      
      The funny `namespace` bits confuse `clang-format`, so let us remove the confusion.
      
      Reviewed By: ot, Orvid
      
      Differential Revision: D5367299
      
      fbshipit-source-id: efca65fecc70076829c14e31a835bc91f3efb4a4
      a60fee27
    • Yedidya Feldblum's avatar
      Apply clang-format to folly/io/ (namespace) · 94f59e26
      Yedidya Feldblum authored
      Summary: [Folly] Apply `clang-format` to `folly/io/` (namespace).
      
      Reviewed By: Orvid, terrelln
      
      Differential Revision: D5366477
      
      fbshipit-source-id: b4efcdc66c62885f5574b2940e5138590710deae
      94f59e26
    • Christopher Dykes's avatar
      Fix tests in CMake build · 4b5711db
      Christopher Dykes authored
      Summary: The fix for this didn't get made before the commit landed.
      
      Reviewed By: yfeldblum
      
      Differential Revision: D5367593
      
      fbshipit-source-id: 4ed9c781121d1b23db11d75d0f8d017d1d8663d9
      4b5711db
  5. 03 Jul, 2017 5 commits
    • Christopher Dykes's avatar
      Fix build of SysUio portability header · 7afad293
      Christopher Dykes authored
      Summary: When I moved the change internally, I failed to add the `#include` that was required :(
      
      Reviewed By: yfeldblum
      
      Differential Revision: D5366037
      
      fbshipit-source-id: 7ddf8fc0b7a0468d0831e886d8025c1893f7f8ae
      7afad293
    • Eric Niebler's avatar
      constexpr the Unit comparison ops · c6f344a9
      Eric Niebler authored
      Summary: `constexpr` All The Things!
      
      Reviewed By: Orvid
      
      Differential Revision: D5364910
      
      fbshipit-source-id: 11abeb8adc38aef3ac4f2596ecf0f533b9e74203
      c6f344a9
    • Yedidya Feldblum's avatar
      For futures::retrying, detect policy type using std::result_of · e81cc5a0
      Yedidya Feldblum authored
      Summary:
      [Folly] For `futures::retrying`, detect policy type using `std::result_of`.
      
      `FOLLY_CREATE_HAS_MEMBER_FN_TRAITS` does not work in all cases. For example, it does not work with inherited members.
      
      And it is not really what we want, anyway, which is to dispatch based on the result type of invoking the policy with a particular set of arguments. We can do that more directly using `std::result_of`. And if we did not have `std::result_of`, then we could do that with SFINAE directly.
      
      Reviewed By: WillerZ
      
      Differential Revision: D5361808
      
      fbshipit-source-id: 23f969dfd6dbaaa944dc2288e70c3ea11d3398f0
      e81cc5a0
    • Phil Willoughby's avatar
      Content-conversion constructors for Future · 8bedb7e1
      Phil Willoughby authored
      Summary:
      Allows you to construct a `Future<A>` from a `Future<B>` if A can be constructed from `B&&`.
      
      The constructor is `implicit` if and only if `B&&` is convertible to `A`.
      
      This is the same philosophy as Optional, and has the same use-cases.
      
      Reviewed By: yfeldblum
      
      Differential Revision: D5264185
      
      fbshipit-source-id: e2fae373ab549c186a69dc5f4e32481ef7b11bba
      8bedb7e1
    • Christopher Dykes's avatar
      Replace folly::asm_pause with folly::asm_volatile_pause · dedaae98
      Christopher Dykes authored
      Summary: There is no difference, as the statements are already implicitly volatile.
      
      Reviewed By: yfeldblum
      
      Differential Revision: D5363491
      
      fbshipit-source-id: ab5bb878f5ca72aa0de96f82e345213729c071e2
      dedaae98
  6. 02 Jul, 2017 6 commits
    • Yedidya Feldblum's avatar
      In-place construction for Try · 8b7d44fb
      Yedidya Feldblum authored
      Summary:
      [Folly] In-place construction for `Try`.
      
      Using `in_place` as the first argumenbt. Avoid move operations.
      
      Reviewed By: Orvid
      
      Differential Revision: D5362568
      
      fbshipit-source-id: 5c2aaf5dba1253c59e384940add411f0f2b570b2
      8b7d44fb
    • Yedidya Feldblum's avatar
      In-place construction for Optional · a695397e
      Yedidya Feldblum authored
      Summary:
      [Folly] In-place construction for `Optional`.
      
      Using `in_place` as the first argument. Avoid move operations.
      
      Reviewed By: Orvid, ot
      
      Differential Revision: D5362563
      
      fbshipit-source-id: 771db2556842d5dec35d1bf2ad6c23358a417d54
      a695397e
    • Yedidya Feldblum's avatar
      Move in_place and friends to Utility.h · 8f8a5e47
      Yedidya Feldblum authored
      Summary:
      [Folly] Move `in_place` and friends to `Utility.h`.
      
      Document that they are backports from C++17.
      
      Reviewed By: Orvid
      
      Differential Revision: D5362364
      
      fbshipit-source-id: 495cb7f339fc558f20d89100c141fc7a243239d5
      8f8a5e47
    • Yedidya Feldblum's avatar
      Remove construct_in_place · 6b73d5f5
      Yedidya Feldblum authored
      Summary:
      [Folly] Remove `construct_in_place`.
      
      It is an alias for `in_place`, and unnecessary.
      
      Reviewed By: Orvid
      
      Differential Revision: D5362354
      
      fbshipit-source-id: 39ce07bad87185e506fe7d780789b78060008182
      6b73d5f5
    • Yedidya Feldblum's avatar
      Disambiguate the various in_place overloads, following C++17 · 10fb4bb8
      Yedidya Feldblum authored
      Summary:
      [Folly] Disambiguate the various `in_place` overloads, following C++17.
      
      Forwarding `folly::in_place` is ambiguous because there are multiple overloads and we depend on deduction to choose the correct overload. For example:
      
      ```lang=c++
      enum struct Err {};
      Expected<Expected<int, Err>, Err> val(in_place, in_place, 3); // fails to compile
      ```
      
      So we must disambiguate the three overloads: the default, the typed, and the indexed.
      
      C++17 defines `std::in_place`, `std::in_place_type<typename>`, and `std::in_place_index<std::size_t>`. Let us mimic that exactly, so that it becomes trivial to swap out our implementations for the standard implementations once we jump to C++17.
      
      Reviewed By: Orvid
      
      Differential Revision: D5362339
      
      fbshipit-source-id: d4012b01796390e74d8c14cdf68af70102608039
      10fb4bb8
    • Christopher Dykes's avatar
      Don't attempt to lock the file descriptor in readv/writev if it's a socket · edf661e6
      Christopher Dykes authored
      Summary:
      There is no way to lock a socket on Windows, so these calls will always fail. Just don't do the lock on Windows.
      To do it properly with sockets, this should probably be forwarding to `sendmsg`/`recvmsg`, but this is good enough for now.
      
      Reviewed By: simpkins
      
      Differential Revision: D5307901
      
      fbshipit-source-id: 9855274e932a3e2ec3cacae10363200187e0c01b
      edf661e6
  7. 01 Jul, 2017 2 commits
    • Christopher Dykes's avatar
      Enable a missing test in the CMake build · a4b80604
      Christopher Dykes authored
      Summary: This also silences a few warnings in the stl vector tests.
      
      Reviewed By: yfeldblum
      
      Differential Revision: D5350383
      
      fbshipit-source-id: 84df2a7dbfbb23ebb3f15a09f0cb58080b3e06d6
      a4b80604
    • Nate Stedman's avatar
      Fix undefined warning errors · b8ac5f35
      Nate Stedman authored
      Summary: Xcode 9 is throwing errors because `-Wshadow-local` and `-Wshadow-compatible-local` are undefined in Clang.
      
      Reviewed By: Orvid
      
      Differential Revision: D5356476
      
      fbshipit-source-id: 4cc9f48f796f66decb4beaa66d3e66f486449c19
      b8ac5f35
  8. 30 Jun, 2017 8 commits
  9. 29 Jun, 2017 4 commits
    • Adam Simpkins's avatar
      logging: support building with gcc-4.9 · 22471d8d
      Adam Simpkins authored
      Summary:
      Versions of gcc prior to 5.x only support C++11 constexpr functions, and
      require that they consist of only a single return statement.
      
      This updates isLogLevelFatal() to meet those requirements so that it can still
      be compiled with gcc 4.9.
      
      Reviewed By: ikobzar
      
      Differential Revision: D5350304
      
      fbshipit-source-id: 2a9c256236c484f8c3d5f83690fde8b7333aa4fc
      22471d8d
    • Ankit Shah's avatar
      Removing memory leaks in rsa setter test · 4f8bbf57
      Ankit Shah authored
      Summary:
      Using RSA free and removing unnecessary Bignum allocations to prevent
      test failures due to memory leaks
      
      Reviewed By: anirudhvr
      
      Differential Revision: D5348232
      
      fbshipit-source-id: 7c76f3dced26a3080fc82b4bacc06bc0768d6fda
      4f8bbf57
    • Maged Michael's avatar
      Hazard pointers: Add support for thread local lists of retired objects and other optimizations · 0f5638fe
      Maged Michael authored
      Summary:
      - Add support for private lists of retired objects
      - Add an option for one domain
      - More scalable thread cache managemnt
      - hazptr_rec alignment
      - FOLLY_ALWAYS_INLINE
      - Refactor management of retired objects in hazptr_domain
      - Refactor benchmarks
      
      Reviewed By: davidtgoldblatt
      
      Differential Revision: D5322646
      
      fbshipit-source-id: 9d31582b9a8216861e7e78e2e1cd08dc11cf7f88
      0f5638fe
    • Andrew Krieger's avatar
      Remove dependency on Conv.h from FileUtil.h · ffc409c4
      Andrew Krieger authored
      Summary: So we can use writeFile in projects which compile with -fno-rtti
      
      Reviewed By: mzlee
      
      Differential Revision: D5341469
      
      fbshipit-source-id: bb77baf9576604ff862d54d59bf382862bd0dd58
      ffc409c4