1. 03 Jul, 2017 3 commits
    • 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
  2. 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
  3. 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
  4. 30 Jun, 2017 8 commits
  5. 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
  6. 28 Jun, 2017 4 commits
  7. 27 Jun, 2017 4 commits
    • Yedidya Feldblum's avatar
      Fixes for Try::withException · 258585ef
      Yedidya Feldblum authored
      Summary:
      [Folly] Fixes for `Try::withException`.
      
      * Fix the overload with the exception type specified so that the specified exception type is checked. A mismatch between the specified exception type and the parameter type of the passed invokable will result in the expected compiler error.
      * Add an overload where the exception type is deduced intentionally, as opposed to accidentally.
      
      Of course, these simply forward to their corresponding `exception_wrapper::withException` overloads.
      
      Reviewed By: ericniebler
      
      Differential Revision: D5216691
      
      fbshipit-source-id: 7e85c906c3aa17dfede6e0980c6ac8bf75034073
      258585ef
    • Dave Watson's avatar
      Move folly/experimental/AtomicSharedPtr.h -> folly/concurrency/AtomicSharedPtr.h · b3ab0cc4
      Dave Watson authored
      Summary: As title.
      
      Reviewed By: WillerZ, yfeldblum, ivmaykov
      
      Differential Revision: D5312308
      
      fbshipit-source-id: 91ad4bb39df0619f2885e13c1fda1e018292a40e
      b3ab0cc4
    • Adam Simpkins's avatar
      allow AsyncSignalHandler to attach and detach from an EventBase · dc1c3dcc
      Adam Simpkins authored
      Summary:
      Add attachEventBase() and detachEventBase() methods to AsyncSignalHandler,
      similar to the methods of AsyncSocket.
      
      The main benefit of this is that it allows creating an AsyncSignalHandler with
      an initially null EventBase, and then attaching it to an EventBase at some
      later point in time.
      
      Reviewed By: yfeldblum
      
      Differential Revision: D5315325
      
      fbshipit-source-id: 8a4ca483a62ca86837ea0bb54fa9a70d59f2f04e
      dc1c3dcc
    • Adam Simpkins's avatar
      make io::Cursor::push() safe to call with an empty ByteRange · 46c5dbce
      Adam Simpkins authored
      Summary:
      Clang's UndefinedBehaviorSanitizer flagged an issue that pushAtMost() could
      call `memcpy(dest, nullptr, 0)` if the input was an empty `ByteRange`.  A
      default constructed `ByteRange` (or `StringPiece`) will be empty and both its
      begin and end pointers will be null.  Unfortunately it is undefined behavior to
      call `memcpy()` with a null source pointer even if the length is 0.
      
      This updates the `Cursor` and `Appender` code to avoid calling `memcpy()` at
      all when the input length is 0.
      
      Reviewed By: yfeldblum
      
      Differential Revision: D5322917
      
      fbshipit-source-id: 67fce9579f97e7e93a5767b11cc5e43ff7be5876
      46c5dbce
  8. 26 Jun, 2017 8 commits
    • Giuseppe Ottaviano's avatar
      Improve Format's handling of temporaries · 2734e379
      Giuseppe Ottaviano authored
      Summary:
      `FormatValue` holds non-integral objects by reference, which
      can cause subtle problems if a formatter is constructed with temporary
      arguments and used beyond the expression that constructs it.
      
      With this diff the arguments are perfectly forwarded into a tuple, so
      the formatter will take ownership of the temporaries while holding
      references to lvalues as before.
      
      The only downside is that now `FormatValue` objects are constructed
      every time the formatter is used, rather than only at formatter
      construction. This should not be noticeable as those objects'
      constructors should just take a reference to the argument.
      
      Note that the format string is still held by reference, but this is
      fine because it should almost always be a string literal.
      
      Reviewed By: ericniebler
      
      Differential Revision: D5317382
      
      fbshipit-source-id: ef8355194b634d3751ef1ccca32dd1db29e27c48
      2734e379
    • Christopher Dykes's avatar
      Support marking a file-descriptor as blocking via fcntl · a198e715
      Christopher Dykes authored
      Summary: Previously, only marking it as non-blocking was supported.
      
      Reviewed By: simpkins
      
      Differential Revision: D5307769
      
      fbshipit-source-id: 03ed7c35632dbc9551552b21c401ea709bd6eaaa
      a198e715
    • Marie Bremner's avatar
      Edited folly synchronized doc because one of the functions was incorrect · 70918928
      Marie Bremner authored
      Summary: Edited the example function for withWLock
      
      Reviewed By: simpkins
      
      Differential Revision: D5322000
      
      fbshipit-source-id: 6d95b173087dec33cfdc0d0cee9c605cdf4e2593
      70918928
    • Yedidya Feldblum's avatar
      Let make_exception_wrapper construct on-heap objects in-place · c9afb47c
      Yedidya Feldblum authored
      Summary:
      [Folly] Let `make_exception_wrapper` construct on-heap objects in-place.
      
      Currently, it constructs on-heap objects on the stack and then move-constructs them into on-heap storage.
      
      Reviewed By: ericniebler
      
      Differential Revision: D5315104
      
      fbshipit-source-id: cc0493e7d98aacadd342eb56601028ced4a19bb3
      c9afb47c
    • Bi Xue's avatar
      Fix SharedPromise::isFulfilled doesn't get back correct value when it's... · 6cf4cd30
      Bi Xue authored
      Fix SharedPromise::isFulfilled doesn't get back correct value when it's running in a different thread of SharedPromise::setValue
      
      Summary: The implementation of `SharedPromise::isFulfilled` return `hasValue_` directly without taking a lock. `isFulfilled` can be accessed concurrently, but `hasValue_` is not synchronized. Adding a lock fix the issue.
      
      Reviewed By: yfeldblum
      
      Differential Revision: D5319030
      
      fbshipit-source-id: a94b12ed277aa64254680ae84cb18946226cceea
      6cf4cd30
    • Christopher Dykes's avatar
      Resolve the circular dependency between ThreadLocalDetail and ThreadLocal · c5184205
      Christopher Dykes authored
      Summary: There was a circular dependency between the `detail/ThreadLocalDetail.(cpp|h)` files and `ThreadLocal.(cpp|h)`, this resolves that circular dependency by moving a couple of declarations into the detail file.
      
      Reviewed By: yfeldblum
      
      Differential Revision: D5318875
      
      fbshipit-source-id: 61de7c4b3ffa30f9eb11bd97e0493e9de12c5804
      c5184205
    • Christopher Dykes's avatar
      Revert D5312574: [folly] Fix up and namespace clock_gettime and clock_getres for MacOS · 5de2b282
      Christopher Dykes authored
      Summary: This reverts commit f16634ce92ee6c299613d3db22f0537bd31ac14d
      
      Differential Revision: D5312574
      
      fbshipit-source-id: 1557ac17f79fb8e3530a09d69fa978ddd38e5093
      5de2b282
    • Phil Willoughby's avatar
      Improve efficiency of trivial toDelim calls · 2e7df7eb
      Phil Willoughby authored
      Summary:
      `toDelim` with a single parameter of the same type as the target type was
      previously copy-constructing its result. It will now construct it with perfect
      forwarding which is more efficient if the input is a temporary.
      
      This brings `toDelim` into line with the similar implementations of `to` and
      `tryTo`
      
      Reviewed By: yfeldblum
      
      Differential Revision: D5301427
      
      fbshipit-source-id: 843a2d93384de88cce42f26da6562a1a6ed0dc9c
      2e7df7eb
  9. 25 Jun, 2017 1 commit
    • Christopher Dykes's avatar
      Explicitly specify that timezone is a struct · cf8a8e02
      Christopher Dykes authored
      Summary: In the parameter declarations for the `gettimeofday` portability header implementation. More details on exactly why can be found in the newly added comment on the function.
      
      Reviewed By: yfeldblum
      
      Differential Revision: D5281301
      
      fbshipit-source-id: 1b246adc7743b5470201e452c008418429f7f142
      cf8a8e02