Nathan Bronson [Thu, 10 Aug 2017 19:35:20 +0000 (12:35 -0700)]
small_vector default constructor shouldn't be explicit
Summary:
Containers should not tag their default constructor explicit,
because it means that you can't return an empty one with "return {};".
This diff removes the explicit tag from small_vector's default
constructor.
Reviewed By: meyering
Differential Revision:
D5602749
fbshipit-source-id:
2a4a356134c69d01e3b040719dc6ffca0fe97e75
Nick Jiang [Wed, 9 Aug 2017 22:23:24 +0000 (15:23 -0700)]
fix sorted_vector_{set,map} bulk_insert deduplication
Summary: this fixes the case where bulk inserting a range where the smallest element is equal to the largest element of the current set/map fails to deduplicate that element.
Reviewed By: mlogan, yfeldblum
Differential Revision:
D5593284
fbshipit-source-id:
487500ee7a5e33f27c24321ad4a3c07a669fc26c
Yedidya Feldblum [Wed, 9 Aug 2017 21:55:17 +0000 (14:55 -0700)]
Explicitly handle gcc in FOLLY_MAYBE_UNUSED
Summary:
[Folly] Explicitly handle gcc in `FOLLY_MAYBE_UNUSED`.
Fixes build break from {
D5562220}.
Reviewed By: Orvid
Differential Revision:
D5594288
fbshipit-source-id:
5aa2dcb6133d53a0eb20d34b67c8e4407dd2b7ca
Yedidya Feldblum [Wed, 9 Aug 2017 18:21:38 +0000 (11:21 -0700)]
Cut unnecessary parens in IPAddress.h
Summary: [Folly] Cut unnecessary parens in `IPAddress.h`.
Reviewed By: meyering
Differential Revision:
D5589756
fbshipit-source-id:
6499e0db2aeb232356e2808fc59a35869b5dad0a
Yedidya Feldblum [Wed, 9 Aug 2017 03:27:39 +0000 (20:27 -0700)]
Let IPAddressV4::bitCount and IPAddressV6::bitCount be constexpr
Summary: [Folly] Let `IPAddressV4::bitCount` and `IPAddressV6::bitCount` be `constexpr`.
Reviewed By: meyering
Differential Revision:
D5589954
fbshipit-source-id:
f4208efd62e71f47a7c87bdc8ddd421f93413c29
Yedidya Feldblum [Tue, 8 Aug 2017 21:40:04 +0000 (14:40 -0700)]
Apply clang-format to folly/**/*Address*.*
Summary: [Folly] Apply `clang-format` to `folly/**/*Address*.*`.
Reviewed By: Orvid
Differential Revision:
D5581523
fbshipit-source-id:
97b5270e43e279e7deb9606524d5fee844a50649
Phil Willoughby [Tue, 8 Aug 2017 10:19:16 +0000 (03:19 -0700)]
Add a UDL suffix to define a StringPiece
Summary:
Use it like this:
```
using namespace folly::string_piece_literals;
StringPiece p = "A literal string"_sp;
```
In some compilation environments it can be more efficient than the implicit
conversion from `char const *` to `StringPiece`.
Reviewed By: yfeldblum
Differential Revision:
D5562782
fbshipit-source-id:
ce715edc65b1510761e127bf89a6936370253a68
Sargun Vohra [Mon, 7 Aug 2017 20:29:40 +0000 (13:29 -0700)]
Don't allow Future::onError([](exception_wrapper&){}) to compile
Summary: `Future::onError` does not work with a function that takes `exception_wrapper&`, so it should not compile. `exception_wrapper`, `const exception_wrapper&`, and `exception_wrapper&&` are unaffected.
Reviewed By: yfeldblum
Differential Revision:
D5556083
fbshipit-source-id:
45d096d9fee00322eeec6b9b9b1dcbef55cced03
Yedidya Feldblum [Sun, 6 Aug 2017 05:09:13 +0000 (22:09 -0700)]
Consistent use of sformat in address-related files
Summary:
[Folly] Consistent use of `sformat` in address-related files.
V.s. `format(/*...*/).str()` and v.s. `to<std::string>`.
Reviewed By: meyering
Differential Revision:
D5570334
fbshipit-source-id:
83aedf9a694721fb209e62e94f1a5c5ecd355e81
Yedidya Feldblum [Sun, 6 Aug 2017 05:00:20 +0000 (22:00 -0700)]
Apply clang-format to folly/**/*Range*.*
Summary: [Folly] Apply `clang-format` to `folly/**/*Range*.*`.
Reviewed By: meyering
Differential Revision:
D5570553
fbshipit-source-id:
230aa8557c2d402d741aaa541f96f4634dd13d3b
Xiangyu Bu [Fri, 4 Aug 2017 21:32:14 +0000 (14:32 -0700)]
Test server-side getPeerCert().
Summary: Make sure server can get client cert using AsyncSSLSocket::getPeerCert() call.
Reviewed By: anirudhvr
Differential Revision:
D5557303
fbshipit-source-id:
d95696f592e3b3f67acba9f92add32b91c29a000
Xiangyu Bu [Fri, 4 Aug 2017 17:54:29 +0000 (10:54 -0700)]
Clang-format AsyncSSLSocketTest.cpp.
Summary: ... as titled.
Reviewed By: yfeldblum
Differential Revision:
D5558742
fbshipit-source-id:
b63b121cde8db93de4cabc80563539297611d600
Marko Novakovic [Fri, 4 Aug 2017 06:02:17 +0000 (23:02 -0700)]
Replacing instances of __CLANG__ with __clang__
Summary:
Clang compiler does not define `__CLANG__` macro and
only defines `__clang__`, but we use `__CLANG__` in a
few places in the code which was probably done by mistake.
This should make the code behave in the intended way.
Reviewed By: yfeldblum
Differential Revision:
D5542162
fbshipit-source-id:
74d24ba9464d8faec160d73e6c582967d3c80c19
Alex Guzman [Thu, 3 Aug 2017 21:18:34 +0000 (14:18 -0700)]
Add X509_EXTENSION unique pointer
Summary: Adds unique pointer type for X509_EXTENSION
Reviewed By: knekritz
Differential Revision:
D5556504
fbshipit-source-id:
b84190f20dd0a2ee9f5f07f197caf53a9a063af7
Adam Norton [Thu, 3 Aug 2017 17:08:17 +0000 (10:08 -0700)]
Reduce Code Duplication In NotificationQueue With Universal Reference
Summary: Remove a bunch of identical code that only exists to provide interfaces for both `const MessageT&` and `MessageT&&` arguments.
Reviewed By: ot
Differential Revision:
D5540560
fbshipit-source-id:
ae7b9345b64130fc748033be2e0587c4f83345a7
Martin Martin [Wed, 2 Aug 2017 18:25:45 +0000 (11:25 -0700)]
Fix error in comment.
Summary: Speaking of errors...
Reviewed By: philippv
Differential Revision:
D5545916
fbshipit-source-id:
cc8471c2f0fc3cefaa9f8493d9b976098f896176
Greg Bentley [Wed, 2 Aug 2017 02:15:32 +0000 (19:15 -0700)]
Fix for building with icc.
Summary: Closes https://github.com/facebook/folly/pull/649
Reviewed By: Orvid
Differential Revision:
D5535534
Pulled By: yfeldblum
fbshipit-source-id:
641186d6171479755bd9471a484b8b3c2ab62418
Alex Guzman [Tue, 1 Aug 2017 23:23:36 +0000 (16:23 -0700)]
Create X509_STORE ptr type
Summary: What it says on tin
Reviewed By: knekritz
Differential Revision:
D5533819
fbshipit-source-id:
e3ba89f02d20d171fbcb8ed2853267d37bd86756
Yedidya Feldblum [Tue, 1 Aug 2017 22:53:15 +0000 (15:53 -0700)]
Cut debugging code from SocketAddress
Summary:
[Folly] Cut debugging code from `SocketAddress`.
Specifically from its `ExternalUnixAddr` helper class, which is probably not broken.
Reviewed By: simpkins
Differential Revision:
D5530685
fbshipit-source-id:
adfc46ec1c1a142e9914051e8a97b39f41d71630
Phil Willoughby [Tue, 1 Aug 2017 19:20:30 +0000 (12:20 -0700)]
C++11 support for Replaceable
Summary: Also add tests for the `is_replaceable` trait.
Reviewed By: yfeldblum
Differential Revision:
D5526317
fbshipit-source-id:
92559d55fbb8d115856ef9e8f86b42e327f74e56
Neel Goyal [Tue, 1 Aug 2017 19:18:25 +0000 (12:18 -0700)]
Add TLS 1.2+ version for contexts
Summary: Add an SSL Version that specifies only TLS 1.2 and up. This prevents any client with less than TLS 1.2 from connecting.
Reviewed By: knekritz
Differential Revision:
D5537423
fbshipit-source-id:
131f5b124af379eaa2b443052be9b43290c41820
Neel Goyal [Tue, 1 Aug 2017 15:37:13 +0000 (08:37 -0700)]
Change AsyncUDP's readCallback to be protected.
Summary: Change AsyncUDPSocket's ReadCallback to be protected so that subclasses can have access to it.
Reviewed By: yangchi
Differential Revision:
D5376012
fbshipit-source-id:
7ec21d9bfe6bde525253adea7abf5dea15fb7fa0
Yedidya Feldblum [Tue, 1 Aug 2017 02:42:53 +0000 (19:42 -0700)]
DRY some methods in IPAddress
Summary:
[Folly] DRY some methods in `IPAddress`.
Specifically, the ones which just delegate to either `asV4()` or to `asV6()`.
Reviewed By: mzlee
Differential Revision:
D5529797
fbshipit-source-id:
4dd3dc893ab19281325700b85400c1c1aadfd77f
Yang Chi [Mon, 31 Jul 2017 20:48:23 +0000 (13:48 -0700)]
Make sendmsg in AsyncUDPSocket overridable
Summary: Add a protected virtual sendmsg method to AsyncUDPSocket. And make it default to call the system sendmsg function. This enables subclasses of AsyncUDPSocket to be able to override the behavior of sendmseg, also makes AsyncUDPSocket easier to mock and test.
Reviewed By: afrind
Differential Revision:
D5459745
fbshipit-source-id:
b0227bf7503b1096cb1f0bfc8b9c784db2f2e45d
Yedidya Feldblum [Mon, 31 Jul 2017 19:04:10 +0000 (12:04 -0700)]
No need for strncpy in passwordCallback
Summary:
[Folly] No need for `strncpy` in `passwordCallback`.
Careful reading of the documentation:
> The pem_passwd_cb must write the password into the provided buffer `buf` which is of size `size`.
>
> https://wiki.openssl.org/index.php?title=Manual:SSL_CTX_set_default_passwd_cb(3)&oldid=761
No mention is made of a requirement on the password being written into `buf` that it be null-terminated.
Reviewed By: knekritz, meyering
Differential Revision:
D5524814
fbshipit-source-id:
6cfc588cdf3675281ffe39e6af376f3f0631d1b0
Phil Willoughby [Mon, 31 Jul 2017 08:35:58 +0000 (01:35 -0700)]
Remove template helper constants
Summary: Not supported by some environments.
Reviewed By: yfeldblum
Differential Revision:
D5526180
fbshipit-source-id:
2c2b6f7627860c5f896532b90601c817530e6b69
Yedidya Feldblum [Mon, 31 Jul 2017 06:14:36 +0000 (23:14 -0700)]
Consistency in namespace-closing comments
Summary: [Folly] Consistency in namespace-closing comments.
Reviewed By: Orvid
Differential Revision:
D5524744
fbshipit-source-id:
ced4dd2398ed6baa3ad5b68b74eee6a5d6b2b103
Yedidya Feldblum [Mon, 31 Jul 2017 02:40:25 +0000 (19:40 -0700)]
Formatting for template parameters
Summary: [Folly] Formatting for template parameters.
Reviewed By: Orvid
Differential Revision:
D5525123
fbshipit-source-id:
4feb772300cfdd6ae3168fe9f59f5a951fb85d0e
Yedidya Feldblum [Mon, 31 Jul 2017 00:58:29 +0000 (17:58 -0700)]
Simplify the StateSize helper in Random
Summary:
[Folly] Simplify the `StateSize` helper in `Random`.
* Using member type aliases rather than class constants means we can remove definitions.
* Partially specializing over all RNG types with `state_size` class constants means we can remove the `mersenne_twister` specializations, which have many template parameters and are a pain.
Reviewed By: Orvid
Differential Revision:
D5525144
fbshipit-source-id:
bc27f112ed0d9b55befe9dabe08c4d345a402435
Yedidya Feldblum [Sun, 30 Jul 2017 21:31:01 +0000 (14:31 -0700)]
Outline throw statements in format
Summary: [Folly] Outline `throw` statements in `format`.
Reviewed By: Orvid
Differential Revision:
D5523933
fbshipit-source-id:
371c9ecc707e48dcc05fa4aab4fd326111466161
Yedidya Feldblum [Sun, 30 Jul 2017 21:28:44 +0000 (14:28 -0700)]
Let MacAddress use a helper hex-table
Summary:
[Folly] Let `MacAddress` use a helper hex-table.
The table is in the `folly::detail` namespace so it is non-public to users of folly, but the rules may not be quite as strict in at least some cases within folly.
Also the helper `unhex` function that this replaces is not `clang-format`-clean, so this lets us sidestep that.
Reviewed By: Orvid
Differential Revision:
D5524229
fbshipit-source-id:
21d6938e20cd675e65499a5b64d2af934f980222
Yedidya Feldblum [Sun, 30 Jul 2017 03:09:05 +0000 (20:09 -0700)]
Consistent indentation for class visibility labels
Summary: [Folly] Consistent indentation for class visibility labels (`public:`, `protected:`, `private:`). Style is +1 column relative to the `class` keyword.
Reviewed By: andrewjcg
Differential Revision:
D5524869
fbshipit-source-id:
53e4b6cbda10d5b63bafbd535794a8b7ae01a8e0
Yedidya Feldblum [Sun, 30 Jul 2017 02:30:13 +0000 (19:30 -0700)]
template< -> template <
Summary:
[Folly] `template<` -> `template <`.
And then apply `clang-format` style to affected `template <...>` lines.
Reviewed By: andrewjcg
Differential Revision:
D5524792
fbshipit-source-id:
6614eecf384bf3e3ccc2f0cc7c5334a0cb9c76af
Yedidya Feldblum [Sun, 30 Jul 2017 00:54:14 +0000 (17:54 -0700)]
Mark two implicit ctors as explicit
Summary:
[Folly] Mark two implicit ctors as `explicit`.
They did not need to be implicit.
Reviewed By: andrewjcg
Differential Revision:
D5524798
fbshipit-source-id:
a50bc6bfc9da2642891faf0aa38a19f46e75b9da
Yedidya Feldblum [Sat, 29 Jul 2017 19:52:49 +0000 (12:52 -0700)]
Define IPAddressV6 comparison ops in terms of its fields
Summary: [Folly] Define `IPAddressV6` comparison ops in terms of its fields using `std::tie`.
Reviewed By: andrewjcg
Differential Revision:
D5524248
fbshipit-source-id:
5f5f2acd6e9cfd6dfd148cc7d95bda720bf81ee9
Yedidya Feldblum [Sat, 29 Jul 2017 19:51:53 +0000 (12:51 -0700)]
Merge IPAddressTest.h into the IPAddressTest.cpp
Summary:
[Folly] Merge `IPAddressTest.h` into the `IPAddressTest.cpp`.
There is no real need to split anything out into a header file.
Reviewed By: andrewjcg
Differential Revision:
D5524267
fbshipit-source-id:
e128c69c7da38663f19d0ccd73edaae36c3f469a
Yedidya Feldblum [Sat, 29 Jul 2017 19:19:18 +0000 (12:19 -0700)]
Outline throw statements in folly/futures/
Summary: [Folly] Outline `throw` statements in `folly/futures/`.
Reviewed By: ericniebler
Differential Revision:
D5522791
fbshipit-source-id:
545185bc580ea8628075b9ecae46c2f19308e937
Yedidya Feldblum [Sat, 29 Jul 2017 18:51:38 +0000 (11:51 -0700)]
Compute masks in IPAddressV4
Summary: [Folly] Compute masks in `IPAddressV4`. Just like in `IPAddressV6`.
Reviewed By: WillerZ
Differential Revision:
D5524197
fbshipit-source-id:
ebeeab28304bff4f6150cf76216d170908e62aa4
Phil Willoughby [Sat, 29 Jul 2017 07:08:27 +0000 (00:08 -0700)]
Fix the copy constructor in Replaceable
Summary:
Fix the copy constructor, and add the missing testcase which would have found
this problem.
Reviewed By: yfeldblum
Differential Revision:
D5516628
fbshipit-source-id:
3e688c34f061511df5b68243111fecb83483d79d
Yedidya Feldblum [Fri, 28 Jul 2017 21:39:32 +0000 (14:39 -0700)]
Optimal make_integer_sequence
Summary:
[Folly] Optimal `make_integer_sequence`.
When the builtin `__make_integer_seq` is available, use that. It is the most optimal implementation.
Otherwise, use a tweaked divide-and-conquer implementation. Designed to reuse more template instantiations than the straightforward divide-and-conquer approach in libstdc++ >= 6. And definitely not linearly recursive as in libstdc++ < 6.
Illustrating with an example. Let `M` be whatever template type implements `make_integer_sequence`. For `M<17>`, libstdc++ < 6 does linear recursion (least optimal), instantiating `M<16>`, `M<15>`, ..., `M<1>`. libstdc++ >= 6 does straightforward divide-and-conquer recursion, instantiating `M<8>` and `M<9>`, recursing into `M<4>` and `M<5>`, recursing into `M<2>` and `M<3>`, recursing into `M<1>`. Our implementation does a variant of divide-and-conquer recursion to maximize reuse, instantiating `M<8>` and `M<1>`, recursing into `M<4>`, recursing into `M<2>`.
Implementation derived from `fatal/type/sequence.h`.
Reviewed By: ericniebler
Differential Revision:
D5496975
fbshipit-source-id:
449b4e0a1c7b4a5b602752c1d3dd8914bf9a8e71
stryku [Fri, 28 Jul 2017 20:05:08 +0000 (13:05 -0700)]
Prevent IsOneOf unused template specialization instantiation
Summary:
Current `IsOneOf` implementation does unnecessary work because it instantiates all of the possible template specializations, even if type is same as the first of the tested ones. E.g.
`IsOneOf<char, char, int, float>` will instantiate:
```
IsOneOf<char, char, int, float>
IsOneOf<char, char, int>
IsOneOf<char, char>
IsOneOf<char>
```
With the proposed inheritance, compiler will stop initializing at the first match.
Closes https://github.com/facebook/folly/pull/643
Reviewed By: ericniebler
Differential Revision:
D5482783
Pulled By: yfeldblum
fbshipit-source-id:
3d04c750ce72fa9b19b4d0588cccfb396a9e0715
Mingtao Yang [Fri, 28 Jul 2017 16:57:24 +0000 (09:57 -0700)]
Add X509_REVOKED_get0_* OpenSSL shims
Reviewed By: yfeldblum
Differential Revision:
D5509756
fbshipit-source-id:
0b9581dafb073c5e3e5a229c032c6cf272ceb2e0
Andrew Krieger [Fri, 28 Jul 2017 15:20:06 +0000 (08:20 -0700)]
Fix StringPiece ostream overloads to properly not rely on <ostream>
Summary:
std::ostream may be incomplete because Range.h doesn't use <ostream>,
only <iosfwd>. Changing the operator<< overloads to be templated on the char
type defers typechecking until callsites, which will avoid the potential problem.
Reviewed By: yfeldblum, ericniebler
Differential Revision:
D5494648
fbshipit-source-id:
e59b6fdfba6c08ec70ebb1e10c14a43307a1119f
Andrew Krieger [Fri, 28 Jul 2017 15:20:05 +0000 (08:20 -0700)]
std::basic_ostream operator<< overload for FixedString
Summary:
When attempting to output a FixedString into eg. glog or
some other ostream, it is first being implicitly converted to StringPiece
and then that is printed using the overloaded operator<<. If another
suitable implicit conversion is provided, eg. to `dynamic`, compilers
cannot choose between either one. Instead, overload operator<< directly
on FixedString to resolve the ambiguity.
Reviewed By: yfeldblum, ericniebler
Differential Revision:
D5492779
fbshipit-source-id:
92d661e5471a91057d7a0d010420709c5d59232f
Michael Lee [Thu, 27 Jul 2017 16:20:04 +0000 (09:20 -0700)]
Switch to folly/Optional.h to use std::aligned_storage
Summary: Older versions of libc++ do not support `std::aligned_storage_t`, switch to something more widely supported.
Differential Revision:
D5506449
fbshipit-source-id:
3f5cf5dddf00bda76d4f16cfd4d8944ee5f1ba55
Yedidya Feldblum [Wed, 26 Jul 2017 21:18:41 +0000 (14:18 -0700)]
Add FOLLY_HAS_FEATURE and use it
Summary:
[Folly] Add `FOLLY_HAS_FEATURE` and use it.
Use it in the definitions of `FOLLY_SANITIZE_ADDRESS` and `FOLLY_SANITIZE_THREAD`.
Reviewed By: meyering
Differential Revision:
D5496915
fbshipit-source-id:
e272137ad8ba891e64fc98444edf573115764ee2
Yedidya Feldblum [Wed, 26 Jul 2017 18:52:29 +0000 (11:52 -0700)]
Cut moveFromTry
Summary: [Folly] Cut `moveFromTry`. Not necessary, and is even longer than `std::move`.
Reviewed By: WillerZ, ericniebler
Differential Revision:
D5478450
fbshipit-source-id:
ecd01cb1bcd435e49268a76dd558e57ba8dd9b9e
Yedidya Feldblum [Wed, 26 Jul 2017 18:39:53 +0000 (11:39 -0700)]
Outline throw statements in dynamic
Summary:
[Folly] Outline `throw` statements in `dynamic`.
There is no need for them to be inline - definitionally, they are always cold.
Reviewed By: WillerZ
Differential Revision:
D5497457
fbshipit-source-id:
7b649c59b5b2609f838eb10e9329468d1bd1d558
Xiangyu Bu [Wed, 26 Jul 2017 18:32:54 +0000 (11:32 -0700)]
Kill folly::SSLContext::switchCiphersIfTLS11.
Summary: It has been years since BEAST attack surfaced. The vulnerabilities have been patched and the mitigation using RC4 cipher is no longer needed. This diff removes the code relevant to mitigating BEAST years ago.
Reviewed By: anirudhvr
Differential Revision:
D5409859
fbshipit-source-id:
58178e68a447f372b19491832a7be590af9402e9
Neel Goyal [Wed, 26 Jul 2017 18:31:11 +0000 (11:31 -0700)]
Add getEventBase() to AsyncUDPSocket
Summary: Add an event base getter for AsyncUDPSocket similar to the other socket classes.
Reviewed By: knekritz
Differential Revision:
D5498587
fbshipit-source-id:
ac3179e03485328417ed9863f6bb790de7c691cb
Dave Watson [Wed, 26 Jul 2017 16:41:45 +0000 (09:41 -0700)]
ConcurrentHashMap
Summary:
A ConcurrentHashMap with wait-free readers, as in Java's ConcurrentHashMap.
It's a pretty generic closed-addressing chaining hashtable, except find() uses two hazard pointers
to do hand-over-hand traversal of the list, so it never takes a lock.
On rehash, only the part of the chain that remains the same (i.e. is still hashed to the same bucket)
is reused, otherwise we have to allocate new nodes.
Reallocating nodes means we either have to copy the value_type, or add in an extra indirection
to access it. Both are supported.
There's still a couple opportunities to squeeze some more perf out with optimistic loading
of nodes / cachelines, but I didn't go that far yet, it sill looks pretty good.
Reviewed By: davidtgoldblatt
Differential Revision:
D5349966
fbshipit-source-id:
022e8adacd0ddd32b2a4563caa99c0c4878851d8
Dave Watson [Wed, 26 Jul 2017 15:07:56 +0000 (08:07 -0700)]
Allow stealing pointer bits
Summary:
Currently hazard pointers doesn't support stealing any of the pointer bits.
You can *almost* roll it yourself using try_protect, but this prevents
implementations from choosing their type of barrier.
This adds a new get_protected interface that you can use to steal bits, or
otherwise manipulate pointers as you would like.
This also adds a MWMR list based set example that uses it, that is wait-free
for readers (unlike the SWMR example, that is only lock-free).
Reviewed By: magedm
Differential Revision:
D5455615
fbshipit-source-id:
53d282eda433e00b6b53cd804d4e1c32c74c2fb8
Phil Willoughby [Wed, 26 Jul 2017 12:52:11 +0000 (05:52 -0700)]
Update Optional
Summary: Now const-optimizer safe, and safe when the contained value overloads unary operator&
Reviewed By: yfeldblum
Differential Revision:
D5480170
fbshipit-source-id:
3b53b0b6ce608857aa29d3f61eccd0b793b4cddc
Phil Willoughby [Wed, 26 Jul 2017 12:12:29 +0000 (05:12 -0700)]
clang-format Optional.h
Reviewed By: yfeldblum
Differential Revision:
D5497522
fbshipit-source-id:
bb208aeb37b5b9ce99619193d4cd2d0f3fb39178
Yedidya Feldblum [Wed, 26 Jul 2017 08:51:44 +0000 (01:51 -0700)]
Add FOLLY_HAS_BUILTIN and use it
Summary:
[Folly] Add `FOLLY_HAS_BUILTIN` and use it.
Use it in the definition of `folly::launder`. Of course, since GCC does not have `__has_builtin`, we still have to check its version.
Reviewed By: WillerZ
Differential Revision:
D5496748
fbshipit-source-id:
3bd6e89424dfd2c9cb9795ee4d88f66c4294cc4c
Yedidya Feldblum [Wed, 26 Jul 2017 07:04:24 +0000 (00:04 -0700)]
Cut throwOnFail
Summary:
[Folly] Cut `throwOnFail`.
It is not necessary, and `CHECK_THROW`, its reason for existing, can be implemented without it.
It can also easily be a pessimization because there is no way to delay computation of the arguments to the exception ctor until after the check. So if there is, say, a computation using `sformat` to compute a string argument to the exception ctor, that will always be performed rather than being performed only should the check fail.
Reviewed By: Orvid
Differential Revision:
D5478804
fbshipit-source-id:
71a125c126eae76c6e95ef1bd23ee883b1db39a5
Yangqing Jia [Wed, 26 Jul 2017 06:45:53 +0000 (23:45 -0700)]
folly: changes to make nvcc happy
Summary:
(1) small_vector.h line 1099: wrap the default return in an else statement to
avoid compiler warning of "unreachable statement".
(2) Constexpr.h: need to treat cudacc similarly to msvc.
(Note: this ignores all push blocking failures!)
Reviewed By: dzhulgakov
Differential Revision:
D5387061
fbshipit-source-id:
f002ab5ec00d4dcd85d86386f87a0327023afa1b
Yedidya Feldblum [Wed, 26 Jul 2017 03:50:18 +0000 (20:50 -0700)]
Move __CLANG_PREREQ to folly/CPortabiilty.h
Summary: [Folly] Move `__CLANG_PREREQ` to `folly/CPortabiilty.h`.
Reviewed By: Orvid
Differential Revision:
D5496372
fbshipit-source-id:
710af3d30aa8bd0e5f645beede354e3463f1bb25
Yedidya Feldblum [Wed, 26 Jul 2017 03:50:16 +0000 (20:50 -0700)]
There is no HAVE_SHADOW_LOCAL_WARNINGS
Summary:
[Folly] There is no `HAVE_SHADOW_LOCAL_WARNINGS`
It is `FOLLY_HAVE_SHADOW_LOCAL_WARNINGS`.
Reviewed By: Orvid
Differential Revision:
D5496247
fbshipit-source-id:
689f40180180465bdc44593059e44fb64cf3e415
Mingtao Yang [Tue, 25 Jul 2017 22:27:18 +0000 (15:27 -0700)]
Fix include typo
Reviewed By: anirudhvr
Differential Revision:
D5492790
fbshipit-source-id:
10e868976a7ea42673d5b5c906a53c6c9495a288
nicksbyman [Tue, 25 Jul 2017 20:04:17 +0000 (13:04 -0700)]
add import to main in logging example
Summary: Closes https://github.com/facebook/folly/pull/642
Reviewed By: Orvid
Differential Revision:
D5471368
Pulled By: yfeldblum
fbshipit-source-id:
3bbafd04b93828121ba829027959b6b3e0e55888
Mingtao Yang [Tue, 25 Jul 2017 18:52:40 +0000 (11:52 -0700)]
Move OpenSSL locking code out of SSLContext
Summary:
OpenSSL 1.1.0 deprecates the callback based locking setup in favor
for platform native mutexes.
Added `OPENSSL_init_ssl` in the OpenSSL portability module for OpenSSL API < 1.1.0. This implements
the standard OpenSSL library initialization routines (taken from SSLContext::initializeOpenSSL).
Added `OPENSSL_cleanup` in the OpenSSL portability module for OpenSSL API < 1.1.0. This implements
the cleanup routine from SSLContext::cleanupOpenSSL.
Removed `SSLContext::SSLLockType`. Replaced with `folly::ssl::LockType`.
Reviewed By: mzlee, ngoyal
Differential Revision:
D5404777
fbshipit-source-id:
7e5d9bf4a6683afb5560ada0a5b73cac3ff2662b
Nicholas Ormrod [Tue, 25 Jul 2017 17:50:36 +0000 (10:50 -0700)]
Fix double-free in DynamicConverter
Summary:
If an exception is thrown during the construction of value in a container, then the Transformer iterator will not successfully reconstruct a cache_ object after explicitly calling its destructor (due to the exception being thrown), which results in a double-free when cache_ is destroyed as part of Transformer's destructor.
Conveniently, there exists a piece of code designed to solve just this problem: folly::Optional. Replace cache_ and valid_ with folly::Optional.
This also fixes the unnecessary requirement that container value types have default constructors, since cache_ is no longer default constructed inside of Transformer.
Reviewed By: markisaa
Differential Revision:
D5472342
fbshipit-source-id:
eade1f7ce260b9b3406d92af8255b5ffa4e4a51c
Phil Willoughby [Tue, 25 Jul 2017 07:17:24 +0000 (00:17 -0700)]
Replaceable
Summary:
An instance of `Replaceable<T>` wraps an instance of `T`.
You access the inner `T` instance with `operator*` and `operator->` (as if
it were a smart pointer).
`Replaceable<T>` adds no indirection cost and performs no allocations.
`Replaceable<T>` has the same size and alignment as `T`.
You can replace the `T` within a `Replaceable<T>` using the `emplace` method
(presuming that it is constructible and destructible without throwing
exceptions). If the destructor or constructor you're using could throw an
exception you should use `Optional<T>` instead, as it's not a logic error for
that to be empty.
Reviewed By: yfeldblum
Differential Revision:
D5346528
fbshipit-source-id:
c7d72e73ea04e371325327a7ff0b345315d6e5ac
Yedidya Feldblum [Mon, 24 Jul 2017 05:24:46 +0000 (22:24 -0700)]
Move the SpookyHash libraries into folly/hash
Summary:
[Folly] Move the SpookyHash libraries into `folly/hash`.
And propagate the changes to `#include` lines, etc.
Reviewed By: Orvid
Differential Revision:
D5477735
fbshipit-source-id:
94fe95ece05b52bde1466ab5f9fb8b53a4c59bed
Yedidya Feldblum [Mon, 24 Jul 2017 04:43:04 +0000 (21:43 -0700)]
Outline the throw statements in Try
Summary:
[Folly] Outline the `throw` statements in `Try`.
They are by definition cold and so we gain nothing from inlining them.
Reviewed By: Orvid
Differential Revision:
D5478237
fbshipit-source-id:
f413251a56ca4cbddcf3baea6679a552ae5bb19e
Subodh Iyengar [Sun, 23 Jul 2017 18:15:06 +0000 (11:15 -0700)]
Add fnv1-a hash to Hash
Summary:
Add fnv1-a 64 bit hash to Hash.h.
fnv1-a is supposed to be preferred over
fnv1.
Reviewed By: yfeldblum
Differential Revision:
D5453401
fbshipit-source-id:
c13f12ef11eb6745c95f3901b14ceafce90ea0ea
Mihaela Ogrezeanu [Sat, 22 Jul 2017 10:03:41 +0000 (03:03 -0700)]
Revert
D5455584: [Folly] Move the SpookyHash libraries into folly/hash
Summary:
This reverts commit
616b04579eb6c822023b04840b075f3ac9fbb720
bypass-lint
Differential Revision:
D5455584
fbshipit-source-id:
afc712fe40121232f52a5bad781350581cec6ce8
Yedidya Feldblum [Sat, 22 Jul 2017 08:17:31 +0000 (01:17 -0700)]
Move the SpookyHash libraries into folly/hash
Summary:
[Folly] Move the SpookyHash libraries into `folly/hash`.
And propagate the changes to `#include` lines, etc.
Reviewed By: ot, ericniebler, Orvid
Differential Revision:
D5455584
fbshipit-source-id:
616b04579eb6c822023b04840b075f3ac9fbb720
Stephen Chen [Fri, 21 Jul 2017 21:24:04 +0000 (14:24 -0700)]
crc32c: add missing header for std::runtime_error
Summary: On the non sse42 path, we throw std::runtime_error, but Crc32cDetail.cpp is missing the header for it so it fails to compile on aarch64.
Reviewed By: yfeldblum
Differential Revision:
D5468906
fbshipit-source-id:
2d5408621cb2b6758d3501407ed3d2a40d79f1b0
Yedidya Feldblum [Fri, 21 Jul 2017 08:45:34 +0000 (01:45 -0700)]
Apply clang-format to folly/experimental/symbolizer/
Summary: [Folly] Apply `clang-format` to `folly/experimental/symbolizer/`.
Reviewed By: Orvid
Differential Revision:
D5468832
fbshipit-source-id:
94a0f82312769be0e8be724c11f97e14425ead10
Yedidya Feldblum [Fri, 21 Jul 2017 08:44:43 +0000 (01:44 -0700)]
Apply clang-format to folly/experimental/io/
Summary: [Folly] Apply `clang-format` to `folly/experimental/io/`.
Reviewed By: Orvid
Differential Revision:
D5460571
fbshipit-source-id:
d19aff829316dd277e65620196e12db8cad46787
Yedidya Feldblum [Fri, 21 Jul 2017 07:20:14 +0000 (00:20 -0700)]
Style tweaks to max_align_v calculation
Summary:
[Folly] Style tweaks to `max_align_v` calculation.
* Change ns from `folly::detail` since that can be crowded and many other folly libraries may include this header.
* Extract a 2-param `max` alias.
* Fix an incorrectly hardcoded `size_t`.
Reviewed By: WillerZ
Differential Revision:
D5468758
fbshipit-source-id:
14a3f67323020a3cfce2b3b46f5f64f3e6125027
Yedidya Feldblum [Fri, 21 Jul 2017 02:29:51 +0000 (19:29 -0700)]
Apply clang-format to folly/tracing/
Summary: [Folly] Apply `clang-format` to `folly/tracing/`.
Reviewed By: Orvid
Differential Revision:
D5460511
fbshipit-source-id:
c7a7d34211044a1b76934f184a8552a96d0bad91
Yedidya Feldblum [Fri, 21 Jul 2017 02:29:14 +0000 (19:29 -0700)]
Parse suffixes without switch-fallthrough in huge-pages
Summary: [Folly] Parse suffixes without switch-fallthrough in huge-pages. It is clever, but weird. We can use an immediately-executed lambda expression to make it convenient.
Reviewed By: Orvid
Differential Revision:
D5467585
fbshipit-source-id:
02ddb97641db97e38e3f40388ecc522eccd436cb
Yedidya Feldblum [Thu, 20 Jul 2017 23:52:28 +0000 (16:52 -0700)]
Apply clang-format to folly/experimental/bser/
Summary: [Folly] Apply `clang-format` to `folly/experimental/bser/`.
Reviewed By: Orvid
Differential Revision:
D5460552
fbshipit-source-id:
e103f8920eb29b7c14688f5bbb3e28129ef35e96
Yedidya Feldblum [Thu, 20 Jul 2017 22:10:41 +0000 (15:10 -0700)]
Drop a remnant of gcc48 support in futures
Summary: [Folly] Drop a remnant of gcc48 support in futures. Because gcc48 is no longer supported.
Reviewed By: Orvid, meyering
Differential Revision:
D5460788
fbshipit-source-id:
86e2985a0980357641d18f59fd25b9667ec30ab0
Jeff Cai [Thu, 20 Jul 2017 20:09:10 +0000 (13:09 -0700)]
fix ExceptionWrapper comment
Summary:
Fix comment for exception_wrapper's `operator bool()`.
It reads "return `true` if `*this` is not holding an exception"
but the actual behavior is to return `true` if `*this` *is* holding
an exception.
Reviewed By: yfeldblum
Differential Revision:
D5456386
fbshipit-source-id:
ec3a472ea441476d835881e94036a3957bb2ab32
Phil Willoughby [Thu, 20 Jul 2017 12:28:49 +0000 (05:28 -0700)]
Introduce folly::max_align_t and folly::max_align_v
Summary:
`folly::max_align_t` is a portable replacement for `std::max_align_t`.
`folly::max_align_v` is a `constexpr size_t` with the same value as `alignof(folly::max_align_t)`
32-bit iOS environments have `alignof(std::max_align_t) == 4`, which is not correct. This is more
correct in that I have not yet found a more-aligned basic type.
Reviewed By: yfeldblum
Differential Revision:
D5442333
fbshipit-source-id:
0a93e48a730d65ef76e04f132b5976c93587b14c
Subodh Iyengar [Thu, 20 Jul 2017 11:51:25 +0000 (04:51 -0700)]
Add folly non null
Summary:
Add non null annotation to
folly to help with linters
complaining when a pointer could
be null, however it never is.
Reviewed By: yfeldblum
Differential Revision:
D5453255
fbshipit-source-id:
cf7ccbcc86d171ef4f6d373b6f751f709e4587b1
Yedidya Feldblum [Thu, 20 Jul 2017 08:59:24 +0000 (01:59 -0700)]
Move futures helper types into folly::futures::detail
Summary:
[Folly] Move futures helper types into `folly::futures::detail`.
From `folly::detail`, where it would be easier to collide. Especially for names like `Core`.
Reviewed By: WillerZ
Differential Revision:
D5460766
fbshipit-source-id:
3f7bff784bbb89c7c86d2f1824323d71321c7ad6
Benjamin Reesman [Thu, 20 Jul 2017 07:08:50 +0000 (00:08 -0700)]
do not crash process by default when ExceptionTracer fails to reflect over cxxabi
Summary: It is possible in certain cirucmstances for the cxxabi reflection code in `ExceptionTracer` to fail to cope with exceptions that we've seen in production and it currently aborts the process in that case. This diff switches this to `DFATAL`/`DCHECK`.
Reviewed By: yfeldblum
Differential Revision:
D5431445
fbshipit-source-id:
c3d68372c2fadbb518f78fe99e817db611953d22
Tom Jackson [Thu, 20 Jul 2017 00:22:27 +0000 (17:22 -0700)]
Visit, for monitoring or mutating pipelines
Summary: The pattern `mapped([](auto&& i) { ...; return std::move(i); }` is quite common. Evidently people need some good mechanism to just observe or possibly mutate items in pipelines. Note that this is still lazy, it is only called when the pipeline is run.
Reviewed By: yfeldblum
Differential Revision:
D5457196
fbshipit-source-id:
3a892b8895e02dd8fcd6a7fd4d3b27063d1b071f
Victor Gao [Wed, 19 Jul 2017 23:24:54 +0000 (16:24 -0700)]
change the definition of FOLLY_MAYBE_UNUSED
Summary:
Currently gcc does not support attributes declared using square brackets well and some builds might break because of this.
Since `__attribute__((...))` works for both clang and gcc, we should switch to it for now.
Reviewed By: yfeldblum
Differential Revision:
D5456734
fbshipit-source-id:
d7a8bf1389afc5d60604f22d37c93611dc46259c
Dave Watson [Wed, 19 Jul 2017 20:47:15 +0000 (13:47 -0700)]
3-way crc32c
Summary: Current folly version uses a single crc32c. crc32c has a latency of 3, so pipelining three in a row makes it nearly 3x faster (for data all in cache).
Reviewed By: yfeldblum
Differential Revision:
D5418228
fbshipit-source-id:
d3a250e1b4fe1f0bc99b44c660df94cf233aebd6
Xiangyu Bu [Wed, 19 Jul 2017 19:24:46 +0000 (12:24 -0700)]
Add SSLOptions to Makefile.am.
Summary: Add paths of SSLOptions.{cpp, h} to folly/Makefile.am.
Reviewed By: Orvid
Differential Revision:
D5453343
fbshipit-source-id:
ba0b8b065ed964dfff1757533db17e31aa672e83
Eli Lindsey [Wed, 19 Jul 2017 15:51:26 +0000 (08:51 -0700)]
append the interface index instead of throwing an exception when the scope id lookup fails
Summary: As written, this str() method depends on the current state of the host - if an interface disappears (as is commong with eg. mobile, ipsec, etc.) then attempting to generate a string representation of this v6 address will currently throw an exception. Instead, we're going toignore the lookup failure and append the index i; this form is interchangeable, though slightly less legible.
Reviewed By: yfeldblum
Differential Revision:
D5443618
fbshipit-source-id:
bbd3b4edaee8098671140af7400377d5e2b1937b
Dave Watson [Wed, 19 Jul 2017 13:24:33 +0000 (06:24 -0700)]
AtomicCoreCachedSharedPtr
Summary: A folly::atomic_shared_ptr version of CoreCachedSharedPtr.
Reviewed By: yfeldblum
Differential Revision:
D5389603
fbshipit-source-id:
942700cd66f5f5219418f4c6112146dc40351aa0
Christopher Dykes [Tue, 18 Jul 2017 22:52:33 +0000 (15:52 -0700)]
Support if_indextoname in the socket portability header
Summary: Windows doesn't have `net/if.h` and instead needs `iphlpapi.h` included, and `ntddndis.h` is ultimately needed to get the definition of `IF_NAMESIZE`.
Reviewed By: yfeldblum
Differential Revision:
D5438188
fbshipit-source-id:
48a786f7d10ca4b8479bb20b257ed1e857431654
Victor Gao [Tue, 18 Jul 2017 20:19:24 +0000 (13:19 -0700)]
add FOLLY_MAYBE_UNUSED
Summary: This adds a macro `FOLLY_MAYBE_UNUSED` in `folly/CppAttributes.h` that can be used to suppress `-Wunused` warnings.
Reviewed By: yfeldblum
Differential Revision:
D5444742
fbshipit-source-id:
b16e8efefd76282498ad6114bac9548064cf38d5
Xiangyu Bu [Tue, 18 Jul 2017 19:27:32 +0000 (12:27 -0700)]
Functions to set common ciphers and sig algs for SSLContext.
Summary:
This diff contains some helper functions that set a `SSLContext` object with recommended
lists of ciphers and signature algorithms for given scenarios. In addition, DES and CHACHA are removed from the cipher list.
Reviewed By: yfeldblum
Differential Revision:
D5373599
fbshipit-source-id:
04de11fe90cac734caa12a80e56f70532803f94e
Christopher Dykes [Tue, 18 Jul 2017 17:01:30 +0000 (10:01 -0700)]
Ensure the allocator types in the string keyed tests have value_types matching the value type of the collection
Summary:
Because MSVC's standard library implementation is now checking that this is actually the case:
```
error C2338: set<T, Compare, Allocator> requires that Allocator's value_type match T (See N4659 26.2.1 [container.requirements.general]/16 allocator_type) Either fix the allocator value_type or define _ENFORCE_MATCHING_ALLOCATORS=0 to suppress this diagnostic.
```
I've gone with the "Fix the `value_type`" approach.
Reviewed By: yfeldblum
Differential Revision:
D5441017
fbshipit-source-id:
b30403d2e48f815177cac29c4e6eec4e79583660
Phil Willoughby [Tue, 18 Jul 2017 10:14:07 +0000 (03:14 -0700)]
Relax alignment restriction in CachelinePadded
Summary: 32-bit iOS environments were triggering the previous condition with LifoSem.
Reviewed By: yfeldblum
Differential Revision:
D5442057
fbshipit-source-id:
64ee32b4ad35150c7f295a2a30bbede8fa13e79e
Christopher Dykes [Tue, 18 Jul 2017 01:59:11 +0000 (18:59 -0700)]
Add support for tagging a test as BROKEN in the CMake build
Summary: Also use it to disable function_test and indexed_mem_pool_test for now while the source of their breakage is being investigated.
Reviewed By: yfeldblum
Differential Revision:
D5440415
fbshipit-source-id:
630c884ccd2db660bfc3e4529a2d35941d3bd0d3
Dan Melnic [Tue, 18 Jul 2017 01:50:41 +0000 (18:50 -0700)]
Lua exception handling test
Summary: Lua exception handling test - start with the failing test first - code from
D5431445
Reviewed By: yfeldblum
Differential Revision:
D5432254
fbshipit-source-id:
87f5934f28ac6ef7b55314acb3c150b9ccf6c799
Christopher Dykes [Mon, 17 Jul 2017 22:47:32 +0000 (15:47 -0700)]
Don't build the async signal handler test on Windows
Summary: `AsyncSignalHandler` is not currently supported on Windows, so we shouldn't be attempting to build it.
Reviewed By: yfeldblum
Differential Revision:
D5437276
fbshipit-source-id:
b3f281bfc501444bb22056860ee785a2beb9b671
Tommy Nguyen [Mon, 17 Jul 2017 20:03:48 +0000 (13:03 -0700)]
Use more libstdc++ specific macro
Summary:
- The __GNUC__ macro is used by other compilers like Clang and
ICC, but ext/stdio_filebuf.h is a libstdc++ only extension.
fixes #636
Closes https://github.com/facebook/folly/pull/637
Reviewed By: yfeldblum
Differential Revision:
D5434532
Pulled By: Orvid
fbshipit-source-id:
ce4f966a74aa9f82ae907c67807ac87ec1588173
Christopher Dykes [Mon, 17 Jul 2017 19:57:29 +0000 (12:57 -0700)]
Enable a couple of AsyncFileWriter tests on Windows
Summary:
There is no longer anything keeping them from working on Windows.
Except for that `signal(SIGPIPE, SIG_IGN)` call; that has to stay disabled.
Reviewed By: simpkins
Differential Revision:
D5308007
fbshipit-source-id:
74a392cf484404f41a6c51e50b5a9e6fbd05b4a9
Yedidya Feldblum [Mon, 17 Jul 2017 05:07:08 +0000 (22:07 -0700)]
Let exception_wrapper::handle, when empty, show the right error message
Summary:
[Folly] Let `exception_wrapper::handle`, when empty, show the right error message.
The error message currently says that `throw_exception` cannot be called on an empty `exception_wrapper`, but should say that `handle` cannot be called on an empty `exception_wrapper`.
Reviewed By: Orvid
Differential Revision:
D5432380
fbshipit-source-id:
ffa69c7675ee332e596e861e59ea273c39fc4717
Yedidya Feldblum [Mon, 17 Jul 2017 04:23:33 +0000 (21:23 -0700)]
CodeMod: Prefer ADD_FAILURE() over EXPECT_TRUE(false), et cetera
Summary:
CodeMod: Prefer `ADD_FAILURE()` over `EXPECT_TRUE(false)`, et cetera.
The tautologically-conditioned and tautologically-contradicted boolean expectations/assertions have better alternatives: unconditional passes and failures.
Reviewed By: Orvid
Differential Revision:
D5432398
Tags: codemod, codemod-opensource
fbshipit-source-id:
d16b447e8696a6feaa94b41199f5052226ef6914