- 09 Nov, 2017 6 commits
-
-
Teng Qin authored
Summary: When using `folly::symbolizer`, it's very often that we want to use `iterateSectionsWithType` iterate through sections of a few types using the same callback. Current approach would require iterating the section header multiple times. This Diff add `iterateSectionsWithTypes`, which is basically just `iterateSectionsWithType` but accepts multiple section types. It is very similar to D6279651. However, in this Diff we did not change implementation of `getDefinitionByAddress` and `getSymbolByName`, since going through `.dynsym` separately would improve the efficiency of single-address or single-symbol lookup. However, for the use cases that we want to iterate through all symbols of an ELF file, this new interface would be useful. Reviewed By: anakryiko, yfeldblum Differential Revision: D6281449 fbshipit-source-id: f9afe0a0e95d9fafcd041014abad8ca86d1a882f
-
Yedidya Feldblum authored
Summary: [Folly] Fix `folly/test/Makefile.am`. Closes #709. Reviewed By: meyering Differential Revision: D6282009 fbshipit-source-id: 0f2a992e92d4b94a535f29341920c9f2959819d7
-
Teng Qin authored
Summary: When using `folly::symbolizer`, it's very often that we want to use `iterateSymbolsWithType` iterate through symbols of a few types using the same callback. Current approach would require iterating the section multiple times. This Diff adds `iterateSymbolsWithTypes`, which is basically just `iterateSymbolsWithType` but accepts symbol types. This Diff also updated implementation of `getDefinitionByAddress` and `getSymbolByName` which currently does two iterations for `STT_OBJECT` and `STT_FUNC`. Reviewed By: yfeldblum Differential Revision: D6279651 fbshipit-source-id: a661dd15f18e4f2f63dbcca615f5a86d92e528ea
-
Yedidya Feldblum authored
Summary: [Folly] In `SemiFuture` members, fix `DCHECK` of pointer types. Use `nullptr !=` to avoid ` error: ISO C++ forbids comparison between pointer and integer`. Closes #708. Reviewed By: Orvid Differential Revision: D6277832 fbshipit-source-id: 8f65065d5347c6ac407b99cb780c38935e901362
-
Phil Willoughby authored
Summary: Testing indicates that GCC ignores the cold attribute when the function is available for inlining. Because Unexpected is a template class we can't make the constructors non-inline, but we can make it derive from a class with a cold constructor, which has the effect of making all the Unexpected constructors implicitly cold. Reviewed By: yfeldblum Differential Revision: D6261013 fbshipit-source-id: 482e49253d5b104742018133c53fb60279dd9f9b
-
Christopher Dykes authored
Summary: Because every other exception is already marked as public. Reviewed By: yfeldblum Differential Revision: D6275414 fbshipit-source-id: 8e1fc4ceafedbdb44733ab57aecb6050c4160994
-
- 08 Nov, 2017 5 commits
-
-
Arkady Shapkin authored
Summary: gflags and glog require some compile definitions when linking statically /cc Orvid Closes https://github.com/facebook/folly/pull/693 Reviewed By: yfeldblum Differential Revision: D6264382 Pulled By: Orvid fbshipit-source-id: 60c8af429f10e778d9c313f40227892238829f63
-
Yedidya Feldblum authored
Summary: [Folly] Heterogeneous lookups for `sorted_vector` types. When the `Compare` type has member type or alias `is_transparent`, enable template overloads of `count`, `find`, `lower_bound`, `upper_bound`, and `equal_range` on both `sorted_vector_set` and `sorted_vector_map`. This is the protocol found in the equivalent `std::set` and `std::map` member functions. > This overload only participates in overload resolution if the qualified-id `Compare::is_transparent` is valid and denotes a type. They allow calling this function without constructing an instance of `Key`. > > http://en.cppreference.com/w/cpp/container/set/count (same wording in all 10 cases) Reviewed By: nbronson Differential Revision: D6256989 fbshipit-source-id: a40a181453a019564e8f7674e1e07e241d5ab068
-
Andre Pinto authored
Summary: Use const_cast instead of implicitly dropping const modifier. Reviewed By: reanimus Differential Revision: D6269200 fbshipit-source-id: 61e1708c88a4139d3fdd9cf89f4ff778d0354bb2
-
Andre Pinto authored
Summary: Include folly/Portability.h in GenerateFingerprintTables, so that gflags namespace gets defined. Reviewed By: yfeldblum Differential Revision: D6265226 fbshipit-source-id: d509dc163564420151de7007ad4336d7e5ef9625
-
Igor Sugak authored
Summary: Exposed by the latest clang: ```lang=bash folly/test/FixedStringTest.cpp:52:36: error: unused variable 's' [-Werror,-Wunused-variable] constexpr folly::FixedString<42> s{"hello world"}; ^ folly/gen/test/StringBenchmark.cpp:176:15: error: unused variable 'line' [-Werror,-Wunused-variable] StringPiece line(kLine); ^ ``` Reviewed By: yfeldblum Differential Revision: D6264853 fbshipit-source-id: 5cf4b0a8c99eaa31c2499746c70ddc49fdd73074
-
- 07 Nov, 2017 6 commits
-
-
Christopher Dykes authored
Summary: It was broken, now it is fixed. https://developercommunity.visualstudio.com/content/problem/145407/incorrect-c3520-within-noexcept-expression-in-alia.html Reviewed By: yfeldblum Differential Revision: D6254219 fbshipit-source-id: a03961db97d7ac211103655229c1ea703405826a
-
Adam Simpkins authored
Summary: AsyncFileWriter uses a separate thread to write messages to the file descriptor. This diff makes us call setThreadName() to set the name of this thread to `log_writer`. Reviewed By: bolinfest Differential Revision: D6238229 fbshipit-source-id: 9c93d80e7ac989e03bc3160bb2f135d67e15c8be
-
Dave Watson authored
Summary: Use the same trick as the values, so that non-copyable keys can be used in ConcurrentHashMap. Reviewed By: yfeldblum Differential Revision: D6252711 fbshipit-source-id: f0f168c4eb361d372bdfc3417f32222d66c11aaf
-
Dave Watson authored
Summary: While the returned iterators are always 'valid' and can be read and iterated from, they may still be concurrently erased from the map. Current erase(iter) has DCHECKS that assert we can always erase an iterator, but it may have already been removed. Reviewed By: davidtgoldblatt Differential Revision: D6221382 fbshipit-source-id: 70b21f53e2fc3daa126df4fb60bc5d3ecb253c71
-
Giuseppe Ottaviano authored
Summary: The `THROW` behavior of `LifoSemMPMCQueue` is unsafe when calling `join()`, because the queue may be full and `join()` will fail to enqueue the poisons. To work around this we can use `PriorityLifoSemMPMCQueue` and dedicate `LO_PRI` to the poisons, but there's no reason that the low priority queue should have the same size as the normal priority. Add a constructor to be able to specify different sizes. Reviewed By: yfeldblum Differential Revision: D6257017 fbshipit-source-id: c75f33c38fcdad646ba1499bcd434ab65711250c
-
Yedidya Feldblum authored
Summary: [Folly] `crange`, and `range` `const` overloads. Instead of using universal reference for `range` overloads, bifurcate explicitly between `&` and `const&` overloads. The `&` overloads return `Range<T*>` while the `const&` overloads return `Range<T const*>`. Add `crange` overloads, which may accept non-`const` arguments but will return `Range<T const*>` results anyway. Reviewed By: ot Differential Revision: D6242038 fbshipit-source-id: bc373c3288ea88792f04b49a372262d12204b586
-
- 06 Nov, 2017 3 commits
-
-
Yedidya Feldblum authored
Summary: [Folly] Move `folly/LifoSem.h` to `folly/synchronization/`. Reviewed By: meyering Differential Revision: D6245444 fbshipit-source-id: 14ffa012fa92b8c6aaf5900c930156894a492003
-
Eric Niebler authored
Summary: The Data field was not getting value-initialized, leading compilers to complain when value-initializing const folly::Function objects. Reviewed By: yfeldblum, ot Differential Revision: D6241712 fbshipit-source-id: 99ce7f6016f6e7d16b1cff7aa51b7bef53ec592d
-
Phil Willoughby authored
Summary: By marking the main constructors of `Unexpected` cold we are telling the compiler that we don't expect to execute them often. This can improve the locality and performance of the `Expected` branch, and reduce the code-size for the `Unexpected` branch. The constructors we have marked cold here are only the ones used to originate an `Unexpected`. We don't mark the copy- move- or conversion-constructors as `cold` because they will typically be used in error-handling branches and it is not correct to say that they are colder than their surroundings in that case. Note that the entire error-handling branch is likely to be deduced to be cold because we told the compiler that it is likely that hasValue() is true and hasError() is false. Because `makeUnexpected` unconditionally invokes one of these cold constructors it will inherit the property of being cold. The GCC function attribute reference, which describes what `cold` means, is here: https://gcc.gnu.org/onlinedocs/gcc/Common-Function-Attributes.html#Common-Function-Attributes Reviewed By: yfeldblum Differential Revision: D6234305 fbshipit-source-id: 6876073e92ce54936ba7152175d76be653f5f463
-
- 05 Nov, 2017 1 commit
-
-
Yedidya Feldblum authored
Summary: [Folly] Move `folly/Functional.h` to `folly/lang/RValueReferenceWrapper.h`. Reviewed By: Orvid Differential Revision: D6242160 fbshipit-source-id: a8ec42106cfe0ea617c87d382694d5eb2f0f61a0
-
- 04 Nov, 2017 3 commits
-
-
Yedidya Feldblum authored
Summary: [Folly] `constexpr_clamp`. Like `std::clamp` (C++17). Reviewed By: Orvid Differential Revision: D6236825 fbshipit-source-id: 0f6c5dc9a955b148021ee6ed3e86201b53ae090c
-
Lee Howes authored
Summary: Make SemiFuture throw if no executor provided to via because in that situation the deferred work will never run. Reviewed By: yfeldblum Differential Revision: D6233233 fbshipit-source-id: 43b642c46cc0be80b1f13c03bdaf20b8038acec2
-
Yedidya Feldblum authored
Summary: [Folly] Move `folly/SafeAssert.h` to `folly/lang/`. Reviewed By: Orvid Differential Revision: D6230421 fbshipit-source-id: 0086cd6fedd4ce0e7a4d5302a41153ec1a502e74
-
- 03 Nov, 2017 6 commits
-
-
Lee Howes authored
Summary: Fix for function parameter order that shows up in opt build on later diff. Reviewed By: andriigrynenko Differential Revision: D6237125 fbshipit-source-id: fbb7be2c70b32203c658fc239cd74164e01fa1ca
-
Louis Dionne authored
Summary: Closes https://github.com/facebook/folly/pull/705 Reviewed By: yfeldblum Differential Revision: D6234351 Pulled By: Orvid fbshipit-source-id: e71bb3882c783a47ace4d08f134b2e450aaabb6b
-
Dan Melnic authored
Expose the zerocopy buf ID, change the AsyncSocket fd constructor to accept the id, Buff->Buf, make the cmsghdr methods private Summary: Expose the zerocopy buf ID, change the AsyncScokey fd constructor to accept the id, Buff->Buf, make the cmsghdr methods private Reviewed By: djwatson Differential Revision: D6221324 fbshipit-source-id: d0fc4937adf6cf5790d11e406ffd3ec64c558b9c
-
Lee Howes authored
Summary: Conversion check was lost in an earlier refactor. This meant that SemiFuture could be accidentally converted to Future through the value constructor. This should be disabled. Reviewed By: yfeldblum Differential Revision: D6214526 fbshipit-source-id: 3fc2d026ec6062b38b9500c8adf3eee12c0f2693
-
Yedidya Feldblum authored
Summary: [Folly] Alias `std::launder` when it is available. Reviewed By: Orvid Differential Revision: D6221443 fbshipit-source-id: 33136a8744a39db01fb05513d5ed5476ea67559a
-
Eric Niebler authored
Summary: gcc-4.9 does not support features that Poly needs. Disable the tests on that platform. Reviewed By: meyering Differential Revision: D6211674 fbshipit-source-id: 289f029122a45b0f9ec740c62b1faaafb51dcab5
-
- 02 Nov, 2017 5 commits
-
-
Phil Willoughby authored
Summary: This only affects instruction ordering in GCC-compatible compilers to make the value-having branch preferred. Reviewed By: davidtgoldblatt, nbronson, yfeldblum Differential Revision: D6223188 fbshipit-source-id: 57c69b88eda7ee769912874921c45b47ec7a38de
-
Dan Melnic authored
Change kDefaultZeroCopyThreshold to 0 to avoid a regression and avoid a failure while running as not root Summary: Change kDefaultZeroCopyThreshold to 0 to avoid a regression when using a buffer chain that exceeds 32K but each buffer is small. Change the benchmark to set it's own threshold. Also use calloc vs malloc (in the benchmark only) to get around some weird kernel interaction on non zero copy enabled systems - 2 back to back tests report very different results. Reviewed By: djwatson Differential Revision: D6112299 fbshipit-source-id: 3895d3ece2925c4626284ff364495708293edc3e
-
Andrey Ignatov authored
Summary: Now there is no interface to create `IPAddress{,V4,V6}` from a string or `ByteRange` that doesn't throw. All available static methods throw `IPAddressFormatException`. It has a few disadvantages: == 1. It's unsafe == Caller is not forced to catch exception, it's very easy to write `IPAddress(potentiallyInvalidString)` and discover that it can throw when it's already in prod. == 2. It's inconvenient == if caller is aware about exception, (s)he's forced to write `try {} catch` that is inconvenient and leads to code like this: folly::IPAddress taskIp; try { taskIp = folly::IPAddress(kv.second.taskIp); } catch (const folly::IPAddressFormatException&) { // Error handling .. } // Use IP .. == 3. It's expensive == Amended benchmark shows that `IPAddress` constructor is ~10 times slower when a string with invalid IP is passed to it. --- The diff introduces two non-throwing interfaces for all tree flavors of `IPAddress`: `tryFromString()` tries to create IP address from string and returns either corresponding IP address or `enum class IPAddressFormatError` using `folly::Expected`. `tryFromBinary()` does same thing but for `ByteRange` input. The code can be as short as: if (auto maybeIp = IPAddress::tryFromString(ipStr)) { // Use maybeIp.value() .. } The `try` prefix is chosen to be consistent with other interfaces in folly, e.g. `to` and `tryTo`. Reviewed By: yfeldblum Differential Revision: D6211182 fbshipit-source-id: f27cf90997c100a5fd42138e66ff9bb172204c20
-
Yedidya Feldblum authored
Summary: [Folly] Refactor `is_simple_allocator` and callers. * Swap order of template parameters. * Do decaying in the callers instead. * Do a direct invocability test, rather than an indirect test of whether the allocator has a method `destroy` with the expected signature. Reviewed By: ericniebler Differential Revision: D6184062 fbshipit-source-id: aec32e6e323b8c6023b94c258ab2bcddd8c53e09
-
Christopher Dykes authored
Summary: Under C++17's exception specifier rules (http://www.open-std.org/jtc1/sc22/wg21/docs/papers/2015/p0012r1.html) we need additional specializations to achieve the desired effect. Reviewed By: yfeldblum Differential Revision: D6214359 fbshipit-source-id: a007c2fcea1496bdfe4fdf923b39c1611c6ad9bc
-
- 01 Nov, 2017 5 commits
-
-
Ognjen Dragoljevic authored
Summary: When the key is missing, the standard associative containers throw an exception like `unordered_map::at: key not found`. That's nice, but it would be even better if we would actually know what key is missing. This is not an issue when one is accessing the container directly, but when that access happens several levels deep, such as here within folly formatting logic, we have no way of knowing what key was missing. This poses some difficulties in presenting error to the user. This change makes folly format throw a subclass of `std::out_of_range` exception on a missing key when a string keyed associative container is used for providing parameters. That subclass stores the actual key used so it can be accessed in the exception handler. Existing callers can still catch `std::out_of_range` so they should be unaffected by this change. Reviewed By: ot, yfeldblum Differential Revision: D6202184 fbshipit-source-id: b8a6740aaccc5d8914ad7d099c8b901427f00083
-
Lee Howes authored
Summary: (Note: this ignores all push blocking failures!) Reviewed By: yfeldblum Differential Revision: D6212919 fbshipit-source-id: b066d99e13e97cbab489132bcb91872ed4407f81
-
Yedidya Feldblum authored
Summary: [Folly] Fix unsynchronized accesses in `IOThreadPoolExecutor::getEventBase`. `getEventBase` may be invoked concurrently from two threads - RMWs to `nextThread_` must be synchronized with each other. `getEventBase` may be invoked concurrently with `setNumThreads` - the former's reads of `threadList_.vec_` must be synchronized with the latter's writes to it. Reviewed By: kennyyu Differential Revision: D6206916 fbshipit-source-id: 8bfae158effb5896ab478d0c20310293b037c892
-
Eric Niebler authored
Summary: Address doc criticisms Reviewed By: Orvid Differential Revision: D6210376 fbshipit-source-id: fee11cef1c407b092f891a97f94271a81d3718b8
-
Alisson Gusatti Azzolini authored
Reviewed By: yfeldblum Differential Revision: D6182541 fbshipit-source-id: 31d255819df1f97b13e475903c0627a1ac96b516
-