1. 06 Jun, 2018 1 commit
    • 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
  2. 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
  3. 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
  4. 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
  5. 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
  6. 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
  7. 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
  8. 30 May, 2018 9 commits
    • Maged Michael's avatar
      UnboundedQueue: Use synchronization/hazptr and hazptr_obj_base_linked · 49f1f482
      Maged Michael authored
      Summary:
      - Use the hazptr library under folly/synchronization.
        - Use hazptr_obj_base_linked to manage counted links.
      
      Reviewed By: djwatson
      
      Differential Revision: D7674822
      
      fbshipit-source-id: a87ece5dd1c7670677486af59988af8518abaf92
      49f1f482
    • Yedidya Feldblum's avatar
      CodeMod: future-then-continuation-lvalue-ref · 8d0571ca
      Yedidya Feldblum authored
      Summary:
      CodeMod: `future-then-continuation-lvalue-ref`.
      
      ```
      buck run mode/opt foundation/clangr:clangr_coordinator -- run foundation/clang/codemods:future-then-continuation-lvalue-ref --dev -p 7 --num-workers=200
      ```
      
      There is no need to support continuations taking non-const lvalue-ref params; callers can get exactly the same semantics with non-const rvalue-ref params instead. Thsi codemod preserves semantics. Many of these cases could do just as well taking by value, but this codemod preserves semantics.
      
      Reviewed By: Orvid
      
      Differential Revision: D8166008
      
      fbshipit-source-id: 84b635cccce24b6485ffb5b24b98f10422b9a517
      8d0571ca
    • Lee Howes's avatar
      Back out "[folly::Futures] Make Future::delayed complete on Future's executor." · df028149
      Lee Howes authored
      Summary: Original commit changeset: adcd387e237d
      
      Reviewed By: mzlee
      
      Differential Revision: D8204982
      
      fbshipit-source-id: 2c66f58ccf41dc70f55b3ecffc6e197c23c4f959
      df028149
    • Maged Michael's avatar
      hazptr: Fix typos · 1e08cbbe
      Maged Michael authored
      Summary: Fix typos
      
      Reviewed By: Tingzhe
      
      Differential Revision: D8160938
      
      fbshipit-source-id: f4eaf496a33b7d2b6266a8424850640028660331
      1e08cbbe
    • Dave Watson's avatar
      Make addObserver/removeObserver take a write lock · 963b9f82
      Dave Watson authored
      Summary:
      As title.  These methods look like they never protected observers_ list, and relied on
      the user not calling addObserver or removeObserver concurrently.  I don't see any downsides
      to taking a write lock here, these methods aren't called often.
      
      Reviewed By: davidtgoldblatt
      
      Differential Revision: D8187184
      
      fbshipit-source-id: dd20b809e851cc14a05aca3bc9722e0a9236665f
      963b9f82
    • Dave Watson's avatar
      Remove hazptr_cleanup from ConcurrentHashMap · 6d02e2b5
      Dave Watson authored
      Summary: Causing perf issues.  Users must add explicitly to tests or other use cases.
      
      Differential Revision: D8162835
      
      fbshipit-source-id: 7095064209ced870768552307675dc1ebbf68bdc
      6d02e2b5
    • Dave Watson's avatar
      Add thread timeout memory barrier · e132960c
      Dave Watson authored
      Summary:
      Add correct memory barrier to thread timeout / add path.
      
      This seems like the fastest way to maintain safety here.  We could use
      a read-biased rw lock instead, but that would mean taking a heavy memory
      barrier in add() if we do have to add a thread.
      
      Reviewed By: davidtgoldblatt
      
      Differential Revision: D8161950
      
      fbshipit-source-id: af2bd3a601ced9bb04a8206696e7a998c75f6369
      e132960c
    • Lee Howes's avatar
      Make Future::delayed complete on Future's executor. · f22f6d96
      Lee Howes authored
      Summary: Future::delayed could complete on Future::sleep's executor. Ensure instead that it completes on the future's executor.
      
      Reviewed By: yfeldblum
      
      Differential Revision: D8052038
      
      fbshipit-source-id: adcd387e237dbd724d5f9deb5c80d1418987482d
      f22f6d96
    • Lee Howes's avatar
      Make onTimeout use thenError which maintains executor. · a0b0d9b5
      Lee Howes authored
      Summary: Make onTimeout call thenError which maintains the executor rather than onError which does not.
      
      Reviewed By: yfeldblum
      
      Differential Revision: D8051906
      
      fbshipit-source-id: 41ca5f657a441ff8eaacdfab6d4cfb45d5e5f0c2
      a0b0d9b5