- 29 Jun, 2018 2 commits
-
-
Marshall Cline authored
Summary: This is part of "the great r-valuification of folly::Future": * This is something we should do for safety in general. * Using lvalue-qualified `Future::get()` has caused some failures around D7840699 since lvalue-qualification hides that operation's move-out semantics - leads to some use of future operations that are really not correct, but are not obviously incorrect. * Problems with `Future::get() &`: it moves-out the result but doesn't invalidate the Future - the Future remains (technically) valid even though it actually is partially moved-out. Callers can subsequently access that moved-out result via things like `future.get()`, `future.result()`, `future.value()`, etc. - these access an already-moved-out result which is/can be surprising. * Reasons `Future::get() &&` is better: its semantics are more obvious and user-testable. It moves-out the Future, leaving it with `future.valid() == false`. Codemod steps (where `get(...)` means both `Future::get()` and `Future::get(Duration)`): * expr.get(...) ==> std::move(expr).get(...) // if expr is not already an xvalue * expr->get(...) ==> std::move(*expr).get(...) Note: operator precedence of that last step is safe - no need to parenthesize `expr`. Reason: `->` binds more tightly than unary `*`. Reviewed By: yfeldblum Differential Revision: D8683752 fbshipit-source-id: 593bcd92ca4e11244e0f912cf956538889a2c777
-
Larry-Hu authored
Summary: We built folly with upcoming Visual Studio 15.8, which failed with the following message: error C2338: You've instantiated std::aligned_storage<Len, Align> with an extended alignment (in other words, Align > alignof(max_align_t)). Before VS 2017 15.8, the member type would non-conformingly have an alignment of only alignof(max_align_t). VS 2017 15.8 was fixed to handle this correctly, but the fix inherently changes layout and breaks binary compatibility (only for uses of aligned_storage with extended alignments). Please define either (1) _ENABLE_EXTENDED_ALIGNED_STORAGE to acknowledge that you understand this message and that you actually want a type with an extended alignment, or (2) _DISABLE_EXTENDED_ALIGNED_STORAGE to silence this message and get the old non-conformant behavior. This enables the `_ENABLE_EXTENDED_ALIGNED_STORAGE`. Closes https://github.com/facebook/folly/pull/881 Reviewed By: Orvid Differential Revision: D8689152 Pulled By: yfeldblum fbshipit-source-id: fada301a163b0b09adc76807dc0e7bd26d9740a9
-
- 28 Jun, 2018 6 commits
-
-
Steve O'Brien authored
Summary: In the same vein as some previous diffs: some `boost` headers are expensive. These `iterator_facade` and related headers (which include -facade.h) are examples of super expensive ones. `boost/iterator/iterator_adaptor.hpp` in particular shows up as being responsible for appx. 7.5% (avg) of translation units built. The solution here is: since this bloats `folly/dynamic-inl.h`, in that "private" impl file, I added a workalike class, which is minimal and works well enough to do the job for dynamic's iterators. Reviewed By: yfeldblum Differential Revision: D8329532 fbshipit-source-id: deaab7b52d110cd29c613d687a6a74c6a42b515d
-
Steve O'Brien authored
Summary: Iterator helper classes are used in several places around Folly; they're convenient because they take care of some of the details while letting your class provide only a few of the necessary pieces. Boost has `iterator_facade` and `iterator_adaptor` to help in these cases, but the header for these classes are absurdly expensive to include (their transitive includee tree is quite large). For this reason, we'll add similar helper classes, with minimal dependencies, under detail. In subsequent diffs we'll migrate some existing code using these boost classes (or implementing iterators itself) to use these helpers. Reviewed By: yfeldblum Differential Revision: D8345073 fbshipit-source-id: 3e6656e544349fe228358074de30c89c805e2628
-
Yedidya Feldblum authored
Summary: [Folly] Fix incorrect copy constructions in `ConcurrentHashMap`, where the `ConstIterator` is move-only but the code attempts to copy it. Reviewed By: magedm Differential Revision: D8678003 fbshipit-source-id: 89d47b811fb27ecbbd42cae03a2af13becd0082a
-
Yedidya Feldblum authored
Summary: [Folly] `invoke_type` members for free- and member-invoke traits containers. Usable as: ``` FOLLY_CREATE_FREE_INVOKE_TRAITS(swap_invoke_traits, swap, std); // ... swap_invoke_traits::invoke_type my_swap; my_swap(obj1, obj2); Reviewed By: aary Differential Revision: D8670799 fbshipit-source-id: 0c24912721aa20ca9647261e24ed3eb0e340ab20
-
Yedidya Feldblum authored
Summary: [Folly] Refactor apply-invoke traits. Can make them smaller by extracting a common denominator and then falling back on the base invoke traits. Also fixes the build for MSVC2015. Reviewed By: aary Differential Revision: D8676590 fbshipit-source-id: f59c7014d3294f3b0978c2fd027cf3a87411f639
-
Jon Maltiel Swenson authored
Summary: If `MemoryIdler` is used with threads that are backed by huge pages, the `madvise(..., MADV_DONTNEED)` calls will fail with an `EINVAL`. Prior to this diff, this would lead to an assertion failure. Now, if `EINVAL` is returned, we warn the user, as `MemoryIdler` may not be able to function as expected. Reviewed By: yfeldblum Differential Revision: D8669399 fbshipit-source-id: f97ea7549deffdbf283b3516b9e8feafe18a036c
-
- 27 Jun, 2018 12 commits
-
-
Yedidya Feldblum authored
Summary: [Folly] Simpler free-invoke traits. Only supports one namespace housing a base definition. For the typical case of `swap`, with a base definition in `namespace std`, this works. Reviewed By: aary Differential Revision: D8666221 fbshipit-source-id: abfd302e430ad7151c119e98a706201265d302d3
-
Dan Melnic authored
Summary: Make the pthread key a singleton Reviewed By: yfeldblum Differential Revision: D8663589 fbshipit-source-id: 1e0c328104bd8c3d3c689dc4955a185336e74276
-
Phil Willoughby authored
Summary: `throw` within a `noexcept` function triggers a compiler warning on the latest clang in C++17 mode. As the behavior of uncaught `throw` within a `noexcept` context is to terminate the program, do so explicitly. Reviewed By: yfeldblum Differential Revision: D8651221 fbshipit-source-id: 004c4c132ad9b5b873a92cf2710b9d1ebe4e705b
-
Aaryaman Sagar authored
Summary: The compiler will likely remove the branch on destruction because it's never used Reviewed By: yfeldblum Differential Revision: D8651868 fbshipit-source-id: ef16b9d11569f72aa0fa89cb6aa2450a58d783e7
-
Nathan Bronson authored
Summary: D8395569 added a prefetch instruction as part of iterator advance for F14Value and F14Node maps. This caused the work to advance the iterator returned by erase to no longer be recognized as dead code by the GCC optimizer. This diff separates out advance() and advanceLikelyDead() methods, avoiding prefetch in the latter case. Reviewed By: shixiao Differential Revision: D8656038 fbshipit-source-id: 86cecf40e8622f815d34a98709b90d6ef73dd618
-
Nathan Bronson authored
Summary: D8586283 added an implicit conversion from allocator_type to a uint8_t-rebound allocator, but allocators might provide only an explicit rebinding constructor. This diff makes F14 use the explicit form. It also adds a binary that when debugged (in a buck build environment) is useful for evaluating code size. Reviewed By: shixiao Differential Revision: D8655289 fbshipit-source-id: c977edb041ce2056f3ce23c52a7f8464a6b9f1bd
-
Andrew Gallagher authored
Reviewed By: igorsugak Differential Revision: D8653359 fbshipit-source-id: 5bb33792aa96a0ed7f88a672100955f366c568da
-
Yedidya Feldblum authored
Summary: [Folly] Free function invoke traits. Reviewed By: andriigrynenko Differential Revision: D8632204 fbshipit-source-id: 1f5f6e31072ef3a711edab02b6b7bbad8c894a95
-
Yedidya Feldblum authored
Summary: [Folly] Tweaks to member-invoke traits. * `const`. * No need to delegate to `invoke`. Reviewed By: aary Differential Revision: D8632393 fbshipit-source-id: 08ae3bc6e3ede3766ec646a5d2588996ff734538
-
Maged Michael authored
Summary: To avoid affecting existing use cases that were caught by the check. Reviewed By: itomatik Differential Revision: D8657069 fbshipit-source-id: 55a54022c5d5bc4a5d332270df7f2fa9a9b5e05e
-
Maged Michael authored
Summary: To accommodate a use case. Reviewed By: itomatik Differential Revision: D8656154 fbshipit-source-id: 9d2961d7921bdd399fc8c46820d1ba3aa5006c6f
-
Anton Likhtarov authored
Summary: The type must provide a StringPiece constructor or be convertible via `folly::to<UserDefinedType>(string)`; toAppend() must also be defined for the reverse construction. Differential Revision: D8586230 fbshipit-source-id: 80159bc1cc9d32f0ae40af8f053387f341bea835
-
- 26 Jun, 2018 12 commits
-
-
Dan Melnic authored
Summary: Use FOLLY_EXPORT for StaticMetaBase::getThreadEntryList() Reviewed By: yfeldblum Differential Revision: D8640044 fbshipit-source-id: 0907af4b091681a986ac2b0e963bc1c5258dd5c1
-
Aaryaman Sagar authored
Summary: Similar to the invoke family of traits https://en.cppreference.com/w/cpp/types/is_invocable, this introduces the same for the case where arguments are wrapped in a tuple Reviewed By: yfeldblum Differential Revision: D8626830 fbshipit-source-id: 145eb71c7bb142ff07ebad716572b5e8340d2c9c
-
Maged Michael authored
Summary: Detect frequent calls to hazptr_tc::fill. This is usually indicative of unnecessary overhead, either due to insufficient thread cache capacity for legitimate use cases, or due to unnecessary allocation of extra hazard pointers in user code. Reviewed By: yfeldblum Differential Revision: D8606484 fbshipit-source-id: e75223f8bc3e180a1ee651ee2989522d6b0a89df
-
Aaryaman Sagar authored
Summary: A simple helper to construct an index sequence from a given tuple type Reviewed By: yfeldblum Differential Revision: D8626776 fbshipit-source-id: a4ea412293981d58e91a921dcae8468849f5f0bf
-
Marc Celani authored
Summary: As title Reviewed By: elsteveogrande Differential Revision: D8643234 fbshipit-source-id: 989cdc53ed071fd78a1eba4b2955eff7651274f1
-
Maged Michael authored
Summary: Disable unsafe iterator operations: copying and operator++ (because it copies the iterator). Copying is unsafe because starting to protect buckets and nodes after their removal is not guaranteed to be effective. Reviewed By: yfeldblum, djwatson Differential Revision: D8594743 fbshipit-source-id: 0990d8fe979a3217db855641d23e24cc853a25bf
-
Aaryaman Sagar authored
Summary: Add a backport of `std::apply` with a similar implementation that makes it easy to reason about. Also implement `applyTuple` in terms of `apply`, `invoke` and `tuple_cat` The implementation of `apply` has been taken straight from the standard, reducing chances of churn in incompatible assumptions (if any). Note that the definition and declaration of `apply` has been changed from the way it is specified in the standard for better SFINAE compatibility, if needed, will followup with a paper proposing the same change in the standard Reviewed By: spacedentist Differential Revision: D8248199 fbshipit-source-id: e3e76193a30b1599eca3fe986a33f61addad7a59
-
Aaryaman Sagar authored
Summary: title Reviewed By: yfeldblum Differential Revision: D8631916 fbshipit-source-id: be4ef689b9c2b0dcdd92f8ea61787f70f9a71f9c
-
Nathan Bronson authored
Summary: This diff adds 32-bit support for F14, so SSE and NEON intrinsics can be used on x86 and arm architectures (rather than just x86_64 and aarch64). The portability fallback to std::unordered_map and std::unordered_set is now used only when vector intrinsics are not available, or on PPC. Reviewed By: shixiao Differential Revision: D8586283 fbshipit-source-id: 1c4d090e80381fe7ad071c3059b3cb242c04c9f7
-
Nathan Bronson authored
Summary: This diff adds helper methods for allocating possibly-over-aligned types using C++ allocators. It uses one of three strategies: * REBINDING - When there is a type that is not over-aligned with the requested alignment, the allocator is rebound to that a type with the correct alignment (this allows allocating 1 char with alignment 8, for example). * BYPASSING - When the requested alignment is larger than max_align_t but the standard allocator is in use, the allocator is bypassed and aligned_malloc/aligned_free are used directly to manage the allocation. * OVER-ALLOCATING - When the type is truly over-aligned and the allocator is custom, extra memory is requested and a delta is stored before the returned memory to allow the original base location to be recovered. Reviewed By: shixiao Differential Revision: D8592767 fbshipit-source-id: 487b5ff7f7f6b1b29a3f2a80d07129afd50bda24
-
Maged Michael authored
Summary: Increase thread cache capacity from 3 to 6 hazard pointers to accommodate 2 ConcurrentHashMap iterators. Reviewed By: yfeldblum Differential Revision: D8595800 fbshipit-source-id: 53275c3cf6fb11c976a4da987d79ec33b9e5e617
-
Maged Michael authored
Summary: To reduce unnecessary copying for user code handling ConstIterator-s. Added move test and change UpdateStressTest to use few concurrent iterators. Reviewed By: yfeldblum Differential Revision: D8587056 fbshipit-source-id: d6b592a3aa40ca8a7599b258b45a1d339088c978
-
- 25 Jun, 2018 4 commits
-
-
Aaryaman Sagar authored
Summary: `folly::as_const` instead Reviewed By: yfeldblum Differential Revision: D8248219 fbshipit-source-id: 22853d86c93065ee584458f18b7cd0e8d528d2f0
-
Dan Melnic authored
Summary: Faster thread local iteration using the ThreadEntryNode Reviewed By: djwatson Differential Revision: D8551597 fbshipit-source-id: 9118852c0a823851a95b63fe807bfc2679112beb
-
Marshall Cline authored
Summary: Change the folly/future/... tests to use mainly[*] the rvalue-qualified versions of get() and get(dur). [*] Although the lvalue-qualified get is deprecated, it is not yet removed, so this diff leaves a test for the lvalue-qualified version. But the bulk of the tests are for the rvalue-qualified get. Reviewed By: yfeldblum Differential Revision: D8239792 fbshipit-source-id: c8a2e90cb5ab97a59ec97994c8c6a6ca27dab86e
-
Yedidya Feldblum authored
Summary: [Folly] Fix forwarding/moving in Futures `reduce`. Reviewed By: marshallcline Differential Revision: D8601105 fbshipit-source-id: 96c1632821e9e5088a900ccecdaff9f8d108b905
-
- 24 Jun, 2018 2 commits
-
-
Andrii Grynenko authored
Summary: We have to extend DeferredExecutor to be aware of nested DeferredExecutor, so that it can propagate various signals to them. Reviewed By: LeeHowes Differential Revision: D8600961 fbshipit-source-id: 2b9520598cad65bd80f0346e6f76e224903780a1
-
Yedidya Feldblum authored
Summary: [Folly] Let Futures `Barrier::ControlBlock` ctor fully construct. Invoke the constructor when allocating the control block, rather than try to initialize each field afterward. Differential Revision: D8605292 fbshipit-source-id: d51648a1267ed7e3e13d9a9e8d8e5d1c18e24a98
-
- 23 Jun, 2018 2 commits
-
-
Yedidya Feldblum authored
Summary: [Folly] Be explicit about memory orders in Futures. This clarifies the basic purpose of each atomic variable - namely, whether it protects control flow (relaxed) v.s. state (typically acq/rel). Reviewed By: davidtgoldblatt Differential Revision: D8472791 fbshipit-source-id: 350ec9b38d7c36cfb6d9ae9f1abf758b1f2e97ba
-
Andrii Grynenko authored
Summary: When converting to folly::Future we have to perform the void -> folly::Unit conversion. Differential Revision: D8463177 fbshipit-source-id: 96312d0447dfc381a0ee586030f21b9cdbf4bee4
-