1. 08 Jun, 2018 3 commits
    • Tingzhe Zhou's avatar
      FlatCombiningPriorityQueue: Add interface · 12342f02
      Tingzhe Zhou authored
      Summary:
      Make the interface consistent with the other queue algorithms.
      push
      try_push
      try_push_for
      try_push_until
      pop
      try_pop
      try_pop_for
      try_pop_until
      peek
      try_peek
      try_peek_for
      try_peek_until
      
      Reviewed By: yfeldblum, djwatson
      
      Differential Revision: D8262170
      
      fbshipit-source-id: 0299e947a0069eacafd1315c920ec6e1b36675f3
      12342f02
    • Andrii Grynenko's avatar
      Implement weak reference for DefaultKeepAliveExecutor · 2825daef
      Andrii Grynenko authored
      Summary: Weak reference can be used if it's ok for some tasks to be dropped when Executor is destroyed.
      
      Reviewed By: yfeldblum
      
      Differential Revision: D8309958
      
      fbshipit-source-id: 8ecc86a8be181a9eb695aa12305b2a30b6f4b60e
      2825daef
    • Michael Park's avatar
      Added `SemiFuture::within` · bba17c09
      Michael Park authored
      Summary:
      Moved `Future::within` to `FutureBase::withinImplementation`, and changed it to return a `SemiFuture`.
      `SemiFuture::within` uses it directly, and `Future::within` uses it then attaches the current executor or falls back to the inline executor to preserve existing behavior.
      
      Reviewed By: yfeldblum
      
      Differential Revision: D8269907
      
      fbshipit-source-id: 76e235a2ecb2c648603961d0ac0ac17bf646d027
      bba17c09
  2. 07 Jun, 2018 3 commits
    • Yedidya Feldblum's avatar
      Support self-copy in small_vector · a1dd1ce6
      Yedidya Feldblum authored
      Summary:
      [Folly] Support self-copy in `small_vector`.
      
      And refactor move-assignment to look like the fixed copy-assignment for symmetry.
      
      Reviewed By: Ahmed-Salama
      
      Differential Revision: D8321122
      
      fbshipit-source-id: 2c8b26ad6c4e538266082df29276b827cf4505fc
      a1dd1ce6
    • Xiao Shi's avatar
      EASY: fix small bug in fallback F14 visitAllocationClasses · e1df88af
      Xiao Shi authored
      Summary: When vector intrinsics are not available, `visitAllocationClasses` fails to compile as it is a member function of a template class and it invokes a member function of a template base class without explicit `this->`.
      
      Reviewed By: yfeldblum, nbronson
      
      Differential Revision: D8300168
      
      fbshipit-source-id: 1c1619bd1c864535648e531b218d2cf1ffef767b
      e1df88af
    • Alexander Blom's avatar
      Make AsyncSocket spam logs less · 1bc8c91c
      Alexander Blom authored
      Summary:
      VLOG(1) shows up in Android logs, which is annoying as some of our
      tools try to repeatedly connect.
      
      Reviewed By: yfeldblum
      
      Differential Revision: D8297987
      
      fbshipit-source-id: 45cf4320d2e2fcf570117fee6aef133b2d9986e6
      1bc8c91c
  3. 06 Jun, 2018 4 commits
    • Caleb Marchent's avatar
      Look for tags along the master branch checkout out Zstd · 99082ae3
      Caleb Marchent authored
      Summary:
      There is no guarantee that the default branch in git is 'master'; so
          unless specified we checkout a tag along the 'dev' branch, which is not
          intended as it is the master branch that tracks releases for Zstd.
      
      Reviewed By: jstrizich
      
      Differential Revision: D8297843
      
      fbshipit-source-id: 8497dc75c399ae7c86e27b28fdb73898ef4b1a4e
      99082ae3
    • Michael Park's avatar
      Minor comment fix and a couple of typos · f2319a6c
      Michael Park authored
      Summary: `s/Future/SemiFuture/` on `SemiFuture` ctor and fixed typo `s/Timeekeeper/Timekeeper/`.
      
      Reviewed By: yfeldblum
      
      Differential Revision: D8290658
      
      fbshipit-source-id: 99ddbdecc0302e620bd2b4ebce74c6080cf81aec
      f2319a6c
    • Lee Howes's avatar
      Make Future<T>::delayed complete on correct executor 5/n: Add back... · ed88a3a3
      Lee Howes authored
      Make Future<T>::delayed complete on correct executor 5/n: Add back Future::delayed with correct behaviour
      
      Summary:
      Overall plan to modify Future<T>::delayed to complete on the same
      executor as the input future.
      
      [folly::Futures] Make Future<T>::delayed complete on correct executor 5/n:
       * Add back future::delayed.
       * Have Future::delayed complete on input executor.
       * r-value qualify Future::delayed
      
      Reviewed By: yfeldblum, marshallcline
      
      Differential Revision: D8238220
      
      fbshipit-source-id: 79afa8cc9a9fe588609ad186ad62f714ee322f7d
      ed88a3a3
    • Yedidya Feldblum's avatar
      Let Sychronized move-constructor not lock the source · 36502346
      Yedidya Feldblum authored
      Summary: [Folly] Let `Sychronized` move-constructor not lock the source object, since it is an rvalue-reference and the move-constructor code may therefore be assumed to have the only live reference to the source. Same with the move-assignment operator.
      
      Reviewed By: aary
      
      Differential Revision: D8219883
      
      fbshipit-source-id: f62ff87197ac4b9ceed290a73a05062ab8ed45c4
      36502346
  4. 05 Jun, 2018 5 commits
    • Felix Handte's avatar
      Init on First Use and Retain LZ4F Contexts · 8acd0060
      Felix Handte authored
      Summary:
      Reusing a context can provide significant efficiency benefits.
      
      Depends on D8172871.
      
      Reviewed By: yfeldblum, terrelln
      
      Differential Revision: D8287767
      
      fbshipit-source-id: 2565e7a959b2ac0911f0a4d6e1596f9da6d12ee8
      8acd0060
    • Felix Handte's avatar
      Init on First Use and Retain LZ4 Contexts · 5b5e8e88
      Felix Handte authored
      Summary:
      Reusing a context can provide significant efficiency benefits.
      
      Depends on D8172801.
      
      Reviewed By: yfeldblum, terrelln
      
      Differential Revision: D8172871
      
      fbshipit-source-id: f92c85410a35643502d28922583ee0ed0b4386c9
      5b5e8e88
    • Neel Goyal's avatar
      Clear errors when reading pems · f1e3312e
      Neel Goyal authored
      Summary: Clear/read OpenSSL errors after certain ops.
      
      Reviewed By: mingtaoy
      
      Differential Revision: D8277088
      
      fbshipit-source-id: aa436657c3bca3a081cd56858e09da57a03cda05
      f1e3312e
    • Dan Melnic's avatar
      Use static FOLLY_TLS ThreadEntry to avoid an ASAN deadlock due to new after fork · da72e6e9
      Dan Melnic authored
      Summary: Use static FOLLY_TLS ThreadEntry to avoid an ASAN deadlock due to new after fork
      
      Reviewed By: philippv
      
      Differential Revision: D8272580
      
      fbshipit-source-id: e2dc069e81d15f14be9f96a26d30de7482ced0cf
      da72e6e9
    • Sergey Zhupanov's avatar
      Drop the dependency on boost algorithm for Uri. · 79bd4f82
      Sergey Zhupanov authored
      Summary: Replaced boost::algorithm::to_lower() with std::transform()
      
      Reviewed By: yfeldblum
      
      Differential Revision: D8264760
      
      fbshipit-source-id: f6faa46c0bbced3a08c02b93eacbb58eb6927890
      79bd4f82
  5. 04 Jun, 2018 4 commits
    • Nick Terrell's avatar
      Fix support for zstd-1.3.[23] · 5b2c689c
      Nick Terrell authored
      Summary:
      * One function needed renaming
      * One bug needed to be worked around (content size defaulting to 0)
      
      Reviewed By: yfeldblum
      
      Differential Revision: D8264565
      
      fbshipit-source-id: 1abe5fb79b525108e64857dc28d5582372fcc165
      5b2c689c
    • Phil Willoughby's avatar
      rlock() should work with const input · 4a20bbed
      Phil Willoughby authored
      Summary: The instance method is permitted on `const` objects, so the ADL method should also accept a `const&` input.
      
      Reviewed By: yfeldblum
      
      Differential Revision: D8240295
      
      fbshipit-source-id: 960aa5567afea3f52b91c1b83566820f5ecefc4d
      4a20bbed
    • Daniel Xu's avatar
      Use coarse_steady_clock instead of steady_clock · 57ebbcd1
      Daniel Xu authored
      Summary:
      IntervalRateLimiter was already operating on millisecond
      granularity. coarse_steady_clock offers better performance because
      it's on millisecond granularity.
      
      Reviewed By: yfeldblum
      
      Differential Revision: D8245042
      
      fbshipit-source-id: 7ce0e347c0498ff2741adc727577c3bb2ce63979
      57ebbcd1
    • Dan Melnic's avatar
      Iterate only through the threads that have in use entries - v2 · 0865b933
      Dan Melnic authored
      Summary: Iterate only through the threads that have in use entries - v2
      
      Reviewed By: djwatson
      
      Differential Revision: D8143429
      
      fbshipit-source-id: 51098ff8e1fef7aaf9f1c0f2ddbf7ebb579cbeb4
      0865b933
  6. 03 Jun, 2018 2 commits
    • Yedidya Feldblum's avatar
      Cut FOLLY_IS_TRIVIALLY_COPYABLE macro · 61e32c4c
      Yedidya Feldblum authored
      Summary:
      [Folly] Cut `FOLLY_IS_TRIVIALLY_COPYABLE` macro, replacing all uses with `folly::is_trivially_copyable`.
      
      And cut `folly::IsTriviallyCopyable` with member-type-detection support, and move `folly::traits_detail::is_trivially_copyable` to `folly::is_trivially_copyable`.
      
      `FOLLY_IS_TRIVIALLY_COPYABLE` and `folly::IsTriviallyCopyable` were there to support gcc < 5.
      
      Reviewed By: Orvid
      
      Differential Revision: D8246972
      
      fbshipit-source-id: 8af9bbdbfac8671a61ebaa200dbfd2426a40d2eb
      61e32c4c
    • Nathan Bronson's avatar
      switch F14 bit mixer to use hardware CRC32 when available · 101c87e4
      Nathan Bronson authored
      Summary:
      x86_64 chips with SSE >= 4.2 and many aarch64 chips have
      CRC32-specific instructions with excellent latency.  This diff switches
      the bit mixer applied to untrusted hash functions to use these instructions.
      This is a noticeable win for the F14 uses that are CPU front-end bound.
      
      Reviewed By: yfeldblum
      
      Differential Revision: D8245688
      
      fbshipit-source-id: f6a1c1c2a6365201178c653cd5d8c04fbac8d78e
      101c87e4
  7. 02 Jun, 2018 1 commit
    • Lee Howes's avatar
      Make Future<T>::delayed complete on correct executor 4/n: Remove Future::delayed · b6c0f8df
      Lee Howes authored
      Summary:
      Overall plan to modify Future<T>::delayed to complete on the same executor as the input future.
      
      4/n: Remove Future::delayed completely to ensure that all users are on delayedUnsafe so that when we put delayed in with correct behaviour there is no incorrect use.
      
      Reviewed By: marshallcline
      
      Differential Revision: D8223327
      
      fbshipit-source-id: c675d2d51afa2131eee5871afea45f1c6cc65a77
      b6c0f8df
  8. 01 Jun, 2018 5 commits
    • Sergey Zhupanov's avatar
      Minor folly cleanup. · 84d98c46
      Sergey Zhupanov authored
      Summary: Minor refactoring of several fbcode/folly/ classes.  Primarily constification, replacing custom code with call to boost, etc.
      
      Reviewed By: yfeldblum
      
      Differential Revision: D8239891
      
      fbshipit-source-id: 14cb109b5deb27f8949b7889d195fcba29e2038c
      84d98c46
    • Nathan Bronson's avatar
      F14 enable trivial object optimizations for custom allocators · 8dfae42b
      Nathan Bronson authored
      Summary:
      F14 can apply some additional optimizations for trivially
      copyable and trivially destructible values in the case that the allocator
      doesn't do anything special in its construct and destroy methods.
      Previously this was gated based on whether the allocator was exactly
      std::allocator, but that causes this optimization to be missed in some
      important cases.  This diff extends the checking machinery to test if
      there is actually a default construct or destroy method in the allocator
      (they are optional) and to test if there is a manual override of the
      conservative default check.
      
      Reviewed By: yfeldblum
      
      Differential Revision: D8191437
      
      fbshipit-source-id: c55b8f32427c3f0eff5c8ef42d7b51a57b0cbd1f
      8dfae42b
    • Marshall Cline's avatar
      improve perf of Core::hasResult() · d9df4bf9
      Marshall Cline authored
      Summary:
      Core::hasResult() is called in lots of places:
      
      - future.result()
      - future.get()
      - future.wait()
      - future.within()
      - future.hasValue()
      - future.hasException()
      - future.getTry()
      - future.raise()
      - future.poll()
      - promise.setInterruptHandler()
      - etc.
      
      This diff improves that function as follows (source: godbolt, with optimization, on both gcc and clang):
      
      - old: 7 instructions w/ 2 conditional jumps + 1 unconditional jump; fastest path is 4 instructions w/ 2 jumps, slowest is 7 instructions w/ 2 jumps
      - new: 3 instructions w/ 0 jumps
      
      Small improvement overall, but to a widely used function.
      
      Reviewed By: yfeldblum
      
      Differential Revision: D8231048
      
      fbshipit-source-id: 83a9f5c602475c2ca7066a45635d807596ecf37d
      d9df4bf9
    • Marshall Cline's avatar
      add contracts to Core · ef22cc7e
      Marshall Cline authored
      Summary:
      - Add class-level description including states & state-transitions
      - Add method-level contracts to Core
      
      Reviewed By: yfeldblum
      
      Differential Revision: D7923362
      
      fbshipit-source-id: f7b0f340b6a768c33068547aa4a38acc72ad7088
      ef22cc7e
    • Orvid King's avatar
      Change calls from collectAll to collectAllSemiFuture · de328295
      Orvid King authored
      Summary: We are changing `folly::collectAll` to return `SemiFuture` rather than `Future` and this is needed as an interim step. After all calls to `collectAll` are changed to `collectAllSemiFuture`, we'll be renaming it back to `collectAll`.
      
      Reviewed By: yfeldblum
      
      Differential Revision: D8210974
      
      fbshipit-source-id: e4a7464f4a1c3ede157b8377a4df97d943001f60
      de328295
  9. 31 May, 2018 13 commits
    • Yedidya Feldblum's avatar
      Simplify folly/test/ExecutorTest.cpp · d7a3744c
      Yedidya Feldblum authored
      Summary:
      [Folly] Simplify `folly/test/ExecutorTest.cpp`.
      
      * `auto` is fine.
      * `auto` is equivalent to `auto&&` when copy-elision is performed - in the former case, the compiler may use copy-elision to elide materialization of a temporary, whereas in the latter case, the compiler must materialize a temporary, rendering them equivalent..
      * `std::addressof` is useful only for unknown types; prefix-`&` is fine for known types which do not overload that operator.
      
      Reviewed By: Orvid
      
      Differential Revision: D8226453
      
      fbshipit-source-id: c987c71d65c01a2d8ca81960f796fcc6100c3484
      d7a3744c
    • Nathan Bronson's avatar
      make F14MapTest robust to <random> details · 711b3fdc
      Nathan Bronson authored
      Summary:
      F14MapTest's random test checks afterward that some events
      happened, but this is not assured on different platforms.  This diff
      inverts the checks so that the loop is continued until all necessary
      events have triggered.  Hypothetical failures of the condition checked
      by the removed EXPECT_GE checks will be visible after this diff as
      test timeouts.
      
      Reviewed By: andreazevedo
      
      Differential Revision: D8226301
      
      fbshipit-source-id: 2ec295b0f5f47e0726cdf1eb64b81c0c23eedae2
      711b3fdc
    • Nathan Bronson's avatar
      check invariant during swap · 3ebc5866
      Nathan Bronson authored
      Summary:
      Container swap is not allowed to fall back to allocation + move
      when allocators are not equal, which makes swap undefined in that case.
      FOLLY_SAFE_CHECK it.  For zero-size allocators this check will be optimized
      away at compile time.
      
      Reviewed By: yfeldblum
      
      Differential Revision: D8209358
      
      fbshipit-source-id: 6555f102c51c97f1e1ecfebd0597c532849184b5
      3ebc5866
    • Nathan Bronson's avatar
      clang-format Memory.h and its test · 091165ea
      Nathan Bronson authored
      Reviewed By: yfeldblum
      
      Differential Revision: D8208046
      
      fbshipit-source-id: 58ae8a1df7fedd7bb8ec63bcb51c82ec7fb3c9e8
      091165ea
    • Maged Michael's avatar
      UnboundedQueue: Make linking next, advancing tail, and advancing head wait-free · 40a62d63
      Maged Michael authored
      Summary:
      Avoid spin-waiting for threads that may be descheduled by making steps that used to require waiting for action by a specific thread wait-free. The changed steps are:
      - Allocating and linking the next segment
      - Advancing tail to the next segment
      - Advancing head to the next segment
      
      For SPSC, the consumer still must wait for the producer to advance tail before it advances head.
      
      Reviewed By: djwatson
      
      Differential Revision: D8124279
      
      fbshipit-source-id: 4dc9b2c1f333a71e7283175e0f9c4ab2eaeb7549
      40a62d63
    • Lee Howes's avatar
      Make Future<T>::delayed complete on correct executor 2/n: Apply codemod future... · 1df0ebca
      Lee Howes authored
      Make Future<T>::delayed complete on correct executor 2/n: Apply codemod future delayed to delayed unsafe
      
      Summary:
      Overall plan to modify Future<T>::delayed to complete on the same
      executor as the input future.
      
      2/n: Codemod Future<T>::delayed to Future<T> delayedUnsafe. Name-only change, no behaviour.
      
      Reviewed By: yfeldblum
      
      Differential Revision: D8217994
      
      fbshipit-source-id: e20f861c2545f08a177b78e1dba643b267146e94
      1df0ebca
    • Sven Over's avatar
      add Executor::KeepAlive::copy() method · 439dc4ea
      Sven Over authored
      Summary: We do not want implicit copies of `KeepAlive`, because they may be accidental and they impose an overhead. However, making a copy by calling `folly::getKeepAliveToken(keep_alive.get())` does not look very nice. Also, in case that `keep_alive` is a dummy, it makes an unnecessary call to `Executor::keepAliveAcquire`, which will return false but cannot be inlined usually because it's a virtual function. This diff adds a `copy() const` method which returns a copy of the `KeepAlive` object. It only calls `Executor::keepAliveAcquire` if the original object is not a dummy.
      
      Reviewed By: yfeldblum, andriigrynenko
      
      Differential Revision: D8203839
      
      fbshipit-source-id: bb595d3836405bd84e55c4214ac19127b1e0e42a
      439dc4ea
    • Sven Over's avatar
      add unit test for Executor::KeepAlive · 9dd22f55
      Sven Over authored
      Summary:
      This diff adds a simple unit test, verifying that construction
      of a `KeepAlive` object (either from `Executor*` or move construction)
      calls `keepAliveAcquire` and `keepAliveRelease` the correct
      number of times.
      
      Reviewed By: elsteveogrande
      
      Differential Revision: D8203944
      
      fbshipit-source-id: 297beeaab99c55d7284ca06edd5e6b9023e27619
      9dd22f55
    • Andre Pinto's avatar
      Fix time-test linkage in oss build · fbecb252
      Andre Pinto authored
      Summary:
      Somehow gcc49 as used in travis-ci is having a hard time deciding which
      constructor to call in `folly/executors/test/ThreadPoolExecutorTest.cpp:721`.
      It can't decide between `folly/executors/CPUThreadPoolExecutor.h:69` and
      `folly/executors/CPUThreadPoolExecutor.h:83`.
      All this diff does is give it a hint about which constructor it should
      use.
      
      Reviewed By: yfeldblum
      
      Differential Revision: D8219425
      
      fbshipit-source-id: d92b08efc8bad795ce4a6775efd1e0512aaa6bb5
      fbecb252
    • Yedidya Feldblum's avatar
      Cut Futures private invocability helpers · 53484fd2
      Yedidya Feldblum authored
      Summary: [Folly] Cut Futures private invocability helpers, which can be replaced with invoke_result, is_invocable, etc.
      
      Reviewed By: marshallcline
      
      Differential Revision: D8087901
      
      fbshipit-source-id: 17282d77aaff61350d1e7f1b0c363c25db8fb5b1
      53484fd2
    • Yedidya Feldblum's avatar
      No longer allow continuations taking non-const lvalue-ref · e2fcfa38
      Yedidya Feldblum authored
      Summary: [Folly] No longer allow continuations taking non-const lvalue-ref, since that is not really necessary - callers can get all the same results using continuations taking non-const rvalue-ref instead.
      
      Reviewed By: Orvid
      
      Differential Revision: D8166011
      
      fbshipit-source-id: 468d049c6034339f3caf1a82fbc8c755ec2f51e6
      e2fcfa38
    • Lee Howes's avatar
      Make Future<T>::delayed complete on correct executor 1/n · 51a23742
      Lee Howes authored
      Summary:
      Overall plan to modify Future<T>::delayed to complete on the same
      executor as the input future.
      
      1/n: Adds Future<T>::delayedUnsafe that is identical to Future<T>::delayed
      but acts as a codemod target.
      
      Reviewed By: marshallcline
      
      Differential Revision: D8209451
      
      fbshipit-source-id: ee9c1184de2847e142516b315140fcc6d43948c5
      51a23742
    • Andre Pinto's avatar
      Build Hazptr.cpp · f0047766
      Andre Pinto authored
      Summary:
      `libfollylogging_example` is failing to link because it cannot find the
      definition of `folly::default_domain`.
      This diff adds Hazptr.cpp to the build script, which actually defines
      `folly::default_domain`.
      
      Reviewed By: yfeldblum
      
      Differential Revision: D8217299
      
      fbshipit-source-id: 5fb36ef2f160cf45e93c2fc4098d58d384390e5d
      f0047766