- 13 Oct, 2017 5 commits
-
-
Yedidya Feldblum authored
Summary: [Folly] Style fixes for `folly/experimental/gdb/README.md`. Should have no effect on Github rendering, but should affect PHabricator rendering. Reviewed By: Orvid, kennyyu Differential Revision: D6055017 fbshipit-source-id: 54204a2b77beeb884cdc486207809f78ac80afe2
-
Neel Goyal authored
Summary: Add AsyncSocketException.cpp to the list of files to build in Makefile.am Reviewed By: knekritz Differential Revision: D6051989 fbshipit-source-id: 72083a609fc994770eca078bfef5a0ed04322bfc
-
Vitaly Berov authored
Summary: We recently found out that ShutdownSocketSet consumes 150+MB for our service, which uses duplex channels. The problem is that we create ~1000 of ThriftServers, and each of the creates its own ShutdownSocketSet. In reality, ShutdownSocketSet is only needed to kill all socket's FD in emergency before crash dump is taken, so they don't hand around waiting for crash dump to complete. There is no need to keep a SSS per ThriftServer, singleton should work just fine. There is a problem here, though. Currently a ThriftServer has 'immediateShutdown' method, which kills all sockets from SSS. So, if SSS becomes a singleton, and we have more than one ThriftServer, calling 'immediateShutdown' on one will kill sockets from the other one. First, it's a quite surprising behavior, and second, it complicates unit tests, which emulate thrift servers running in different processes. As a result, 1. ShutdownSocketSet is created as a singleton, but each ThriftServer still keeps weak ptr to it (mostly for unit tests support). 2. replaceShutdownSocketSet method is added to ThriftServer.h, so unit tests could set different SSS for different ThriftServers. 3. method immediateShutdown is removed from ThriftServer, because its behavior would be 'surprising'. There still may be unexpected consequences of this change for the tests because of Singleton, but let's see. Reviewed By: yfeldblum Differential Revision: D6015576 fbshipit-source-id: dab70dbf82d01bcc71bbe063f983e862911ceb24
-
Lucian Grijincu authored
Reviewed By: yfeldblum Differential Revision: D6042832 fbshipit-source-id: c716ee672c4acfa39cab9f10f3b3f88ca770cd20
-
Yedidya Feldblum authored
Summary: [Folly] Move `folly/Checksum.h` into `folly/hash/`. Reviewed By: Orvid Differential Revision: D6045825 fbshipit-source-id: 02d3e6a49e2c0fc115cfee09e1186be7a13525ba
-
- 11 Oct, 2017 1 commit
-
-
Miroslav Crnic authored
Summary: Newer versions of clang >=3.4 support intrinsic constexpr Reviewed By: Orvid Differential Revision: D6008856 fbshipit-source-id: 4e40a7032464216d181d76a854cafb2ab4be1be0
-
- 10 Oct, 2017 1 commit
-
-
Cameron Pickett authored
Summary: According to folly::Singleton::try_get(), https://fburl.com/23wqby9i, the caller is responsible for handling a nullptr return. In this case, we handle it poorly, via a crash both in production and debug code. This diff opts for handling the nullptr more gracefully, via a future loaded with an exception. Reviewed By: yfeldblum Differential Revision: D6006864 fbshipit-source-id: e8fde57ed161b33fa1f157ce663ed85e69640c25
-
- 09 Oct, 2017 1 commit
-
-
Dan Melnic authored
Summary: Add SO_ZEROCOPY support Reviewed By: djwatson Differential Revision: D5851637 fbshipit-source-id: 5378b7e44ce9d888ae08527506218998974d4309
-
- 07 Oct, 2017 1 commit
-
-
Yedidya Feldblum authored
Summary: [Folly] Let `EventBase::runInEventBaseThreadAndWait` consume its argument. Likewise `EventBase::runImmediatelyOrRunInEventBaseThreadAndWait`. And enforce that the function is destructed before returning, so that, in the case of a wrapped lambda, all captured objects' destructors run before returning from the function. Reviewed By: elsteveogrande Differential Revision: D5994106 fbshipit-source-id: 816c9431a85a3d41e4fda321065614f4c18f0697
-
- 06 Oct, 2017 5 commits
-
-
Stiopa Koltsov authored
Summary: Document that `future.then()` is identical to `future.unit()`. Put functions next to each other to make it clear, and use identical wording. Reviewed By: yfeldblum Differential Revision: D5955451 fbshipit-source-id: 1b55d5785dc0995d4d9364f48241e98ad01b31f4
-
Yedidya Feldblum authored
Summary: [Folly] Remove `Executor::addPtr`. It was there to support passing non-copyable callable objects wrapped as `std::shared_ptr`. It is no longer useful since we have `Function`, which is a non-copyable version of `std::function` which can support capturing non-copyable objects, and it is generally unused. Reviewed By: spacedentist Differential Revision: D5983801 fbshipit-source-id: b49a86f8dd7e5250a097b0e714a1bdf9ac362916
-
Jun Qu authored
Summary: I recently got a gcc crash when using `ConcurrentHashMap` Reviewed By: djwatson Differential Revision: D5994587 fbshipit-source-id: 412d48aa6da12c428bb9ab5ed7a317d89c9580b9
-
Valeriy Khromov authored
Summary: Add `SocketAddress::makeFromPath(StringPiece)` static member function to constructor `SocketAddress` from a path to Unix domain socket. Reviewed By: yfeldblum Differential Revision: D5974523 fbshipit-source-id: b5c1537e67d07d1ef401fea75e35753392eeaf6b
-
Yedidya Feldblum authored
Summary: [Folly] Use fewer keep-alives in `VirtualEventBase::keepAliveRelease`. {D5982132} mistakenly used `VirtualEventBase::add`, which holds a keep-alive on the master `EventBase`, instead of calling `EventBase::add` directly. (Note: this ignores all push blocking failures!) Reviewed By: andriigrynenko Differential Revision: D5992403 fbshipit-source-id: f427025c06f01e6a93d6eae8a051c3553f58be20
-
- 05 Oct, 2017 4 commits
-
-
Yedidya Feldblum authored
Summary: [Folly] Make `keepAliveRelease` consistent between `EventBase` and `VirtualEventBase`. Reviewed By: elsteveogrande Differential Revision: D5982132 fbshipit-source-id: 536d48e5672567e78786691bfb283c34d1f31960
-
Yedidya Feldblum authored
Summary: [Folly] Move `GlobalThreadPoolList.h` into `folly/concurrency/`. This seems like a better place than the top-level. It seems reasonable because this has *something* to do with concurrency. This is used by executors, but is not itself an executor, so it was not clear that it should go to `folly/executors/`, although that also seems like quite the reasonable choice. Reviewed By: Orvid Differential Revision: D5985142 fbshipit-source-id: 6117d133757af74023d6cffb838741da83d173bd
-
Andre Pinto authored
Summary: Allows calling backlashify on a StringPiece. Reviewed By: yfeldblum Differential Revision: D5930015 fbshipit-source-id: ca14c78d9a90c45781da7229eb5d2f437792b2d1
-
Lee Howes authored
Summary: Offer a clean separation between future as a vocabulary type for crossing library interfaces, and future as a type to manage continuations. The principle is that if we want an API with clean separation of execution it should both return and receive SemiFutures. The returned SemiFuture would only be awaitable, but not continuable. If the caller wants to enqueue a continuation then it is efficiently convertable into a folly::Future by calling .via. This means that an API a) Does not have to take an executor to ensure it returns a valid future. That can be deferred to the caller or the caller's caller/target for true separation. b) The API can ensure that its own executor is not exposed to the caller, while still having a clean API. Obviously if some API wants to allow returning of a continuable future, then it can also provide an executor-taking API. Reviewed By: yfeldblum Differential Revision: D5769284 fbshipit-source-id: 46241d1274bf7b1698a7d28a47cff2a65a983740
-
- 04 Oct, 2017 4 commits
-
-
Eric Niebler authored
Summary: Exception types should have default visibility, otherwise RTTI doesn't work right. Reviewed By: elsteveogrande Differential Revision: D5976415 fbshipit-source-id: 45dcfe3476b513aa49a6f78352318f31d381ada7
-
Yedidya Feldblum authored
Summary: [Folly] Move keepalive-acquire code into `Executor::keepAliveAcquire` overrides. This makes the API more symmetric and allows for more flexibility. Also serves as preparation for generalizing the keepalive-token interface. Reviewed By: andriigrynenko Differential Revision: D5974080 fbshipit-source-id: 26209e49a0f5834ba229d4bbfc9272c2e4ffb3fd
-
Tom Jackson authored
Summary: I couldn't find anything that consumes `--json` output, so I made this. It prints out benchmark results from two runs, comparing each benchmark to its corresponding baseline. This should help with benchmarking changes across revisions. Along the way: - Two small transparent `struct`s replaces the use of `tuple`s everywhere. - New output JSON format (additive), formatted as array of arrays so order is preserved. - New comparison binary in `folly/tools/benchmark_compare` Sample output: {P58307694} Reviewed By: yfeldblum Differential Revision: D5908017 fbshipit-source-id: d7411e22b459db16bd897f656e48ea4e896cb1bf
-
Yedidya Feldblum authored
Summary: [Folly] Let keep-alive tokens from `VirtualEventBase` be destroyed from any thread. This case was missed in {D5951397} (facebook/folly@6f3b7616f3402355441c62ca60a36159435aa818). Reviewed By: andriigrynenko Differential Revision: D5970670 fbshipit-source-id: 19e2b00134516e68113234acd6111e21c3e23e8d
-
- 03 Oct, 2017 3 commits
-
-
Maged Michael authored
Summary: The previous change can lead to deadlock. Backing out. Reviewed By: djwatson Differential Revision: D5957084 fbshipit-source-id: 72ea1cb6236367912b4b087da7e4d57f8a2daed0
-
Maged Michael authored
Summary: Three fixes: (1) The compiler reports UB in line 432 for the case M > HAZPTR_TC_SIZE even though it is executed only if M <= HAZPTR_TC_SIZE. Added a condition M <= HAZPTR_TC_SIZE to help the compiler determine that line 432 is not executed in that case. (2) Added missing management of empty state in hazptr_array move operator (3) Added nullptr argument to empty hazptr_array in Array test Reviewed By: djwatson Differential Revision: D5951283 fbshipit-source-id: cb8e61421ab06c7733f67bf2d2274d3311260ac4
-
Yedidya Feldblum authored
Summary: [Folly] Let keep-alive tokens be destroyed from any thread. Reviewed By: andriigrynenko Differential Revision: D5951397 fbshipit-source-id: 91e72588de4ef33a730ebef5770e77635d4e93ba
-
- 02 Oct, 2017 2 commits
-
-
Igor Sugak authored
Summary: ```lang=cpp folly/test/stl_tests/StlVectorTest.cpp:1975:11: error: parentheses were disambiguated as redundant parentheses around declaration of variable named 'm' [-Werror,-Wvexing-parse] Vector(m); ^~~ folly/test/stl_tests/StlVectorTest.cpp:1975:11: note: add a variable name to declare a 'Vector' initialized with 'm' Vector(m); ^ varname folly/test/stl_tests/StlVectorTest.cpp:1975:5: note: add enclosing parentheses to perform a function-style cast Vector(m); ^ ( ) folly/test/stl_tests/StlVectorTest.cpp:1975:11: note: remove parentheses to silence this warning Vector(m); ^ ~ 1 error generated. ``` Reviewed By: Gownta Differential Revision: D5955613 fbshipit-source-id: 3015570ce111603b3561914d07b55365a221c686
-
Yedidya Feldblum authored
Summary: [Folly] Move `Merge.h` into `folly/algorithm/`. Reviewed By: Orvid Differential Revision: D5951346 fbshipit-source-id: 487203e55e2a44888e599ca22849798154e5b386
-
- 01 Oct, 2017 1 commit
-
-
Maged Michael authored
Summary: Changes: - Added hazptr_local<M> for optimized management of local hazptr_holder-s. - Added hazptr_array<M> for optimized management of hazptr_holder-s - Added benchmarks for hazptr_local and hazptr_array - Added tests for hazptr_local and hazptr_array - Changed SWMRList example to use hazptr_local<2> instead of two hazptr_holder-s. - Updated benchmark performance results. Reviewed By: davidtgoldblatt Differential Revision: D5833721 fbshipit-source-id: 154811f67c38abac7342cecb71f829778ccf76b2
-
- 29 Sep, 2017 2 commits
-
-
Felix Handte authored
Summary: As title. No sense adding a timeout to the timeout manager when the future is already complete. Reviewed By: yfeldblum Differential Revision: D5933144 fbshipit-source-id: 4d1bbd866c47ccee6bd0518cbe063afc1d34cbca
-
Igor Sugak authored
Summary: This is deprecated and not used. Reviewed By: yfeldblum Differential Revision: D5936286 fbshipit-source-id: 68f757be06ebe375e14db008d0e5828fad0c3aa5
-
- 27 Sep, 2017 2 commits
-
-
Kyle Nekritz authored
Summary: To be used to signal that data that was sent as TLS 1.3 early data was lost. This needs its own exception type as it requires special handling (ie it should usually be retried immediately). Reviewed By: siyengar Differential Revision: D5869914 fbshipit-source-id: ca0d8ef19cb991e9d6ffe0f8c99abfb03b748ce6
-
Mohamed Amin JABRI authored
Summary: On MacOS compiling unittests with "make chek" shows the following compile error: ``` ../futures/test/RetryingTest.cpp:168:26: error: no matching function for call to 'min' newMemLimit.rlim_cur = std::min(1UL << 30, oldMemLimit.rlim_max); ``` Closes https://github.com/facebook/folly/pull/680 Reviewed By: elsteveogrande Differential Revision: D5921433 Pulled By: yfeldblum fbshipit-source-id: 236d8336f852750a983c2e268db8811d1a4ed9ee
-
- 26 Sep, 2017 1 commit
-
-
Michael Lee authored
Summary: Objective-C blocks are stack allocated, and unless there is a proper assignment it isn't retained and the memory is freed. Because folly::Function used to move, it would hold a reference, but after switch to a constructor by-value, it no longer does this and we see a use-after-free. Reviewed By: yfeldblum, ericniebler Differential Revision: D5888606 fbshipit-source-id: fe4cabb2f2ae289cce0e7429e0af3935ba314720
-
- 24 Sep, 2017 1 commit
-
-
Yedidya Feldblum authored
Summary: [Folly] Let `ProcessReturnCode` be publicly constructible. Via provided constructor functions, which limit how it may be constructed so that it is only constructible into a valid state. Differential Revision: D5898739 fbshipit-source-id: 7490018adfc39408b4290248ef1220e8fd0238cb
-
- 23 Sep, 2017 2 commits
-
-
Yedidya Feldblum authored
Summary: [Folly] Avoid tautological compare in `folly/experimental/symbolizer/`. `x < 0` when `x` is unsigned is tautological and there are warnings against such comparisons. The underlying type of an unscoped enumerations without a fixed underlying type is not specified, and whether it is signed is also not specified; it could be unsigned, and is unsigned in practice in common cases. Reviewed By: Orvid, eduardo-elizondo Differential Revision: D5897792 fbshipit-source-id: 24d84f9bf2c61c907585e1b675c2bbf11ef1720b
-
Matthew Tolton authored
Summary: If a lock is stolen from fiber f1, and then fiber f2 is notified before f1 one wakes up and discovers the crime, then f1 will clear notifiedFiber_ so that f2 thinks the lock was stolen from it as well and hence recurses back into lock(). Reviewed By: andriigrynenko Differential Revision: D5896323 fbshipit-source-id: 528ec1ed983175d3e08f3dc07b69bbc783a86cfb
-
- 22 Sep, 2017 1 commit
-
-
Nathan Bronson authored
Summary: folly/test/stl_tests/StlVectorTest.cpp was too slow under mode/dev-asan, resulting in timeouts, and the relinquish test allocated with malloc and freed with operator delete. This diff reduces the vector size for testing under ASAN, and fixes the allocation mismatch. Reviewed By: Orvid Differential Revision: D5890969 fbshipit-source-id: 49a9498f6c0c4b3c7165906efd1262e518fea810
-
- 21 Sep, 2017 1 commit
-
-
Kyle Nekritz authored
Summary: This is more convenient to use (for example with an IOBufEqual matcher). Reviewed By: yfeldblum Differential Revision: D5882029 fbshipit-source-id: 6aa12f80479f40bcc2af64dc270fb0a9382983b5
-
- 20 Sep, 2017 1 commit
-
-
Kenny Yu authored
Summary: This adds a gdb deadlock detector script into a new directory in folly. I chose to put it under the `experimental` directory and not the top-level directory as we have only tested these scripts on x86_64 Linux and not other types of platforms. This diff includes: - a README on the contents of this directory and how to use the scripts - a script to detect deadlocks gdb directory --------------- This new directory will contain a collection of gdb scripts that we have found helpful. These scripts use the [gdb extension Python API](https://sourceware.org/gdb/current/onlinedocs/gdb/Python.html#Python). To run the scripts, fire up gdb and load a script with `source -v`. Example: ``` $ gdb -p 123456 (gdb) source -v ./folly/experimental/gdb/deadlock.py Type "deadlock" to detect deadlocks. (gdb) deadlock Found deadlock! ... ``` deadlock detector script ---------------------------- Consider the following program that always deadlocks: ``` void deadlock3() { std::mutex m1, m2, m3; folly::Baton<> b1, b2, b3; auto t1 = std::thread([&m1, &m2, &b1, &b2] { std::lock_guard<std::mutex> g1(m1); b1.post(); b2.wait(); std::lock_guard<std::mutex> g2(m2); }); auto t2 = std::thread([&m3, &m2, &b3, &b2] { std::lock_guard<std::mutex> g2(m2); b2.post(); b3.wait(); std::lock_guard<std::mutex> g3(m3); }); auto t3 = std::thread([&m3, &m1, &b3, &b1] { std::lock_guard<std::mutex> g3(m3); b3.post(); b1.wait(); std::lock_guard<std::mutex> g1(m1); }); t1.join(); t2.join(); t3.join(); } ``` Once the process has deadlocked, we can use gdb to find the threads and mutexes involved in the deadlock: ``` $ gdb -p 2174496 (gdb) source -v ./folly/experimental/gdb/deadlock.py Type "deadlock" to detect deadlocks. (gdb) deadlock Found deadlock! Thread 2 (LWP 2174497) is waiting on mutex (0x00007ffcff42a4c0) held by Thread 3 (LWP 2174498) Thread 3 (LWP 2174498) is waiting on mutex (0x00007ffcff42a4f0) held by Thread 4 (LWP 2174499) Thread 4 (LWP 2174499) is waiting on mutex (0x00007ffcff42a490) held by Thread 2 (LWP 2174497) ``` Reviewed By: yfeldblum Differential Revision: D5860868 fbshipit-source-id: 020a32327a79bb066269fe08113695803ce06c7d
-
- 19 Sep, 2017 1 commit
-
-
Phil Willoughby authored
Summary: We didn't previously benchmark the performance of `get()`, which was a strange omission. Reviewed By: akrieger Differential Revision: D5863567 fbshipit-source-id: 468b249da9120fcb84f3303ac5e2157761b6369d
-