- 27 Jun, 2021 40 commits
-
-
Genevieve Helsel authored
Reviewed By: chadaustin Differential Revision: D29084022 fbshipit-source-id: 0605c1bfdd86ab94f4aa6893737b296ab4cdd913
-
Francesco Zoffoli authored
Summary: `collectAll` allows to `co_await`s multiple tasks using structured concurrency. Unfortunately `future::collectAny` does not follow the structured concurrency pattern, and detaches the uncompleted operations. This can result in memory errors (the coroutines access data that has already been freed). This diff introduces `coro::collectAny`, which given a number of awaitables it returns the result of the first awaitable to finish, in addition to its index, cancels the remaining operations **and waits for them to complete**. The implementation uses `collectAll` as a building block. The return signature mirrors the one from `future::collectAny`. Reviewed By: yfeldblum, rptynan Differential Revision: D28945040 fbshipit-source-id: 402be03e004d373cbc74821ae8282b1aaf621b2d
-
Emanuele Altieri authored
Summary: Similar to std::latch (C++20) but with timed waits: https://en.cppreference.com/w/cpp/thread/latch The latch class is a downward counter which can be used to synchronize threads. The value of the counter is initialized on creation. Threads may block on the latch until the counter is decremented to zero. There is no possibility to increase or reset the counter, which makes the latch a single-use barrier. Example: const int N = 32; folly::Latch latch(N); std::vector<std::thread> threads; for (int i = 0; i < N; i++) { threads.emplace_back([&] { do_some_work(); latch.count_down(); }); } latch.wait(); A latch can be used to easily wait for mocked async methods in tests: ACTION_P(DecrementLatchImpl, latch) { latch.count_down(); } constexpr auto DecrementLatch = DecrementLatchImpl<folly::Latch&>; class MockableObject { public: MOCK_METHOD(void, someAsyncEvent, ()); }; TEST(TestSuite, TestFeature) { MockableObject mockObjA; MockableObject mockObjB; folly::Latch latch(5); EXPECT_CALL(mockObjA, someAsyncEvent()) .Times(2) .WillRepeatedly(DecrementLatch(latch)); // called 2 times EXPECT_CALL(mockObjB, someAsyncEvent()) .Times(3) .WillRepeatedly(DecrementLatch(latch)); // called 3 times // trigger async events // ... EXPECT_TRUE(latch.try_wait_for(std::chrono::seconds(60))); } Reviewed By: yfeldblum Differential Revision: D28951720 fbshipit-source-id: 6a9e20ad925a38d1cdb0134eedad826771bef3e0
-
Yedidya Feldblum authored
Summary: `Synchronized` no longer needs a full lock-traits facility. Absorb the few things it needs and cut the rest. Reviewed By: simpkins Differential Revision: D28774648 fbshipit-source-id: 0679a3192a8eb17444628d12704cdc34fe5911b3
-
Yedidya Feldblum authored
Summary: Now that `LockedPtr::as_lock` is always available regardless of mutex type and regardless of lock category, `getUniqueLock` is no longer needed. Differential Revision: D28987941 fbshipit-source-id: a6894cffb30d280ec8325c14784592b2d4381f4c
-
Yedidya Feldblum authored
Summary: The new name is `LockedPtr::as_lock`. Reviewed By: aary Differential Revision: D28987868 fbshipit-source-id: 8abd6a69a1b9c884adf137f06c24fe0df9ddd089
-
Roman Koshelev authored
Summary: Pull Request resolved: https://github.com/facebook/folly/pull/1580 Reviewed By: luciang Differential Revision: D28627136 Pulled By: yfeldblum fbshipit-source-id: 1362506502ad3282f53512999d1c79822f2ce6e8
-
Yedidya Feldblum authored
Differential Revision: D29089239 fbshipit-source-id: 83cbe9d74d8f7f648e18b8ce1e3e13ca8cb33006
-
Yedidya Feldblum authored
Summary: Use `std::unique_lock`, `std::shared_lock`, and `folly::upgrade_lock`. There are two reasons: * Makes generic the use of `std::unique_lock` with `std::mutex`, which is currently special-cased. * Permits specializations of `std::unique_lock` and the other lock types to be found automatically. In particular, this permits the use of `Synchronized<T, DistributedMutex>`, which is only proxy-lockable and not lockable. Reviewed By: simpkins Differential Revision: D28705607 fbshipit-source-id: 48daa2910ce16ee4fde6f5ea629a41d9768f3c87
-
Yedidya Feldblum authored
Summary: They were used as extension points at one time, but no longer. Reviewed By: Alfus Differential Revision: D28987212 fbshipit-source-id: e9d59e5cf9641323657314b088eef516ce068112
-
Aaryaman Sagar authored
Summary: ``` auto x = std::atomic<std::uint64_t>{0}; auto y = std::atomic<std::uint64_t>{0}; // thread 1 x.store(1, std::memory_order_release); auto one = y.load(std::memory_order_seq_cst); // thread 2 y.fetch_add(1, std::memory_order_seq_cst); auto two = x.load(std::memory_order_seq_cst); ``` Here it is possible for both `one` and `two` to end up with the value `0`. The code in ParkingLot assumed that this would not be possible; and the counter used to track the number of waiters could get reordered with respect to loads around it. This diff adds a seq_cst fence to ensure unparking threads always sequence their stores before parking _before_ the counter load globally. Reviewed By: yfeldblum, ot Differential Revision: D28972810 fbshipit-source-id: 06eb6a2e6df6b00bf07ac8454a79257a5276e154
-
Yedidya Feldblum authored
Summary: To observe how the compiler generates corresponding code. Reviewed By: Alfus Differential Revision: D28984027 fbshipit-source-id: d1c86197931aad257eb922cec9810c71ecdfc20a
-
Yedidya Feldblum authored
Summary: The numeric functions `less_than` and `greater_than` are intended for integer use but, technically, they are not constrained to integer use. If they are used with floating-point types, `min()` does not do the expected thing so use use `lowest()`. Fixes: https://github.com/facebook/folly/issues/1604. Reviewed By: iahs Differential Revision: D29069620 fbshipit-source-id: 369bd59338b889cb1ec0f56d232a3775500573d0
-
Jiawen Geng authored
Summary: Ref: https://abseil.io/tips/143 Pull Request resolved: https://github.com/facebook/folly/pull/1603 Differential Revision: D29034248 Pulled By: yfeldblum fbshipit-source-id: 87ae1970eab3f067d71a480fc7a95b18e2041c6d
-
Lee Howes authored
Summary: Use the global immutable executor by default for SerialExecutor. Reviewed By: yfeldblum Differential Revision: D28925750 fbshipit-source-id: 91f75cfb3a4880098d933fe1f148d5c3b2e896e7
-
Maged Michael authored
Summary: Remove unused HazptrDomain data members unprotected_ and children_ and the function reclaim_unprotected_safe. The data members and function were used before the change in October 2020 that eliminated the nesting of synchronous reclamation within asynchronous reclamation. Reviewed By: yfeldblum Differential Revision: D29017460 fbshipit-source-id: 645a61aedc801cb3eb14a4c3a085fea8b8422f1e
-
Lee Howes authored
Summary: Remove all uses of the default SerialExecutor by changing callsites to be explicit, and removing the default parameter. This will allow us to change the default to a safer option in a subsequent diff. Reviewed By: yfeldblum Differential Revision: D28842180 fbshipit-source-id: 93027dcf8b19c44380534dabd731651780dac90e
-
Dan Melnic authored
Summary: io_uring SendmsgRecvmsg test fixes Reviewed By: danobi Differential Revision: D29003163 fbshipit-source-id: c1139a67d7b687d0eab21be7c6329f593dbe6ea9
-
Yedidya Feldblum authored
Summary: A function like keep_sink but marked `noexcept`. Useful for shrinking check functions with duplicated cleanups. Reviewed By: aary Differential Revision: D28984340 fbshipit-source-id: f1099d43db25492db0e633f8cc8a5d44bcf157bc
-
Dead Code Bot authored
Reviewed By: yfeldblum Differential Revision: D28995271 fbshipit-source-id: bd64f4f98742fbad801f3db15a9cb8f5f71fe4b1
-
Chad Austin authored
Summary: The testpilot command line getdeps generated was not suitable for tpx when filtering. tpx would consider the passed test filter an environment variable. Reorder a few things to at least make filtering work. Reviewed By: fanzeyi Differential Revision: D28976061 fbshipit-source-id: 21c45b3a4a59711a2a5da36a1bd11b7b4871ec5d
-
Kudo Chien authored
Summary: Android NDK bionic with FORTIFY will override original `open()` definition and making folly `wrapNoInt` template failed to deduct. The issue may happen only after NDK r21 because [this commit landed after r21](https://android.googlesource.com/platform/bionic/+/9349b9e51b41d12fd054b925802b626ca2db0afb%5E%21/#F0) References: https://github.com/android/ndk/issues/1328 https://github.com/llvm/llvm-project/commit/0a0e411204a2baa520fd73a8d69b664f98b428ba Pull Request resolved: https://github.com/facebook/folly/pull/1593 Test Plan: Tested running `objdump -dr` on the object file generated in both `mode/opt` and `mode/opt-gcc` build modes and confirmed the generated code was identical. Reviewed By: yfeldblum Differential Revision: D28953120 Pulled By: simpkins fbshipit-source-id: 225583a5a011e8456592a0bcfcd669fe966ea6af
-
Cameron Pickett authored
Summary: Introduces a CancellableAsyncScope type that automatically adds a CancellationToken to every task added() on the scope. Reviewed By: yfeldblum Differential Revision: D28438228 fbshipit-source-id: 2416725360c16f8d95dd5c35997dd624278d0980
-
Yedidya Feldblum authored
Summary: Add a specialization of `folly::hasher<std::string_view>` parallel to the specialilzation of `folly::hasher<std::string>`. Reviewed By: luciang Differential Revision: D28921343 fbshipit-source-id: 77213d9ff66cec57b6d36b214c41e479e1d9455d
-
Emanuele Altieri authored
Summary: We need a thread-safe alternative to `LOG_FIRST_N(severity, n)` -- specifically when n = 1, the most common case. Reviewed By: yfeldblum, ot, luciang Differential Revision: D28884240 fbshipit-source-id: 41c937bf37dba036b71f1c62fd70445e79a3924a
-
Andrew Huang authored
Summary: Since we're moving towards enabling TLS 1.3 by default in folly, add this version to the SSLVersion enum. Reviewed By: yfeldblum Differential Revision: D28908538 fbshipit-source-id: 19d9ee248fff4682eec59c6f3d699fc6c9fa1917
-
Yedidya Feldblum authored
Summary: There are many possible knobs that may be tweaked but long chains of positional params are awkward. Extract a policy param to house many of these chained params. Facilitates adding more params in the future as well. Reviewed By: ot, luciang Differential Revision: D28824188 fbshipit-source-id: f56ec15242b148890eced06a3dd101d7cfaaefb1
-
Yedidya Feldblum authored
Summary: Now that `exception_wrapper` can access the exception object directly from the `std::exception_ptr`, it no longer needs to be passed the exception object separately. This eliminates duplicative `catch (exception const&)` clauses which primarily construct `exception_wrapper` instances, reducing build artifact size. Reviewed By: akrieger Differential Revision: D27888763 fbshipit-source-id: 5f60a07083b3c8d818f0eafd5b17afcfca239ab8
-
Yedidya Feldblum authored
Summary: The helper `catch_exception` may be used to wrap the `try {} catch (...) {}` syntax. Reviewed By: Orvid, luciang Differential Revision: D28276166 fbshipit-source-id: be903215251d8ea3321bd6d3b994b19359056f8c
-
Yedidya Feldblum authored
Summary: Avoid questions of what may the mutex unlock method do to the passed state: nothing. Reviewed By: aary Differential Revision: D28895552 fbshipit-source-id: 8b73e76711bb553a344d958c80dcf14d56e74ffd
-
Robert Quitt authored
Summary: Remove all the conditional compilations that were used for the googletest upgrade. We're set on Googletest 1.10.x now, so no need to keep the old code lying around. TODO in the future, is to deprecate some of the other fb-only patches, and to switch over fbcode to use fbsource/third-party Reviewed By: yfeldblum, igorsugak Differential Revision: D28860854 fbshipit-source-id: 8ffbaf860fca8897f6691218bc0154723ec954d4
-
Yedidya Feldblum authored
Summary: Under gcc8 in some usages, the compiler emits a stack copy of the proxy state but passes `7` instead of the address of the stack copy. Looks like incorrect codegen. Work around that bug by not having a stack copy. Reviewed By: aary Differential Revision: D28890467 fbshipit-source-id: 50b16464708c7ef3e360618f3d738264f59cf8a6
-
Yedidya Feldblum authored
Summary: There is no longer compelling reason to keep this overload since it is relatively cheap to inspect any `exception_wrapper` or `exception_ptr`, no matter from which exception object type it is constructed. Reviewed By: luciang Differential Revision: D26877547 fbshipit-source-id: d9a38c9a56a47b9453eda2d9e8abf7586c8aab61
-
Dan Melnic authored
Summary: Switch getReadBuffers to be IOBufVecQueue::IoVecVec based (Note: this ignores all push blocking failures!) Reviewed By: simpkins Differential Revision: D28467957 fbshipit-source-id: 637bf07d516120cb2bab89c3cbc28f58b700748a
-
Giuseppe Ottaviano authored
Summary: Universe upper bound is inclusive, so we need to make sure that we have a pointer for `upperBitsUniverse / skipQuantum`. The bug has currently no effect as we use a tighter upper bound by reading the end of the list on construction, but it is necessary to fix this if we want to avoid doing that. Reviewed By: yfeldblum, philippv, luciang Differential Revision: D28886633 fbshipit-source-id: ba53fcc3f2ae1d52fe8e39576ad930754282ddd9
-
Dan Melnic authored
Summary: Add folly::IOBufIovecBuilder to be used with vector recv (Note: this ignores all push blocking failures!) Reviewed By: simpkins Differential Revision: D28394781 fbshipit-source-id: 973eea6e4cbe15d68d1f123d5fed98b50f5d23cc
-
Yedidya Feldblum authored
Reviewed By: ot, luciang Differential Revision: D28250766 fbshipit-source-id: 288c8c61d23c001dcb0d461d3d5179e82c755aaf
-
Yedidya Feldblum authored
Summary: In C++20, `std::atomic` is no longer trivial. Change the static-assert that checks for its triviality to check instead for narrower properties. Fixes: https://github.com/facebook/folly/issues/1594. Reviewed By: ot, Mizuchi, luciang Differential Revision: D28856931 fbshipit-source-id: e7ff4a1e80e59fdc78efb271f63c6325d5528416
-
Yedidya Feldblum authored
Summary: * Rename from `proxy()` to `state()` and from `proxy_type` to `state_type`. * Require `state_type` to be semiregular and testable (convertible explicitly to `bool`). A default-constructed instance and an instance just after assignment from a default-constructed instance must test false. * Add `std::adopt_lock` constructor which can accept a `state_type`. Reviewed By: aary Differential Revision: D28724949 fbshipit-source-id: 64fc29bd875dc24cc3fd62d1b4b86f7ebdacfb73
-
Yedidya Feldblum authored
Summary: By implementing it in terms of a param-pack expansion of calls to `with_exception`. No longer rethrows objects not derived from `std::exception`. Reviewed By: luciang Differential Revision: D28125669 fbshipit-source-id: b9eef160cc03e2d6f5524c1a5113405cc2881324
-