1. 28 Jun, 2018 2 commits
    • Yedidya Feldblum's avatar
      Refactor apply-invoke traits · 23bb52a4
      Yedidya Feldblum authored
      Summary:
      [Folly] Refactor apply-invoke traits. Can make them smaller by extracting a common denominator and then falling back on the base invoke traits.
      
      Also fixes the build for MSVC2015.
      
      Reviewed By: aary
      
      Differential Revision: D8676590
      
      fbshipit-source-id: f59c7014d3294f3b0978c2fd027cf3a87411f639
      23bb52a4
    • Jon Maltiel Swenson's avatar
      Handle EINVAL errno in MemoryIdler::unmapUnusedStack() · 20d52e14
      Jon Maltiel Swenson authored
      Summary:
      If `MemoryIdler` is used with threads that are backed by huge pages, the
      `madvise(..., MADV_DONTNEED)` calls will fail with an `EINVAL`. Prior to this
      diff, this would lead to an assertion failure. Now, if `EINVAL` is returned, we
      warn the user, as `MemoryIdler` may not be able to function as expected.
      
      Reviewed By: yfeldblum
      
      Differential Revision: D8669399
      
      fbshipit-source-id: f97ea7549deffdbf283b3516b9e8feafe18a036c
      20d52e14
  2. 27 Jun, 2018 12 commits
    • Yedidya Feldblum's avatar
      Simpler free-invoke traits · aeeb73ac
      Yedidya Feldblum authored
      Summary: [Folly] Simpler free-invoke traits. Only supports one namespace housing a base definition. For the typical case of `swap`, with a base definition in `namespace std`, this works.
      
      Reviewed By: aary
      
      Differential Revision: D8666221
      
      fbshipit-source-id: abfd302e430ad7151c119e98a706201265d302d3
      aeeb73ac
    • Dan Melnic's avatar
      Make the pthread key a singleton · a65e66ab
      Dan Melnic authored
      Summary: Make the pthread key a singleton
      
      Reviewed By: yfeldblum
      
      Differential Revision: D8663589
      
      fbshipit-source-id: 1e0c328104bd8c3d3c689dc4955a185336e74276
      a65e66ab
    • Phil Willoughby's avatar
      don't throw in noexcept function · 1e274dc6
      Phil Willoughby authored
      Summary:
      `throw` within a `noexcept` function triggers a compiler warning on the latest clang in C++17 mode.
      
      As the behavior of uncaught `throw` within a `noexcept` context is to terminate the program, do so explicitly.
      
      Reviewed By: yfeldblum
      
      Differential Revision: D8651221
      
      fbshipit-source-id: 004c4c132ad9b5b873a92cf2710b9d1ebe4e705b
      1e274dc6
    • Aaryaman Sagar's avatar
      Cut LockedGuardPtr and its variants · 78cd0ec8
      Aaryaman Sagar authored
      Summary:
      The compiler will likely remove the branch on destruction because
      it's never used
      
      Reviewed By: yfeldblum
      
      Differential Revision: D8651868
      
      fbshipit-source-id: ef16b9d11569f72aa0fa89cb6aa2450a58d783e7
      78cd0ec8
    • Nathan Bronson's avatar
      fix elision of iter advance in F14 erase with unused return value · 4029908d
      Nathan Bronson authored
      Summary:
      D8395569 added a prefetch instruction as part of iterator advance
      for F14Value and F14Node maps.  This caused the work to advance the
      iterator returned by erase to no longer be recognized as dead code by the
      GCC optimizer.  This diff separates out advance() and advanceLikelyDead()
      methods, avoiding prefetch in the latter case.
      
      Reviewed By: shixiao
      
      Differential Revision: D8656038
      
      fbshipit-source-id: 86cecf40e8622f815d34a98709b90d6ef73dd618
      4029908d
    • Nathan Bronson's avatar
      handle allocators with only explicit rebinding constructor · a99ccb8b
      Nathan Bronson authored
      Summary:
      D8586283 added an implicit conversion from allocator_type to a
      uint8_t-rebound allocator, but allocators might provide only an explicit
      rebinding constructor.  This diff makes F14 use the explicit form.
      It also adds a binary that when debugged (in a buck build environment)
      is useful for evaluating code size.
      
      Reviewed By: shixiao
      
      Differential Revision: D8655289
      
      fbshipit-source-id: c977edb041ce2056f3ce23c52a7f8464a6b9f1bd
      a99ccb8b
    • Andrew Gallagher's avatar
      folly: fix some missing standard library includes · 91a001f0
      Andrew Gallagher authored
      Reviewed By: igorsugak
      
      Differential Revision: D8653359
      
      fbshipit-source-id: 5bb33792aa96a0ed7f88a672100955f366c568da
      91a001f0
    • Yedidya Feldblum's avatar
      Free function invoke traits · 8bb0e678
      Yedidya Feldblum authored
      Summary: [Folly] Free function invoke traits.
      
      Reviewed By: andriigrynenko
      
      Differential Revision: D8632204
      
      fbshipit-source-id: 1f5f6e31072ef3a711edab02b6b7bbad8c894a95
      8bb0e678
    • Yedidya Feldblum's avatar
      Tweaks to member-invoke traits · ae87e1d0
      Yedidya Feldblum authored
      Summary:
      [Folly] Tweaks to member-invoke traits.
      * `const`.
      * No need to delegate to `invoke`.
      
      Reviewed By: aary
      
      Differential Revision: D8632393
      
      fbshipit-source-id: 08ae3bc6e3ede3766ec646a5d2588996ff734538
      ae87e1d0
    • Maged Michael's avatar
      hazptr: Disable detection of frequent calls to hazptr_tc::fill · aacb17f6
      Maged Michael authored
      Summary: To avoid affecting existing use cases that were caught by the check.
      
      Reviewed By: itomatik
      
      Differential Revision: D8657069
      
      fbshipit-source-id: 55a54022c5d5bc4a5d332270df7f2fa9a9b5e05e
      aacb17f6
    • Maged Michael's avatar
      hazptr: Increase the thread cache capacity to 9 hazard pointers · 252e7237
      Maged Michael authored
      Summary: To accommodate a use case.
      
      Reviewed By: itomatik
      
      Differential Revision: D8656154
      
      fbshipit-source-id: 9d2961d7921bdd399fc8c46820d1ba3aa5006c6f
      252e7237
    • Anton Likhtarov's avatar
      Initial support for user-defined types · 4b5d7fec
      Anton Likhtarov authored
      Summary:
      The type must provide a StringPiece constructor or be convertible
      via `folly::to<UserDefinedType>(string)`; toAppend() must also be defined for
      the reverse construction.
      
      Differential Revision: D8586230
      
      fbshipit-source-id: 80159bc1cc9d32f0ae40af8f053387f341bea835
      4b5d7fec
  3. 26 Jun, 2018 12 commits
    • Dan Melnic's avatar
      Use FOLLY_EXPORT for StaticMetaBase::getThreadEntryList() · c2040e01
      Dan Melnic authored
      Summary: Use FOLLY_EXPORT for StaticMetaBase::getThreadEntryList()
      
      Reviewed By: yfeldblum
      
      Differential Revision: D8640044
      
      fbshipit-source-id: 0907af4b091681a986ac2b0e963bc1c5258dd5c1
      c2040e01
    • Aaryaman Sagar's avatar
      Add analogue of invoke_ family of traits for apply() · 39e1a6e9
      Aaryaman Sagar authored
      Summary:
      Similar to the invoke family of traits
      https://en.cppreference.com/w/cpp/types/is_invocable, this introduces the same
      for the case where arguments are wrapped in a tuple
      
      Reviewed By: yfeldblum
      
      Differential Revision: D8626830
      
      fbshipit-source-id: 145eb71c7bb142ff07ebad716572b5e8340d2c9c
      39e1a6e9
    • Maged Michael's avatar
      hazptr: Detect frequent calls to hazptr_tc::fill · a71bd7f2
      Maged Michael authored
      Summary: Detect frequent calls to hazptr_tc::fill. This is usually indicative of unnecessary overhead, either due to insufficient thread cache capacity for legitimate use cases, or due to unnecessary allocation of extra hazard pointers in user code.
      
      Reviewed By: yfeldblum
      
      Differential Revision: D8606484
      
      fbshipit-source-id: e75223f8bc3e180a1ee651ee2989522d6b0a89df
      a71bd7f2
    • Aaryaman Sagar's avatar
      index_sequence_for_tuple · 3fa2e787
      Aaryaman Sagar authored
      Summary: A simple helper to construct an index sequence from a given tuple type
      
      Reviewed By: yfeldblum
      
      Differential Revision: D8626776
      
      fbshipit-source-id: a4ea412293981d58e91a921dcae8468849f5f0bf
      3fa2e787
    • Marc Celani's avatar
      Fix a build failure · 2826a4e8
      Marc Celani authored
      Summary: As title
      
      Reviewed By: elsteveogrande
      
      Differential Revision: D8643234
      
      fbshipit-source-id: 989cdc53ed071fd78a1eba4b2955eff7651274f1
      2826a4e8
    • Maged Michael's avatar
      ConcurrentHashMap: Make iterators not copyable · 8cb68e8d
      Maged Michael authored
      Summary: Disable unsafe iterator operations: copying and operator++ (because it copies the iterator). Copying is unsafe because starting to protect buckets and nodes after their removal is not guaranteed to be effective.
      
      Reviewed By: yfeldblum, djwatson
      
      Differential Revision: D8594743
      
      fbshipit-source-id: 0990d8fe979a3217db855641d23e24cc853a25bf
      8cb68e8d
    • Aaryaman Sagar's avatar
      Backport std::apply and remove folly::applyTuple · 23817ea8
      Aaryaman Sagar authored
      Summary:
      Add a backport of `std::apply` with a similar implementation that makes it easy
      to reason about.  Also implement `applyTuple` in terms of `apply`, `invoke` and
      `tuple_cat`
      
      The implementation of `apply` has been taken straight from the standard,
      reducing chances of churn in incompatible assumptions (if any).  Note that the
      definition and declaration of `apply` has been changed from the way it is
      specified in the standard for better SFINAE compatibility, if needed, will
      followup with a paper proposing the same change in the standard
      
      Reviewed By: spacedentist
      
      Differential Revision: D8248199
      
      fbshipit-source-id: e3e76193a30b1599eca3fe986a33f61addad7a59
      23817ea8
    • Aaryaman Sagar's avatar
      Leftover occurences of integral_constant<bool, ...> · f6f9d7ea
      Aaryaman Sagar authored
      Summary: title
      
      Reviewed By: yfeldblum
      
      Differential Revision: D8631916
      
      fbshipit-source-id: be4ef689b9c2b0dcdd92f8ea61787f70f9a71f9c
      f6f9d7ea
    • Nathan Bronson's avatar
      use vector intrinsics for F14 on 32-bit platforms · 27929e3d
      Nathan Bronson authored
      Summary:
      This diff adds 32-bit support for F14, so SSE and NEON
      intrinsics can be used on x86 and arm architectures (rather than just
      x86_64 and aarch64).  The portability fallback to std::unordered_map
      and std::unordered_set is now used only when vector intrinsics are not
      available, or on PPC.
      
      Reviewed By: shixiao
      
      Differential Revision: D8586283
      
      fbshipit-source-id: 1c4d090e80381fe7ad071c3059b3cb242c04c9f7
      27929e3d
    • Nathan Bronson's avatar
      helper methods for over-aligned allocation with C++ allocators · 3cb1c6d0
      Nathan Bronson authored
      Summary:
      This diff adds helper methods for allocating
      possibly-over-aligned types using C++ allocators.  It uses one of three
      strategies:
      
      * REBINDING - When there is a type that is not over-aligned with the
      requested alignment, the allocator is rebound to that a type with the
      correct alignment (this allows allocating 1 char with alignment 8,
      for example).
      
      * BYPASSING - When the requested alignment is larger than max_align_t
      but the standard allocator is in use, the allocator is bypassed and
      aligned_malloc/aligned_free are used directly to manage the allocation.
      
      * OVER-ALLOCATING - When the type is truly over-aligned and the allocator
      is custom, extra memory is requested and a delta is stored before the
      returned memory to allow the original base location to be recovered.
      
      Reviewed By: shixiao
      
      Differential Revision: D8592767
      
      fbshipit-source-id: 487b5ff7f7f6b1b29a3f2a80d07129afd50bda24
      3cb1c6d0
    • Maged Michael's avatar
      hazptr: Increase thread cache capacity · abef2f07
      Maged Michael authored
      Summary: Increase thread cache capacity from 3 to 6 hazard pointers to accommodate 2 ConcurrentHashMap iterators.
      
      Reviewed By: yfeldblum
      
      Differential Revision: D8595800
      
      fbshipit-source-id: 53275c3cf6fb11c976a4da987d79ec33b9e5e617
      abef2f07
    • Maged Michael's avatar
      ConcurrentHashMap: Make iterators movable · 1f6bf6c8
      Maged Michael authored
      Summary:
      To reduce unnecessary copying for user code handling ConstIterator-s.
      
      Added move test and change UpdateStressTest to use few concurrent iterators.
      
      Reviewed By: yfeldblum
      
      Differential Revision: D8587056
      
      fbshipit-source-id: d6b592a3aa40ca8a7599b258b45a1d339088c978
      1f6bf6c8
  4. 25 Jun, 2018 4 commits
    • Aaryaman Sagar's avatar
      Remove Synchronized::asConst · 3af92dbe
      Aaryaman Sagar authored
      Summary: `folly::as_const` instead
      
      Reviewed By: yfeldblum
      
      Differential Revision: D8248219
      
      fbshipit-source-id: 22853d86c93065ee584458f18b7cd0e8d528d2f0
      3af92dbe
    • Dan Melnic's avatar
      Faster thread local iteration using the ThreadEntryNode · fa32adfe
      Dan Melnic authored
      Summary: Faster thread local iteration using the ThreadEntryNode
      
      Reviewed By: djwatson
      
      Differential Revision: D8551597
      
      fbshipit-source-id: 9118852c0a823851a95b63fe807bfc2679112beb
      fa32adfe
    • Marshall Cline's avatar
      modernize Future::get(): 2/n = 'our' tests use only rvalue-get() · 0a1b8f18
      Marshall Cline authored
      Summary:
      Change the folly/future/... tests to use mainly[*] the rvalue-qualified versions of get() and get(dur).
      
      [*] Although the lvalue-qualified get is deprecated, it is not yet removed, so this diff leaves a test for the lvalue-qualified version. But the bulk of the tests are for the rvalue-qualified get.
      
      Reviewed By: yfeldblum
      
      Differential Revision: D8239792
      
      fbshipit-source-id: c8a2e90cb5ab97a59ec97994c8c6a6ca27dab86e
      0a1b8f18
    • Yedidya Feldblum's avatar
      Fix forwarding/moving in Futures reduce · 7a960981
      Yedidya Feldblum authored
      Summary: [Folly] Fix forwarding/moving in Futures `reduce`.
      
      Reviewed By: marshallcline
      
      Differential Revision: D8601105
      
      fbshipit-source-id: 96c1632821e9e5088a900ccecdaff9f8d108b905
      7a960981
  5. 24 Jun, 2018 2 commits
    • Andrii Grynenko's avatar
      Fix collectAllSemiFuture to work for SemiFutures with deferred work · 7a111f40
      Andrii Grynenko authored
      Summary: We have to extend DeferredExecutor to be aware of nested DeferredExecutor, so that it can propagate various signals to them.
      
      Reviewed By: LeeHowes
      
      Differential Revision: D8600961
      
      fbshipit-source-id: 2b9520598cad65bd80f0346e6f76e224903780a1
      7a111f40
    • Yedidya Feldblum's avatar
      Let Futures Barrier::ControlBlock ctor fully construct · 3bb85dae
      Yedidya Feldblum authored
      Summary:
      [Folly] Let Futures `Barrier::ControlBlock` ctor fully construct.
      
      Invoke the constructor when allocating the control block, rather than try to initialize each field afterward.
      
      Differential Revision: D8605292
      
      fbshipit-source-id: d51648a1267ed7e3e13d9a9e8d8e5d1c18e24a98
      3bb85dae
  6. 23 Jun, 2018 5 commits
    • Yedidya Feldblum's avatar
      Be explicit about memory orders in Futures · 01336b86
      Yedidya Feldblum authored
      Summary:
      [Folly] Be explicit about memory orders in Futures.
      
      This clarifies the basic purpose of each atomic variable - namely, whether it protects control flow (relaxed) v.s. state (typically acq/rel).
      
      Reviewed By: davidtgoldblatt
      
      Differential Revision: D8472791
      
      fbshipit-source-id: 350ec9b38d7c36cfb6d9ae9f1abf758b1f2e97ba
      01336b86
    • Andrii Grynenko's avatar
      Implement coro::Future<void>::toFuture() · dcbf6db1
      Andrii Grynenko authored
      Summary: When converting to folly::Future we have to perform the void -> folly::Unit conversion.
      
      Differential Revision: D8463177
      
      fbshipit-source-id: 96312d0447dfc381a0ee586030f21b9cdbf4bee4
      dcbf6db1
    • Yedidya Feldblum's avatar
      Fix Range with clang + opt builds + ASAN · 184dd587
      Yedidya Feldblum authored
      Summary: [Folly] Fix Range with clang + opt builds + ASAN, where functions marked with `__attribute__((__noinline__))` are getting inlined.
      
      Reviewed By: nbronson
      
      Differential Revision: D8597928
      
      fbshipit-source-id: c963feea270b9e28e118d196950b04d8457b9c66
      184dd587
    • Yedidya Feldblum's avatar
      Fix incorrect unaligned load in Range · 19a78f65
      Yedidya Feldblum authored
      Summary: [Folly] Fix incorrect unaligned load in `Range`.
      
      Reviewed By: santazhang
      
      Differential Revision: D8597638
      
      fbshipit-source-id: 2c8c0baa0c90fb7a7d5a24f84686d3993ae8455b
      19a78f65
    • Nathan Bronson's avatar
      software prefetching for F14Value iteration · 3bcbf9d9
      Nathan Bronson authored
      Summary:
      When moving from chunk i to i-1 in an F14{Value,Node}{Map,Set}
      iteration, this diff prefetches chunk i-2.  This code will never be run
      for small maps and sets, since they fit in a single chunk, and it does
      not affect the fast-path of intra-chunk operator++.
      
      Reviewed By: shixiao
      
      Differential Revision: D8395569
      
      fbshipit-source-id: 60cace5997222fd7d1fa03ffcee93f439f2fcf03
      3bcbf9d9
  7. 22 Jun, 2018 3 commits
    • Nick Terrell's avatar
      Support negative compression levels · 28a03e7e
      Nick Terrell authored
      Summary:
      Folly uses level [-1, -3] for the default/fastest/best compression levels.
      Introduce a `ZSTD_FAST` codec to use negative compression levels.
      
      Reviewed By: chipturner
      
      Differential Revision: D8529340
      
      fbshipit-source-id: 7fb7ff65f08d4dcab009c2eb073920b53055ed9b
      28a03e7e
    • Yedidya Feldblum's avatar
      One Core alias in Promise and Future · abc3bfdf
      Yedidya Feldblum authored
      Summary: [Folly] One `Core` alias in `Promise` and `Future`. Having two aliases was odd.
      
      Reviewed By: marshallcline
      
      Differential Revision: D8472386
      
      fbshipit-source-id: fb2241445e100927602faed9d89775534d06d10a
      abc3bfdf
    • Yedidya Feldblum's avatar
      Refactor non-variadic collect variants · a8990a74
      Yedidya Feldblum authored
      Summary:
      [Folly] Refactor non-variadic `collect` variants.
      
      No change in behavior - just moving code around.
      
      Reviewed By: marshallcline
      
      Differential Revision: D8440630
      
      fbshipit-source-id: a6349c73c2109237f1be174c2260e9c9eb2d1c0e
      a8990a74