- 11 Apr, 2017 6 commits
-
-
Eric Niebler authored
Summary: The purpose of this reimplementation of `exception_wrapper` is threefold: - Make `exception_wrapper` smaller. It goes from 48 bytes to 24. - Give it `noexcept` ~~copy and~~ move - Store small exception objects in an internal buffer; i.e., with zero allocations. The ultimate goal is to change `folly::Try<T>` to a thin wrapper over `folly::Expected<T, exception_wrapper>`. (Currently, it stores the `exception_wrapper` on the heap.) As part of this redesign, I: - Remove `exception_wrapper::getCopied`. The user shouldn't care how the `exception_wrapper` stores the exception. - Remove `exception_wrapper::operator==`. It was only used in 2 places in test code. The existing semantics (return true IFF two `exception_wrapper`s point to the //same// exception object) prevented the small-object optimization. - Add new `handle()` API that behaves like cascading `catch` clauses. For instance: ```lang=c++ exception_wrapper ew = ...; ew.handle( [&](const SomeException& e) { /*...*/ }, [&](const AnotherException& e) { /*...*/ }, [&](...) { /* catch all*/ }, // yes, lambda with ellipses works! ``` - Add a `type()` member for accessing the `typeid` of the wrapped exception, if it's known or can be determined with a `catch(std::exception&)`. This table shows the percent improvement for the exception_wrapper_benchmark test: | Test | Percent improvement (gcc-5) | Percent improvement (gcc-4) | ----- | ----- | ----- | exception_wrapper_create_and_test | 14.33% | -6.50% | exception_wrapper_create_and_test_concurrent | 11.91% | 20.15% | exception_wrapper_create_and_throw | -0.82% | -0.25% | exception_wrapper_create_and_cast | 15.02% | 14.31% | exception_wrapper_create_and_throw_concurrent | 18.37% | 8.03% | exception_wrapper_create_and_cast_concurrent | 28.18% | -10.77% The percent win for gcc-5 is 15% on average. The non-throwing tests show a greater win since the cost of actually throwing an exception drowns out the other improvements. (One of the reasons to use `exception_wrapper` is to not need to throw in the first place.) On gcc-4, there is roughly no change since the gcc-4 standard exceptions (`std::runtime_error`, std::logic_error`) are non-conforming since they have throwing copy operations. Reviewed By: yfeldblum Differential Revision: D4385822 fbshipit-source-id: 63a8316c2923b29a79f8fa446126a8c37aa32989
-
Christopher Dykes authored
Summary: On Windows, the OpenSSL headers have to be included in a specific order relative to WinSock. Fixing the issues ad-hock is not a viable way to continue, so treat it as completely non-portable and require all includes of it in Folly to go through the portability header. Reviewed By: yfeldblum Differential Revision: D4856858 fbshipit-source-id: 56aca1fb0fe095f41a8af12488c6c2080344603d
-
Christopher Dykes authored
Summary: It doesn't exist on OSX or Windows, so implement it. Closes https://github.com/facebook/folly/issues/567 Reviewed By: yfeldblum Differential Revision: D4783463 fbshipit-source-id: 0a2586aced7123b797a8e55a3e86124b449634e4
-
Andrii Grynenko authored
Summary: TSAN has a limitation for the number of locks held concurrently - https://github.com/llvm-mirror/compiler-rt/blob/master/lib/sanitizer_common/sanitizer_deadlock_detector.h#L126, so we have to work around that. Reviewed By: yfeldblum Differential Revision: D4866477 fbshipit-source-id: 958251e97d91c1c46ef4e907de2cf189fb04f88e
-
Andrii Grynenko authored
Summary: facepaw Reviewed By: yfeldblum Differential Revision: D4856227 fbshipit-source-id: 17a73d4d630c6efe1763bbd8aff8b7a2c7721c27
-
Christopher Dykes authored
Summary: This reverts commit a80aabb5a223264746ab45e3138d065bce5fe99c Differential Revision: D4832473 fbshipit-source-id: 1a78d61f3f09f1064876a786c15601a091f4402b
-
- 10 Apr, 2017 7 commits
-
-
Alexander Shaposhnikov authored
Summary: Cleanup: remove superfluous std::move for return values. Reviewed By: yfeldblum Differential Revision: D4856421 fbshipit-source-id: bf2cb66f3b43eb8f3b183e22b0acd31e0a0c0958
-
Nick Terrell authored
Summary: `std::max(uint64_t, size_t)` was called. Fixes https://github.com/facebook/folly/issues/576. Reviewed By: Orvid Differential Revision: D4861336 fbshipit-source-id: 1b6f67b291451048ba79d638d2c1184f9245dc0c
-
Christopher Dykes authored
Summary: I landed a change to Folly that used a feature I had just re-written in Folly without updating the change. This has broken everything. Whoops. Reviewed By: yfeldblum Differential Revision: D4861562 fbshipit-source-id: 05beadbe233d1fdf90fb4435e65b718cdec7f63e
-
Christopher Dykes authored
Summary: It was defining the same functions as OpenSSL, but it was putting them in the `folly::ssl` namespace and requiring a manual `use namespace` everywhere to actually be able to use it. Proper portability headers require no interaction to function correctly other than including them in the build. This adjusts it so including it is all that is required to get an OpenSSL 1.1.0 compatible API. This also re-organizes the code to significantly lower the amount of nesting in the `#if`'s, and puts it in order from oldest APIs to newest, rather than haphazard. Reviewed By: yfeldblum Differential Revision: D4856784 fbshipit-source-id: 7c00fdf4a3e51e37287d2b1ef294046f38a96a43
-
Jason Fried authored
Summary: Use RequestChannel to construct Thrift Clients. use folly/python/futures.h to marry up thrift client rpc futures to asyncio futures. No gil exchanges py3 clients are async context managers now. Reviewed By: ambv, yfeldblum Differential Revision: D4639677 fbshipit-source-id: 6b400747507446882d3cfcb1cf7e85c3daa07a2e
-
Andrii Grynenko authored
Reviewed By: yfeldblum Differential Revision: D4856138 fbshipit-source-id: 19eee4f8c4108ef168d82d5e9b1f2d65ff9b03bd
-
Christopher Dykes authored
Summary: Currently clang-format cannot be run on any file using the macro because it breaks it. By putting the warning name in a string clang-format no longer breaks it. Reviewed By: yfeldblum Differential Revision: D4856945 fbshipit-source-id: ebd2d223dd97f66224e9e2912610057e36287dae
-
- 08 Apr, 2017 6 commits
-
-
Yedidya Feldblum authored
Summary: [Folly] All template params for `PriorityMPMCQueue`. Mimic the suite of template params of `MPMCQueue`. Reviewed By: magedm Differential Revision: D4857179 fbshipit-source-id: 3d441099c46ea1223155bd3f4cc819595814c47b
-
Christopher Dykes authored
Summary: When including OpenSSL on Windows, the portability header must be included before including any OpenSSL headers. Reviewed By: yfeldblum Differential Revision: D4856376 fbshipit-source-id: a8e6533b2ba3c003314ae2426605031fa67be05f
-
Christopher Dykes authored
Summary: MSVC doesn't allow non-static locals to be accessed within a non-capturing lambda, and some were introduced into the json code. Reviewed By: yfeldblum Differential Revision: D4856242 fbshipit-source-id: b2db36ca37a79a41237d39cc7e7b839a5416922f
-
Giuseppe Ottaviano authored
Summary: `EliasFanoCompressedList` requires explicit freeing. Reviewed By: lbrandy, philippv, yfeldblum, luciang Differential Revision: D4855200 fbshipit-source-id: ccee44b6371ae743ef15a72af9b691d5b56e37c2
-
Louis Brandy authored
Summary: Because these `atomic<int>` are referenced in the destructor of the `ReadMostlyMainPtr`, they must be declared before it, otherwise they are destroyed before it i. Reviewed By: yfeldblum Differential Revision: D4854964 fbshipit-source-id: 625a8f890bba166b682ca13558f8bcde86edcc75
-
Louis Brandy authored
Summary: This test actually stores references to `sum` in objects it puts into the `EvictingCacheMap`. Those references get accessed in the destructor of the objects, which is the destructor of the `EvictingCacheMap`. That means the `sum` variable must outlive (and be declared -before-) the `EvictingCacheMap` it's testing. Reviewed By: yfeldblum, meyering Differential Revision: D4854619 fbshipit-source-id: b0a3109278f48d10b4cd0c52a12cb2064f4a00c5
-
- 07 Apr, 2017 2 commits
-
-
Anirudh Ramachandran authored
Summary: D4406876 replaced EVP_MD_CTX and HMAC_CTX on the stack with heap-allocated versions. We omitted the _cleanup functions thinking those didn't actually free anything, but turns out HMAC_CTX_cleanup internally calls EVP_MD_CTX_cleanup which OPENSSL_frees a bunch of stuff. Reviewed By: yfeldblum Differential Revision: D4850388 fbshipit-source-id: 4ef1413a4105f3638140e4d12aeae64afe43f099
-
Phil Willoughby authored
Summary: Make sure that the last use of `s6` is sequenced before it is moved-from. Reviewed By: nbronson Differential Revision: D4850480 fbshipit-source-id: 5272c14475ae2c62bc613cfd54f5df482b19d3dc
-
- 06 Apr, 2017 4 commits
-
-
Alan Frindell authored
Summary: The problem with catching the exception here is stack information is lost. Just let it std::terminate if it throws Reviewed By: ikobzar Differential Revision: D4831909 fbshipit-source-id: 42139bd7caee0fedff13328d52fa3be1c517e730
-
Andrii Grynenko authored
Summary: Improve error message and change DFATAL to FATAL. Reviewed By: yfeldblum, meyering Differential Revision: D4837840 fbshipit-source-id: 54ae53c9356fc2e85266b037996aa7b2bae3d4e4
-
Phil Willoughby authored
Summary: Benchmark each type with its native key type and with its non-native key type. This allows you to make a more-informed decision about which to use based on the types you have available at insertion/lookup time. Reviewed By: yfeldblum Differential Revision: D4826527 fbshipit-source-id: ee4ef5255d2bdd955e9deb30dc4c28be183cee07
-
Maged Michael authored
IndexedMemPool: Fix race condition on size_ that can cause the destructor to access nonexistent slots Summary: Contention on allocation when there is exactly one slot remaining can cause size_ to exceed actualCapacity_. Without taking the min of size_ and actualCapacity_ the destructor may try to destroy out-of-bound slots. Added a test to test/IndexedMemPoolTest.cpp that failed before the fix and passes after the fix. Reviewed By: nbronson Differential Revision: D4837251 fbshipit-source-id: a887487727f17eaf2ba66345f40fc91d2fe3bc00
-
- 05 Apr, 2017 3 commits
-
-
Alan Frindell authored
Summary: There's a comment in that code that states that it *it* noexcept, and that is common for most folly async io callbacks. Reviewed By: yfeldblum Differential Revision: D4831800 fbshipit-source-id: 78894ad72504b9dfe540c14b8d7bbb29247aaf87
-
Subodh Iyengar authored
Summary: Add trimAtMost start and trimAtMost end. These are useful functions to have if you don't care about trimming an exact amount. Reviewed By: yfeldblum Differential Revision: D4658087 fbshipit-source-id: f7dd62c0f4837503e59cdec75fdad433be20306c
-
Christopher Dykes authored
Summary: Implementing `clearenv()` correctly on multiple OS's without relying on underlying implementation details is significantly more complicated, and this is preventing being able to build on OSX. This function isn't actually used anywhere currently. Reviewed By: yfeldblum Differential Revision: D4832473 fbshipit-source-id: a80aabb5a223264746ab45e3138d065bce5fe99c
-
- 04 Apr, 2017 6 commits
-
-
Eli Lindsey authored
Summary: fixing D4825412 Reviewed By: lbrandy Differential Revision: D4826815 fbshipit-source-id: 94691ff293dad53b16e7a2f139c1df490a61e565
-
Maxim Georgiev authored
Summary: GMock can't mock class methods that are not virtual. This way classes relying on the non-virtual methods of AsyncSocket can't be efficiently tested using gtest/gmock. Reviewed By: yfeldblum Differential Revision: D4806838 fbshipit-source-id: fde852b75f7ac1d468c177e317c516cb0dc333b5
-
Sven Over authored
Summary: We recently removed declarations of Function constructors and assignment operators that took non-const Function references. They were necessary at the time to make sure that the templated constructor that can take any invokable object did not get selected for copying Functions from non-const lvalues. This, however, is now provided by some std::enable_if construct. Reviewed By: ericniebler Differential Revision: D4818736 fbshipit-source-id: 08197721beef009f6ae482b576df78ec6999d132
-
Anirudh Ramachandran authored
Summary: More work to get wangle compiling. wangle/facebook/http pulls in proxygen libs and that's another pain altogether, so this only makes the rest of wangle build with 1.1.0 and BoringSSL Depends on D4406876 Reviewed By: ngoyal Differential Revision: D4767060 fbshipit-source-id: bd6bc6959d04028c84360e434f6bbdb2cde2faac
-
Anirudh Ramachandran authored
Summary: Add more layers to support compiling with OpenSSL 1.1.0 Reviewed By: yfeldblum Differential Revision: D4406876 fbshipit-source-id: 8eff7e4f8e096605fc9e1093ef533b5afe0ee539
-
Andrii Grynenko authored
Summary: This is same as D4249032, but for now this is only enabled in dbg and dev builds. I'm planning to bump this to FATAL later, once we fix know problematic main()s. Reviewed By: lbrandy, yfeldblum Differential Revision: D4821763 fbshipit-source-id: 5f7930f8cbcb10275d23a89848f1ec8ee34a8020
-
- 03 Apr, 2017 5 commits
-
-
Nick Terrell authored
Summary: The use of generic lambdas caused compiler errors with gcc 4.8.2. Fixes https://github.com/facebook/folly/issues/569. Reviewed By: Orvid, yfeldblum Differential Revision: D4821115 fbshipit-source-id: 8372ee7695a3d0a1df0d033623618a923c261737
-
Harrison Klaperman authored
Summary: The priority queue in the manual executor implementation is backwards. This means that scheduled things run in reverse order, and a later thing will block an earlier thing if you advance to a timestamp in between the two. This diff fixes the problem and adds tests to confirm the fix. These tests fail on the old implementation. Reviewed By: yfeldblum Differential Revision: D4739101 fbshipit-source-id: 6e429828460df5b3c656580568a9ae1eb4009527
-
Christopher Dykes authored
Summary: Macros are not the best solution anymore. Reviewed By: yfeldblum Differential Revision: D4270626 fbshipit-source-id: 8acbd5b778d4effcfb587655b4397737bef0d379
-
Dan Melnic authored
Remove/make private the default ***Holder constructor to allow compile time detection of ***Holder(mutexPtr_) constructs Summary: Avoid unintended C++ stuff - this is not the same as the "fleeting rvalue" - this change might break the build but I will fix it Reviewed By: yfeldblum Differential Revision: D4814104 fbshipit-source-id: 058a0eac44893c573062fcf5665d4fd022ee64a0
-
Dave Watson authored
Summary: A (almost) lock-free atomic_shared_ptr, matching the proposed concurrency TS interface. See notes at top of file Reviewed By: davidtgoldblatt Differential Revision: D4716098 fbshipit-source-id: b9ca2443ba9e227ebb6f40807128073c6e14222a
-
- 01 Apr, 2017 1 commit
-
-
Giuseppe Ottaviano authored
Summary: `escapeString` is very slow even when there's very little to nothing to escape. This diff adds a fast path to copy sequences of bytes that don't need escaping. It also optimizes appending escape sequences: `string::push_back` is slow because it has to do a capacity check for every character. Before: ``` ============================================================================ folly/test/JsonOtherTest.cpp relative time/iter iters/s ============================================================================ jsonSerialize 818.55ns 1.22M jsonSerializeWithNonAsciiEncoding 1.35us 738.06K jsonSerializeWithUtf8Validation 1.42us 705.60K jsonSerializeAsciiWithUtf8Validation 3.27us 306.06K parseSmallStringWithUtf 1.91us 522.38K parseNormalString 1.51us 660.27K parseBigString 384.44ns 2.60M toJson 480.54ns 2.08M ============================================================================ ``` After: ``` ============================================================================ folly/test/JsonOtherTest.cpp relative time/iter iters/s ============================================================================ jsonSerialize 781.69ns 1.28M jsonSerializeWithNonAsciiEncoding 847.68ns 1.18M jsonSerializeWithUtf8Validation 928.68ns 1.08M jsonSerializeAsciiWithUtf8Validation 199.85ns 5.00M parseSmallStringWithUtf 1.93us 518.39K parseNormalString 1.45us 689.11K parseBigString 378.66ns 2.64M toJson 446.38ns 2.24M ============================================================================ ``` All string escaping benchmarks are slightly faster, and ASCII-only with no escapes is 8x faster. Reviewed By: luciang, evilmucedin, yfeldblum Differential Revision: D4793233 fbshipit-source-id: c40d07708bd787799c8c00f9f23a417b862ee9ae
-