1. 15 Jul, 2021 3 commits
    • Shai Szulanski's avatar
      Reorder definitions in AsyncGenerator.h · d26d241b
      Shai Szulanski authored
      Summary: Prepares for next diff
      
      Reviewed By: Mizuchi
      
      Differential Revision: D29665910
      
      fbshipit-source-id: 1026b0836ca803d566086ab9ed8e13e36d607c5f
      d26d241b
    • Philip Pronin's avatar
      fix semantics of QMS::Iterator::skipTo · bdf37414
      Philip Pronin authored
      Summary: Passing large `key` doesn't correctly advance position to the end.
      
      Reviewed By: ot
      
      Differential Revision: D29712973
      
      fbshipit-source-id: 7da7c49250753c12f3703ccf49107e56bf841131
      bdf37414
    • Aaryaman Sagar's avatar
      Have collect() handle the case of a not-ready future · ea91c9bc
      Aaryaman Sagar authored
      Summary:
      If one of the input futures is off the end of a folly::Executor::weakRef()
      executor, then there is a chance that it may never complete with a value or an
      ecception.  In this case, collect() would crash because it assumes that the
      folly::Try instances for all input futures have either a value or an exception.
      
      Fix that case by injecting a BrokenPromise exception for the case where a future
      never has an exception or a value.
      
      Reviewed By: yfeldblum
      
      Differential Revision: D26989091
      
      fbshipit-source-id: b810fe4d5d071233da1f453b3759991e057d78c6
      ea91c9bc
  2. 14 Jul, 2021 1 commit
    • Pranjal Raihan's avatar
      Remove unused UniqueInstance::PtrRange · 74f3c043
      Pranjal Raihan authored
      Summary: `UniqueInstance.cpp` has its own `PtrRange` which it exclusively uses.
      
      Reviewed By: yfeldblum, Mizuchi
      
      Differential Revision: D29685352
      
      fbshipit-source-id: 32658b3ee6fc1830c2c2f27693baefa16026f13e
      74f3c043
  3. 13 Jul, 2021 3 commits
    • Geoff Oakham's avatar
      TokenBucketStorage primitive extracted from BasicDynamicTokenBucket · 0f00cc10
      Geoff Oakham authored
      Summary:
      Extract the underlying primitive that powers BasicDynamicTokenBucket, as TokenBucketStroage. This abstraction speaks to "tokens" (instead of time) and allows for arbitrary borrowing.  It also handles thread safety.
      
      This allows other bucket token based libraries to be created (eg. a Cooperative Scheduler) using the same primitive.
      
      API compatibility has been maintained with the existing classes.
      
      Reviewed By: yfeldblum, rohithmenon
      
      Differential Revision: D29522354
      
      fbshipit-source-id: 010bd9caf3f9c3726621e87d23e5c564773424b7
      0f00cc10
    • Pranjal Raihan's avatar
      Back out "Don't use typeid without RTTI in UniqueInstance" · 7a18d182
      Pranjal Raihan authored
      Reviewed By: prajay
      
      Differential Revision: D29673416
      
      fbshipit-source-id: f08fa89db74198aa648e871837f1f7b841cd8d6b
      7a18d182
    • Pranjal Raihan's avatar
      Back out "RequestContext::StaticContextAccessor" · 436e7fd6
      Pranjal Raihan authored
      Reviewed By: mshneer
      
      Differential Revision: D29673244
      
      fbshipit-source-id: 62676c498a60c720d463703f5f1e24b421683a85
      436e7fd6
  4. 12 Jul, 2021 4 commits
  5. 09 Jul, 2021 6 commits
    • Mingtao Yang's avatar
      Move FindZstd.cmake into fbcode_builder · 42707737
      Mingtao Yang authored
      Summary:
      A bunch of existing projects vendor it into their own CMake folder. But these
      same projects also have fbcode_builder's CMake directory in their CMAKE_MODULE_PATH,
      so move FindZstd here.
      
      Differential Revision: D29637686
      
      fbshipit-source-id: 805676e18f98ef217dea8511d039edc38771b529
      42707737
    • Fred Emmott's avatar
      Mark zstd as a dependency of fizz · a405d073
      Fred Emmott authored
      Summary:
      I don't understand why we have both manifests/specs; I was assuming one was generated from the other,
      but I don't see a at-generated and grep doesn't show up anything, so both are manual edits.
      
      Reviewed By: iahs
      
      Differential Revision: D29524000
      
      fbshipit-source-id: 5f6df62f0162ea24a9903bedf5d220eab5c2dff1
      a405d073
    • Zsolt Dollenstein's avatar
      Opt in opensource/fbcode_builder to pyfmt · 40803d69
      Zsolt Dollenstein authored
      Reviewed By: zertosh
      
      Differential Revision: D29612107
      
      fbshipit-source-id: ac450058134e23a3831db35d2e49c80eb8cde36a
      40803d69
    • Dong Li's avatar
      Revert D29536635: RequestContext::StaticContextAccessor · c2ea3761
      Dong Li authored
      Differential Revision:
      D29536635 (https://github.com/facebook/folly/commit/bc0818f89e7ab3802cdac95a25e29f4061021c3c)
      
      Original commit changeset: 008a612ec65a
      
      fbshipit-source-id: 2c18348732f1b1f8022e3cc8dce5a5684ce16108
      c2ea3761
    • Tim Berning's avatar
      fix flaky test · 52c78089
      Tim Berning authored
      Summary: AsyncSocketSendmmsgIntegrationTest.PingPongRequest fails during stress runs with multiple jobs due to the 5ms timeout in `UDPClient::sendPing()`. Increasing the timeout fixes the issue.
      
      Reviewed By: yfeldblum
      
      Differential Revision: D29623870
      
      fbshipit-source-id: ad6ee0356001fbded9ce01ddc099b708d1477899
      52c78089
    • Pranjal Raihan's avatar
      RequestContext::StaticContextAccessor · bc0818f8
      Pranjal Raihan authored
      Summary: `RequestContext::StaticContextAccessor` acts as a guard, preventing all threads with a `StaticContext` from being destroyed (or created).
      
      Reviewed By: yfeldblum
      
      Differential Revision: D29536635
      
      fbshipit-source-id: 008a612ec65aa7095450f4d0ab522e8ecd864548
      bc0818f8
  6. 08 Jul, 2021 8 commits
    • Giuseppe Ottaviano's avatar
      Optimize small_vector copy and move for inline storage · cb36f3c8
      Giuseppe Ottaviano authored
      Summary:
      Codegen for copy and move assignment is suboptimal when the vectors involved are inline, in particular if the destination is default-constructed (which is very common) and even more so if the value type is trivially copyable.
      
      The main optimization is that if the storage is inline and the type is trivially-copyable, we can just copy the whole storage, regardless of the size of the container. This avoids a branchy loop, and it's usually just a handful of MOVs.
      
      While at it, optimized all the related code paths by avoiding delegating to `swap()` and `assign()` when possible, which introduce further branches that are hard to optimize. Also move and copy in place when the vector is non-empty, avoiding unnecessary destructions.
      
      Also fixed a couple of bugs:
      - The move constructor did not clear its argument when inline, inconsistently with the move assignment and `std::vector`
      - The move assignment operator passed its heap storage to the argument instead of freeing it.
      
      Reviewed By: yfeldblum
      
      Differential Revision: D29592519
      
      fbshipit-source-id: 6281cdda775568d28619afea8b7ca2fb168c7e5d
      cb36f3c8
    • Yedidya Feldblum's avatar
      cut Tearable · c226674c
      Yedidya Feldblum authored
      Summary: It is unused. An upcoming Concurrency TS will have a replacement.
      
      Reviewed By: mshneer
      
      Differential Revision: D29597486
      
      fbshipit-source-id: a108b945ce32eb17cedefad89630c9171fc5c9c2
      c226674c
    • Fred Emmott's avatar
      Make `travis_docker_build.sh` macos-compatible · cb55944f
      Fred Emmott authored
      Summary:
      BSD readlink doesn't have -f.
      
      I'm not using TravisCI, however docker is still convenient for reproducing builds locally.
      
      Reviewed By: yns88
      
      Differential Revision: D29523333
      
      fbshipit-source-id: e01169f3eabca7b8baec95bc70fe119cad201b35
      cb55944f
    • Giuseppe Ottaviano's avatar
      Implement contains() in sorted vector types · 1787a34a
      Giuseppe Ottaviano authored
      Summary: Implement C++20 `contains()`.
      
      Reviewed By: yfeldblum
      
      Differential Revision: D29556436
      
      fbshipit-source-id: 1c3a8e6e9a07f6e47491b063f88df6bf9da2d87b
      1787a34a
    • Pranjal Raihan's avatar
      Make ThreadLocalPtr::Accessor::Iterator default construct as singular · ee8d0a53
      Pranjal Raihan authored
      Reviewed By: yfeldblum, mshneer
      
      Differential Revision: D29578762
      
      fbshipit-source-id: 2aa9af8f68825997db8b71fc97dda5477fa57413
      ee8d0a53
    • Pranjal Raihan's avatar
      Make folly::detail::IteratorAdaptor default-constructible · af7df254
      Pranjal Raihan authored
      Summary:
      [Forward iterators are required to be default constructible](https://en.cppreference.com/w/cpp/named_req/ForwardIterator). So as of today, `IteratorAdaptor` is lying!
      
      We should default construct the wrapped iterator into a [singular iterator](https://eel.is/c++draft/iterator.requirements#general-7):
      > Iterators can also have singular values that are not associated with any sequence. Results of most expressions are undefined for singular values; the only exceptions are destroying an iterator that holds a singular value, the assignment of a non-singular value to an iterator that holds a singular value, and, for iterators that meet the `Cpp17DefaultConstructible` requirements, using a value-initialized iterator as the source of a copy or move operation.
      
      Reviewed By: yfeldblum, mshneer
      
      Differential Revision: D29578765
      
      fbshipit-source-id: 7f2f0762b17f0b1a056532fc5db2abdd76cca3ea
      af7df254
    • Pranjal Raihan's avatar
      Make RequestContext::StaticContext an aggregate struct instead of std::pair · 95f24e43
      Pranjal Raihan authored
      Summary: Let's give them better names than `first` and `second`.
      
      Reviewed By: yfeldblum, mshneer
      
      Differential Revision: D29536636
      
      fbshipit-source-id: bbb37f2e1c0c51dd1ce2a0cfeca85399f409c415
      95f24e43
    • Sergey Korytnikov's avatar
      Fix waiters signaling in BatchSemaphore · db6d0a10
      Sergey Korytnikov authored
      Summary: Fix BatchSemaphore to post baton for a multiple waiter in a list as long as there are token available.
      
      Reviewed By: yfeldblum
      
      Differential Revision: D29430799
      
      fbshipit-source-id: 98b0a616d0ce863108dcf331e491fd2cc12429d1
      db6d0a10
  7. 07 Jul, 2021 1 commit
    • Yedidya Feldblum's avatar
      expand the lock protocol and facilities · b1fa3c6f
      Yedidya Feldblum authored
      Summary:
      Define a single implementation type `lock_base` which handles all cases, including unique/shared/upgrade locks and including sans-state/with-state locks. Add `unique_lock_base`, `shared_lock_base`, and `upgrade_lock_base`.
      
      Revise `upgrade_lock` simply to derive `upgrade_lock_base`. We may use `upgrade_lock` as an example for specializing `unique_lock` and `shared_lock`
      
      Remove `ProxyLockableUniqueLock` since `unique_lock_base` absorbs it. Let the `unique_lock` specializations for `DistributedMutex` inherit `unique_lock_base` instead.
      
      Add lock invokers for every lock, try-lock, unlock, and lock-transition member. Were these used only internally to implement the lock-policy types and the lock-transition functions they might be left in detail but there may be broader use-cases for at least some of them. Putting the invokers in this header is consistent with proper placement since this header is intended to own all lock primitives and facilities.
      
      Revise the lock-transition functions to handle cases where the from and to lock types are sans-state/with-state. Expand the set of lock-transition functions for completeness: lock-transitions include x->s, x->u, u->s, u->x; while try-lock-transitions include s->x, s->u, u->x.
      
      Reviewed By: aary
      
      Differential Revision: D28767313
      
      fbshipit-source-id: 153adc8270f0f4338db6acf544b8d358556d6f49
      b1fa3c6f
  8. 06 Jul, 2021 2 commits
    • Durham Goode's avatar
      Enable fb dynamicconfig loading inside eden backingstore · 4215b920
      Durham Goode authored
      Summary:
      Reenables dynamicconfig loading with eden backingstore. Previously it
      broke edenfs-windows-release, but we believe the
      opensource/fbcode_builder/manifests/eden tweak has fixed it.
      
      Reviewed By: xavierd
      
      Differential Revision: D29561192
      
      fbshipit-source-id: 775dd21d177f3baa09b0192e7d3f7231008c3766
      4215b920
    • Shai Szulanski's avatar
      Initialize value in loadUnaligned · eac6011a
      Shai Szulanski authored
      Differential Revision: D29497151
      
      fbshipit-source-id: 64ad1adbd68d10066fc65ddc41e9cff5ef3c6b53
      eac6011a
  9. 01 Jul, 2021 2 commits
    • Xavier Deguillard's avatar
      win: add --return-nonzero-on-failures to sc_testpilot · 73484b8a
      Xavier Deguillard authored
      Summary:
      For whatever reason, sc_testpilot default to --return-zero-on-failures, which
      means that test failures are simply not reported properly to the signal box.
      Fix that by explicitely passing --return-nonzero-on-failures
      
      Reviewed By: fanzeyi
      
      Differential Revision: D29509158
      
      fbshipit-source-id: ef991f91df48e99769f96ffd8d7015cdf507c723
      73484b8a
    • Neel Goyal's avatar
      import or backport reinterpret_pointer_cast · d6610d60
      Neel Goyal authored
      Summary: Import or backport `std::reinterpret_pointer_cast` into folly. The relevant guard is the use of the C++17 language and, if feature-test macros are exported, `__cpp_lib_shared_ptr_arrays >= 201611`.
      
      Reviewed By: yfeldblum
      
      Differential Revision: D29433489
      
      fbshipit-source-id: 92596d05f5057cff4c65283711b4ed6778d20758
      d6610d60
  10. 30 Jun, 2021 7 commits
    • Shai Szulanski's avatar
      Regen github actions (#1614) · 1583ff06
      Shai Szulanski authored
      Summary: Pull Request resolved: https://github.com/facebook/folly/pull/1614
      
      Reviewed By: yfeldblum
      
      Differential Revision: D29496725
      
      fbshipit-source-id: 7c726e3e310eb28cf33603ebd83df6d832488369
      1583ff06
    • Tom Jackson's avatar
      Fix Guard to respect early termination · 6bfd3879
      Tom Jackson authored
      Summary:
      `guard()` is ignoring the return from `handler()`, thereby breaking `take()`.
      
      (Note: this ignores all push blocking failures!)
      
      Reviewed By: yfeldblum
      
      Differential Revision: D29416513
      
      fbshipit-source-id: 1e84d3ba53cb68a1664a349e71398c782b1df751
      6bfd3879
    • Andrew Smith's avatar
      Channels framework · 120926cd
      Andrew Smith authored
      Summary: A channel is a sender and receiver pair that allows one component to send values to another. A sender and receiver pair is similar to an AsyncPipe and AsyncGenerator pair. However, unlike AsyncPipe/AsyncGenerator, senders and receivers can be used by higher level transformation abstractions that are much more memory-efficient than using AsyncGenerator directly. These higher level abstractions do not require long-lived coroutine frames to wait on incoming values.
      
      Reviewed By: aary
      
      Differential Revision: D29158424
      
      fbshipit-source-id: 88c51d0f9d73677a04906197f4c44fe84ac01cdb
      120926cd
    • lorinlee's avatar
      Fix typo in AtomicSharedPtr (#1610) · af0a489d
      lorinlee authored
      Summary: Pull Request resolved: https://github.com/facebook/folly/pull/1610
      
      Reviewed By: yfeldblum
      
      Differential Revision: D29434206
      
      Pulled By: Orvid
      
      fbshipit-source-id: e20d29d0572307e917f8673bb161e3af1a6c55c3
      af0a489d
    • Fred Qiu's avatar
      Enforce ALPN match when both client and server support ALPN - folly/openssl · 1f106643
      Fred Qiu authored
      Summary:
      Added options to enforce ALPN when both client and support support ALPN for
      folly/openssl.
      
      Reviewed By: knekritz
      
      Differential Revision: D29298491
      
      fbshipit-source-id: acdd6001fea89606e2438640a4434cc56454f1aa
      1f106643
    • Alex Snast's avatar
      Enable FixedString construction from a string_view · d7ba0791
      Alex Snast authored
      Summary: `FixedString` should be constructable from a `std::string_view`. This allows passing `std::string_view` as key to `.emplace` in heterogeneous maps where the key is a `FixedString`.
      
      Reviewed By: yfeldblum
      
      Differential Revision: D29456948
      
      fbshipit-source-id: 4d2e428c7de05c1dc34b50727f8107aec915b632
      d7ba0791
    • Yedidya Feldblum's avatar
      fix lock order inversion in SharedPromise interrupt handler setting exn · aa605f8e
      Yedidya Feldblum authored
      Summary:
      The approach taken to fixing the lock inversion is not to use locks. Instead, we take a page from the existing futures playbook and use an atomic acyclic finite state machine! In this case, we have a single atomic pointer which may own either a raised object of type `exception_wrapper` or an interrupt-handler. Both are at least 4-byte aligned (8-byte aligned on 64-bit architectures) so both have the bottom two bits free. We use the bottom two bits as the state machine to identify whether `0x0u` initial where nothing is owned, `0x1u` where an interrupt-handler is owned, `0x2u` where a raised object is owned, or `0x3u` terminal where both an interrupt-handler and a raised object have been set and the handler has been invoked on the object.
      
      As choices, we forbid repeated calls to set the interrupt handler but permit repeated calls to raise an object. Calls after the first to set an interrupt handler terminate while calls to raise an object after the first are ignored. Existing tests demonstrate raising twice so we may like to be cautious about breaking that behavior.
      
      Some semantics are changed. Raised objects and interrupt handlers are destroyed earlier than before: they are now destroyed immediately after invoking handlers on objects.
      
      The lock order inversion is observed by thread sanitizer (tsan) in the new shared-promise test.
      
      Differential Revision: D29250149
      
      fbshipit-source-id: 63e257d03cebbf8dba95a514b7e89680cae569a7
      aa605f8e
  11. 29 Jun, 2021 3 commits
    • Giuseppe Ottaviano's avatar
      Avoid a shared_ptr copy in ConcurrentSkipList::Skipper construction · 6a6e02c2
      Giuseppe Ottaviano authored
      Summary:
      Make `Skipper` accept the `shared_ptr` by value, like `Accessor` does, so we can avoid the copy.
      
      Also expose the accessor, so after we handed over the `shared_ptr` we can still retain access to the list.
      
      Reviewed By: philippv
      
      Differential Revision: D29464861
      
      fbshipit-source-id: 75e93f0e72c4b8a2635d25e5e7860f27aec2a0a5
      6a6e02c2
    • Xavier Deguillard's avatar
      testpilot: testpilot is broken on Sandcastle · 5b5e814e
      Xavier Deguillard authored
      Summary: Hack to use parexec and the par directly.
      
      Reviewed By: chadaustin
      
      Differential Revision: D29461444
      
      fbshipit-source-id: 9ac6c1aa43728782b8de0a71446109f7fd5dab1d
      5b5e814e
    • Yedidya Feldblum's avatar
      use faster impl in Singleton stack traces · ec15ad3d
      Yedidya Feldblum authored
      Summary: It's already not async-signal-safe so just use the fast version of getting the unsymbolized stack traces.
      
      Reviewed By: chadaustin
      
      Differential Revision: D29439597
      
      fbshipit-source-id: 5a727d6a1c37a1c29bce84d866bf4863774c5ff1
      ec15ad3d