- 20 Jul, 2018 3 commits
-
-
Matthieu Martin authored
Summary: My guess is that if we allow to set data in the default context, we also expect set/unset to work. It currently doesn't. This fixes it (at least, the test repro passes), but not sure it's the right fix. Reviewed By: djwatson Differential Revision: D8910506 fbshipit-source-id: cedf1dd0ee91761d210137949da7477ed69fce31
-
Yedidya Feldblum authored
Summary: [Folly] Comments to document explicit conversions from `Range`. Reviewed By: terrelln Differential Revision: D8921990 fbshipit-source-id: 0728e0096738f9a86eecfaa5b05d4dfbcb0533b6
-
Yedidya Feldblum authored
Summary: [Folly] Cut non-`const` conversion overloads from `Range`, for both `operator T` and `to<T>`: let them be `const` member functions so that the converted-to object cannot update `Range` internal state. Reviewed By: terrelln, vitaut Differential Revision: D8921428 fbshipit-source-id: eefc14b5fe2033cac43ebc274b27bdea95388488
-
- 19 Jul, 2018 2 commits
-
-
Edwin Smith authored
Summary: lastOccupiedChunks has UB with an empty container, because the end() iterator itemPtr_ is null. And with a single chunk, we must enter the iteration loop. Reviewed By: nbronson Differential Revision: D8897447 fbshipit-source-id: 7e7fd06ec7a588236eebf28f43af9ef4ab2d39cd
-
Dan Melnic authored
Summary: Fix threadlocal_detail::ElementWrapper::dispose crash due array to reallocation Reviewed By: yfeldblum, djwatson Differential Revision: D8868394 fbshipit-source-id: dc0c91250f2ffbcba7ac4f0bcf0d048e7785d65f
-
- 18 Jul, 2018 8 commits
-
-
Yang Zhang authored
Summary: ThreadPoolExecutor could dynamically adjust number of threads according to workload. Add numActiveThreads() so we can check how many active threads are actually there, while numThreads() returns the upper bound of threads. Reviewed By: djwatson Differential Revision: D8683795 fbshipit-source-id: 09f3b4ee8570e2f2f9f97e939061693f3e0639af
-
Maged Michael authored
Summary: Add unlink_and_reclaim member function to hazptr_obj_base_linked, as an alternative to unlink() that reclaims the object if its link count is zero without checking hazard pointers. It is useful in destructors of data structures when it is guaranteed that objects are not protected by hazard pointers (e,.g., destructor of ConcurrentHashMap). Reviewed By: yfeldblum Differential Revision: D8864019 fbshipit-source-id: 618eeded45a1f8b9503569d1ceca9994ca6e317f
-
Doron Roberts-Kedes authored
Summary: Eliminate while loop behavior in DeterministicSchedule::join Depends on D8789304 Reviewed By: djwatson Differential Revision: D8840276 fbshipit-source-id: f0b0db60f7bec344d021a49cec408a2604d4a1c8
-
Doron Roberts-Kedes authored
Summary: Eliminate spinlock behavior from DeterministicMutex::lock by descheduling threads waiting to acquire the mutex, and placing the thread local semaphore in a waitqueue for the mutex. The unlocking thread reschedules a single waiting thread if the workqueue is non empty. Reviewed By: djwatson Differential Revision: D8789304 fbshipit-source-id: 8ffe3e289c9abfe7515b678ff98f0cefef2461c0
-
Chad Austin authored
Summary: For use in tests where the executor has a nontrivial lifetime but any queued jobs should be completed, have ManualExecutor drain itself before it's destroyed. Reviewed By: yfeldblum Differential Revision: D8845457 fbshipit-source-id: 7c2aa65aa27a7850ff73a93cfbe34c2248b62d26
-
Aaryaman Sagar authored
Summary: Change the write acquire interface to only acquire write locks on non-const `Synchronized` instances. This reflects the intention of mutation associated with a write lock. Reviewed By: yfeldblum Differential Revision: D8851208 fbshipit-source-id: 5be9d2e4a38d25632430a9b6c981b6e7f8412daa
-
Dan Melnic authored
Summary: Fix broken opt build due to "error: unused variable 'rv'" Reviewed By: yfeldblum Differential Revision: D8883701 fbshipit-source-id: 2a832cfea0bd9cbca63a8d5c2c8d7127593728af
-
Aaryaman Sagar authored
Summary: Users acquiring upgrade locks should only be allowed to lock the synchronized object when it is non-const. Because an upgrade locks are permitted to transition to write locks when mutation is required. At which point non-const access is often required on the Synchronized object. Reviewed By: yfeldblum Differential Revision: D8654360 fbshipit-source-id: c2a6574bd880db0d8e4c90166e288f5b83542ad6
-
- 17 Jul, 2018 2 commits
-
-
Nathan Bronson authored
Summary: F14 currently has numerous places where folly::assume is used to help optimization on GCC < 6. These are all things the optimizer should be able to deduce itself, so it would be nice to eventually remove them. This diff marks them with TODO(T31574848), as well as removing two occurrences in F14Table that duplicated an assume in F14Policy. Reviewed By: yfeldblum Differential Revision: D8849832 fbshipit-source-id: e88143b4d29f1a633b51467206c6fb6afd1cd296
-
Nick Cooper authored
Summary: Remove the ' ' prior to : in folly::json's pretty output - this improves consistency with other JSON formatters. Reviewed By: yfeldblum, luciang Differential Revision: D8843977 fbshipit-source-id: 1d5c84d7d3806ad8752b619ffe23101f7f103683
-
- 16 Jul, 2018 2 commits
-
-
Maged Michael authored
Summary: - Add cleanup of remaining items, if any, at destruction. - Add test. Reviewed By: davidtgoldblatt Differential Revision: D8860966 fbshipit-source-id: e3ab2e6ff31e08d91aa20c8c058471823c722a38
-
Maged Michael authored
Summary: Add test to detect no reclamation (without calling hazptr_cleanup). The test retires a number of objects that would trigger bulk reclamation. One or more objects are expected be reclaimed. The number of retired objects must be greater than or equal to hazptr_domain::kThreshold to expect reclamation to happen. Reviewed By: yfeldblum Differential Revision: D8849957 fbshipit-source-id: ef590af21a55348ed0ed72be3637853eceb21cbc
-
- 14 Jul, 2018 5 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`. * Note: `get(...)` refers to `get()` and `get(Duration)`. Reviewed By: yfeldblum Differential Revision: D8710296 fbshipit-source-id: ae201af1928eb2f6a2897c9b7db884393b36b910
-
Maged Michael authored
Summary: The most recent change had a bug that prevents all calls to hazptr_priv::push_all_to_domain from trying reclamation, instead of preventing that only when called from the destructor of hazptr_priv and during reclamation. Reviewed By: davidtgoldblatt Differential Revision: D8849738 fbshipit-source-id: 15a27e8d4a88288179609e8cf179bc8c10c96b90
-
Nathan Bronson authored
Summary: This diff performs several micro-optimizations that improve the lifecycle of a single-element F14FastMap or F14FastSet by about 10% (in a single-threaded microbenchmark). Lifecycle here means construction, insertion of one entry, and then destruction, so it includes one malloc and one free. Reviewed By: yfeldblum Differential Revision: D8771446 fbshipit-source-id: 95d59f32de5a450b16ecdcb0e39b7f566ce797da
-
Adam Simpkins authored
Summary: This adds `XCHECK()` and `XDCHECK()` macros to the folly logging library. These are similar to glog's `CHECK()` and `DCHECK()` macros, and should make it easier for users to convert from glog to folly logging. `XCHECK(condition)` is basically an alias for `XLOG_IF(FATAL, condition)` `XDCHECK(condition)` is like `XCHECK(condition)` in non-debug builds, but is compiled out entirely in debug builds. Note that this is *not* like `XLOG_IF(DFATAL, condition)`, which still evaluates the condition but avoids crashing (logging the message only) in release builds. Reviewed By: mnv104 Differential Revision: D8817270 fbshipit-source-id: 86c4575e11af37219b30eda4e7e30273e1e32ab1
-
Adam Simpkins authored
Summary: Previously `XLOG_IF(FATAL, condition)` always crashed regardless of the condition check. When `XLOG_IF()` was added it did not update the checks used to mark the statement as `[noreturn]` based on the log level. As a result `XLOG_IF(FATAL, ...)` always used the `[noreturn]` APIs, even though this code can return if the condition is not true. This splits the `XLOG()` and `XLOG_IF()` implementations so that `XLOG(FATAL)` can still be marked as `noreturn` but `XLOG_IF(FATAL, ...)` is no `noreturn`. Reviewed By: yfeldblum, mnv104 Differential Revision: D8817269 fbshipit-source-id: 47a493eaaac69c563cff07da0888dd423f7dc07d
-
- 13 Jul, 2018 7 commits
-
-
Chad Austin authored
Summary: Run clang-format across folly/executors/. ``` find . \( -iname '*.cpp' -o -iname '*.h' \) -exec clang-format -i {} \; ``` Reviewed By: yfeldblum Differential Revision: D8843064 fbshipit-source-id: 0a3c82083eebf2c684a4ab2e12067f0f742bf1d4
-
Louis Brandy authored
Summary: C++17 actually removes this overload of `std::addressof` to avoid taking the address of constants. It's not clear to me that the second test here is actually adding much value here. See (2) at: https://en.cppreference.com/w/cpp/memory/addressof Reviewed By: yfeldblum, elsteveogrande Differential Revision: D8775544 fbshipit-source-id: a42209484574509f4d032ebbdf05430f0ed372c4
-
Adam Simpkins authored
Summary: This changes `IntervalRateLimiter` to allow it to be `constexpr`-constructible. We now always initialize the `timestamp_` field to 0. The very first call to `check()` will now always call `checkSlow()` which will then initialize `timestamp_` properly. This also removes the pure virtual `RateLimiter` interface class. At the moment `IntervalRateLimiter` is the only implementation, and all call sites use this class directly. We can always add the `RateLimiter` interface back in the future if we need it later. Reviewed By: yfeldblum Differential Revision: D8798167 fbshipit-source-id: 80885a16506a8daa67653bd0a92accae7a973289
-
Adam Simpkins authored
Summary: Reformat fatal_test.py with black (https://github.com/ambv/black) Reviewed By: mnv104 Differential Revision: D8817268 fbshipit-source-id: b642496ac61e3b2120b76d9b234c29bf51603651
-
Adam Simpkins authored
Summary: Update the static local variable names used in `XLOG_IMPL()` and `XLOG_IS_ON_IMPL()` to match the naming style used in D8218663. The current version of clang-format also appears to be able to format `XLOG_IMPL()` correctly now, so remove the comments disabling it around this macro body. Reviewed By: yfeldblum Differential Revision: D8816625 fbshipit-source-id: 155b759953de5d5db0b350f27870edf9f5516914
-
Adam Simpkins authored
Summary: This adds several macros for explicitly rate-limited log messages. - `XLOG_EVERY_N()` logs only 1 of every N times it is called. This is similar to glog's `LOG_EVERY_N()` and `VLOG_EVERY_N()` macros. - `XLOG_EVERY_MS()` logs only once per specified time interval. This is similar to the `LOG_EVERY_MS()` and `LOG_EVERY_MS_ATOMIC()` macros that Facebook has defined internally on top of glog. - `XLOG_N_PER_MS()` logs the first N messages per specified time interval. These should make it easier for Facebook programs to migrate from glog to xlog. Reviewed By: yfeldblum Differential Revision: D8218663 fbshipit-source-id: a1e71265ace41fea95e5dbb79bc4381962b11297
-
Dave Watson authored
Summary: Delayed hazptr destruction is causing destruction ordering issues. P59812860$445 buck test //titan/cachius/test:CachiusServiceHandlerTest Reviewed By: phil-lopreiato Differential Revision: D8825716 fbshipit-source-id: 808341489fd80b8edb63eb7c12377a8ffadfd1eb
-
- 12 Jul, 2018 5 commits
-
-
Andrii Grynenko authored
Summary: This extends fibers::Baton to support any awaiter (not just folly::Fiber) which makes it possible to integrate it with coroutines. This will make it easy to integrate existing synchronization primitives that use fibers::Baton with coroutines. Reviewed By: lewissbaker Differential Revision: D8580775 fbshipit-source-id: 8f8593793d3012e0470b8f9b3bcf2713145d3573
-
Maged Michael authored
Summary: Prevent destructor of hazptr_priv which is a SingltonThreadLocal from making call to get a reference to the singlton. This may be a problem on some platforms. Reviewed By: djwatson Differential Revision: D8711918 fbshipit-source-id: fb319f640cff74e46ce27ab28ae5fbf93961b262
-
Nathan Bronson authored
Summary: Specializing folly::IsAvalanchingHasher can be bulky and mistake-prone, such as constructing a new hash functor by subclassing. For example, folly::IsAvalanchingHasher<folly::transparent<H>, K> was incorrectly false even when H is avalanching. This diff adds the ability to use a member type is_avalanching to accomplish the same effect, and also fixes the computation of folly::IsAvalanchingHasher for folly::transparent. Reviewed By: yfeldblum Differential Revision: D8772423 fbshipit-source-id: 49e4e33b2981efd8c302d9a217dc9df0dcb290cc
-
Sven Over authored
Summary: The `Emptiness_T` test already tests the emptiness of a default-constructed Function as well as one that was assigned an empty Function. This diff adds a test for a Function that was move-constructed from an empty Function. Reviewed By: shixiao Differential Revision: D8818468 fbshipit-source-id: 3f0e04b9f0f44df2de45fc972a2d26e12adc7362
-
Nathan Bronson authored
Summary: F14 code inside namespace folly doesn't need folly:: Reviewed By: yfeldblum Differential Revision: D8772565 fbshipit-source-id: 720fa683b7ec9be9a096559191240ef7e672fe3e
-
- 11 Jul, 2018 6 commits
-
-
Yedidya Feldblum authored
Summary: [Folly] Reorder `#include`s in `folly/io/async/HHWheelTimer.cpp`. Reviewed By: djwatson Differential Revision: D8806020 fbshipit-source-id: 43496acdaac3b8a79169b00913881d17d160906c
-
Dave Watson authored
Fix requestcontext destruction before globals are destroyed. Bad stacktrace P59804825 Reviewed By: yfeldblum Differential Revision: D8797823 fbshipit-source-id: a9cbff159e5a0ab2577cb7412817be5d554aa32f
-
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. * Context: `Future::get(...)` means both `Future::get()` and `Future::get(Duration)` * 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`. Reviewed By: LeeHowes Differential Revision: D8799081 fbshipit-source-id: 890a221c84ba4847abfaf6e564b0eceb0176fd54
-
Jack Montgomery authored
Summary: Add a data() method to folly::sorted_vector_map and folly::sorted_vector_set which returns a const pointer to the underlying container's data Reviewed By: yfeldblum Differential Revision: D8750840 fbshipit-source-id: d361fe21ac741b31b60f551935a3ed8c9549f11a
-
Yao Han authored
Summary: detect FOLLY_HAVE_LIBZSTD by true/false Pull Request resolved: https://github.com/facebook/folly/pull/885 Reviewed By: terrelln Differential Revision: D8807276 Pulled By: yfeldblum fbshipit-source-id: 4372b925a487a31b26cc4c59d7f513639d864f00
-
Sven Over authored
Summary: Optimise the destruction of default-constructed and moved-out Function objects. Instead of calling a function pointer that is set to a no-op function, use `nullptr` to signal emptyness of that function pointer and check if it is `nullptr` before invoking. This adds additional branching in a few places: not only in the destructor, but also in the move constructor, as well as in the little used `hasAllocatedMemory`. The effect of getting rid of calls to a no-op function pointer should outweigh that. Reviewed By: djwatson Differential Revision: D8694003 fbshipit-source-id: 42972805b2ade255cf1dcc98e54985b1524daa73
-