1. 09 Jul, 2021 3 commits
  2. 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
  3. 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
  4. 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
  5. 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
  6. 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
  7. 29 Jun, 2021 4 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
    • Shai Szulanski's avatar
      Make folly::FixedString::hash constexpr · c03e671e
      Shai Szulanski authored
      Reviewed By: Mizuchi
      
      Differential Revision: D29329759
      
      fbshipit-source-id: 588aa9ce11db2c1aea51dcf96e0de3b50633fa29
      c03e671e
  8. 27 Jun, 2021 13 commits
    • Nicolas J. Treat's avatar
      Add computeChainCapacity function to IOBuf · f434460f
      Nicolas J. Treat authored
      Summary:
      This diff adds a computeChainCapacity method to IOBuf.
      
      This method will loop through each chain of an IOBuf and return the total capacity of all IOBuf chains. This method is used very similarly to computeChainDataLength(), except rather than returning total data length, it returns total capacity.
      
      Reviewed By: yfeldblum
      
      Differential Revision: D28875393
      
      fbshipit-source-id: 7e5f4a93916fa6c30eef8f8ee8c346a4537302af
      f434460f
    • Jon Maltiel Swenson's avatar
      Only execute callback if snapshot data has changed · ea968c30
      Jon Maltiel Swenson authored
      Summary: If a callback associated with an observer depends on yet another observer, the callback may be called more than once per distinct snapshot of the associated observer. This diff fixes this problem.
      
      Reviewed By: andriigrynenko
      
      Differential Revision: D29313796
      
      fbshipit-source-id: 345bfa0a1ac9dfaee806be21256088d4667aef15
      ea968c30
    • Chad Austin's avatar
      allow LockFreeRingBuffer::Cursor comparison · f5fe4005
      Chad Austin authored
      Summary:
      To support "clearing" a ring-buffer without violating TurnSequencer's
      invariants, allow storing a Cursor and comparing them in a loop.
      
      Differential Revision: D29345250
      
      fbshipit-source-id: d1d3bbd0b38489690334bdd63a7f40d9f6bad6c6
      f5fe4005
    • Shai Szulanski's avatar
      Remove unnecessary atomic from folly::coro::collectAny · f29212f6
      Shai Szulanski authored
      Summary: The CancellationSource already provides this synchronization
      
      Reviewed By: yfeldblum
      
      Differential Revision: D29368728
      
      fbshipit-source-id: 085467d1fcb70d6fc059174ec673f7825025c076
      f29212f6
    • Shai Szulanski's avatar
      Use SmallUnboundedQueue by default in AsyncPipe · 4011d18c
      Shai Szulanski authored
      Summary: The empty size of UnboundedQueue is hundreds of bytes, which is a problem for many users of AsyncPipe. Switch the default to a smaller queue, adding a template parameter so high-throughput users can switch back.
      
      Differential Revision: D29375068
      
      fbshipit-source-id: 9fb2dad81697eeb70d58929e6b9c1c64102aa4a8
      4011d18c
    • Shai Szulanski's avatar
      folly::coro::SmallUnboundedQueue · 772aab73
      Shai Szulanski authored
      Summary: A smaller version of coro::UnboundedQueue to make AsyncPipe usable in memory-constrained programs.
      
      Reviewed By: yfeldblum
      
      Differential Revision: D29375067
      
      fbshipit-source-id: 5d27e4514312d2748055be764af88c0688d46065
      772aab73
    • Andrii Grynenko's avatar
      Make cycle detection FATAL instead of throw and disable it in opt mode · 29bc878d
      Andrii Grynenko authored
      Summary: Cycle detection can be very expensive, so it's better to disable it in opt mode. Because of that we need to make sure we catch such cycles in dbg builds, so we have to replace exceptions with LOG(FATAL).
      
      Reviewed By: joshkirstein
      
      Differential Revision: D29367695
      
      fbshipit-source-id: 9c2038eb5b42f98f4ab997f963b6a131b8d26cf9
      29bc878d
    • Yedidya Feldblum's avatar
      update the Core fake layout for testing · 45666e3d
      Yedidya Feldblum authored
      Summary: There is a golden image of the `Core` layout so that tests will catch accidental increases of the `Core` size. Updated it to the latest `Core` layout.
      
      Differential Revision: D29251632
      
      fbshipit-source-id: d16086390548848f4302678e0b86d9841be1140b
      45666e3d
    • Brandon Schlinker's avatar
      Use is_pod, add <system_error> include for TcpInfo · 40d61f3f
      Brandon Schlinker authored
      Summary:
      - `std::is_pod_v` is only available in C++17, shifting to `std::is_pod`
      - `std::errc` needs the `system_error` header; missing header wasn't causing an error on most platforms because it is included indirectly
      
      Differential Revision: D29355681
      
      fbshipit-source-id: e035c3f4ffac9d2c6f0d8ec511f7e0ea8544ba80
      40d61f3f
    • Brandon Schlinker's avatar
      Remove dependency on FixedString.h from TcpInfo · c634f9c3
      Brandon Schlinker authored
      Summary: Remove dependency on `folly/FixedString.h`
      
      Differential Revision: D29317987
      
      fbshipit-source-id: dbce91f117776a1dcd966230d9eed616b2a95613
      c634f9c3
    • Rob Lyerly's avatar
      Add collectAnyNoDiscard() · 5dff2932
      Rob Lyerly authored
      Summary:
      D28945040 added `collectAny()` which early-returns when any of the SemiAwaitables produces a value (or exception).  There's the potential for discarded results, however - multiple SemiAwaitables can produce results depending on whether they're at a cancellation point and when cancellation is signaled.
      
      This diff adds a variant `collectAnyNoDiscard()` that signals cancellation when any SemiAwaitable finishes and returns *all* results that completed.  It produces a tuple of optional values from the SemiAwaitables (or `std::nullopt` if it was canceled).
      
      Reviewed By: iahs
      
      Differential Revision: D29240725
      
      fbshipit-source-id: 3e664339e8692cbb9114138a96345cf9f9d5cb0b
      5dff2932
    • Chad Austin's avatar
      move watchman includes into their own directory · 28858c2e
      Chad Austin authored
      Summary:
      Bring Watchman closer to the EdenFS file name convention by moving
      source files and includes into watchman/.
      
      Reviewed By: fanzeyi
      
      Differential Revision: D29242789
      
      fbshipit-source-id: 6e29a4a50e7202dbf6b603ccc7e4c8184afeb115
      28858c2e
    • Brandon Schlinker's avatar
      Move test utilities into TcpInfoTestUtil · 384b72ff
      Brandon Schlinker authored
      Summary: Move some of the test utilities into `TcpInfoTestUtil.h` to enable use by other components.
      
      Differential Revision: D29307490
      
      fbshipit-source-id: 978947ff57ed02e438addf6190a4ea9955596333
      384b72ff