Marko Novakovic [Fri, 25 Aug 2017 22:23:42 +0000 (15:23 -0700)]
Added a flag FOLLY_FORCE_EXCEPTION_COUNT_USE_STD
Summary:
The flag FOLLY_FORCE_EXCEPTION_COUNT_USE_STD forces
the usage of std:uncaught_exceptions() for folly's
implementation of uncaught_exceptions()
Reviewed By: yfeldblum
Differential Revision:
D5542302
fbshipit-source-id:
2c2f507ab9dde916a160a9c370a267cdcfd7203a
Stella Lau [Fri, 25 Aug 2017 16:23:46 +0000 (09:23 -0700)]
Enforce forward progress with StreamCodec
Summary:
- Throw exception if no forward progress was made with `StreamCodec.compress()` and `StreamCodec.uncompress()`
- Prevents infinite looping behavior when no forward progress was made
- Update tests
Reviewed By: terrelln
Differential Revision:
D5685690
fbshipit-source-id:
969393896b74f51250f0e0ce3af0cd4fedcab49a
Qinfan Wu [Fri, 25 Aug 2017 10:05:04 +0000 (03:05 -0700)]
Fix typo in Function.h
Summary: [Folly] Fix typo in `Function.h`.
Reviewed By: yfeldblum
Differential Revision:
D5703550
fbshipit-source-id:
9dc09697fd09db6c65b1a4f2d8bdf44451b4aab2
Greg Nisbet [Fri, 25 Aug 2017 00:53:08 +0000 (17:53 -0700)]
add public kSlotSize to IndexedMemPool
Summary:
add public kSlotSize to IndexedMemPool,
needed to support getting the approximate memory footprint of the pool
(since a Slot has two atomic uint32_t's more than a bare Elem)
Reviewed By: yfeldblum
Differential Revision:
D5690225
fbshipit-source-id:
667da6b67b339038b92b0e5acde17219fe1c85c5
Aaryaman Sagar [Thu, 24 Aug 2017 21:46:17 +0000 (14:46 -0700)]
Added rvalue and const rvalue overloads to Try
Summary:
Try was missing some important-ish overloads that help it behave well
in rvalue contexts
Reviewed By: yfeldblum
Differential Revision:
D5692021
fbshipit-source-id:
c34627b56eb52dceaeb1f00ae930ee3bc6e00306
Aaryaman Sagar [Thu, 24 Aug 2017 21:42:53 +0000 (14:42 -0700)]
unwrapTryTuple only accepted rvalue tuple types
Summary:
unwrapTryTuple only accepted rvalue tuple types, this diff fixes that
to work with forwarding reference tuple types.
Also reduces the number of template instantiations
Reviewed By: yfeldblum
Differential Revision:
D5682996
fbshipit-source-id:
ee6dd2c20d8dfca33e769a98a6ca56fa96c73b72
Andrii Kryzhyk [Thu, 24 Aug 2017 19:08:18 +0000 (12:08 -0700)]
Create generic method to extract mac address from EUI-64 constructed addresses
Summary: Link local is not the only type of address that is based on mac address, therefore create generic function to extract mac address from EUI-64 autoconfigured addresses using the same logic as for getMacAddressFromLinkLocal
Reviewed By: pallotron
Differential Revision:
D5697781
fbshipit-source-id:
4d69085a1d8f08e06496b8a9b638ac7ff31c6c3a
Peter DeLong [Thu, 24 Aug 2017 17:16:37 +0000 (10:16 -0700)]
Improve formatting of scripts and test files
Summary: Reformatted the scripts and test files to look better and also to avoid lint warnings in the future
Reviewed By: andriigrynenko
Differential Revision:
D5673856
fbshipit-source-id:
5818625ec14d18ef3b9b804df53949afefc3b98f
Stella Lau [Thu, 24 Aug 2017 16:26:59 +0000 (09:26 -0700)]
Add LZMA streaming interface
Summary:
- Replace LZMA2Codec with LZMA2StreamCodec
- Update tests to reflect LZMA2_VARINT_SIZE requiring data length
Reviewed By: terrelln
Differential Revision:
D5625388
fbshipit-source-id:
3303c6dda5d41f40615c87504a46923815b0b716
Yedidya Feldblum [Thu, 24 Aug 2017 07:42:16 +0000 (00:42 -0700)]
Try::exception overload for Try&&
Summary:
[Folly] `Try::exception` overload for `Try&&`.
For consistency with `Try::value`.
Reviewed By: WillerZ
Differential Revision:
D5691758
fbshipit-source-id:
9904b2a5c90f4575a3c09dc012658d359d11fdd9
Christopher Dykes [Thu, 24 Aug 2017 05:51:43 +0000 (22:51 -0700)]
Rename FOLLY_A64 to FOLLY_AARCH64
Summary:
`FOLLY_AARCH64` is more descriptive.
(searching for A64 tells you nothing, searching for aarch64 tells you a lot)
Reviewed By: yfeldblum, andrewjcg
Differential Revision:
D5663075
fbshipit-source-id:
8f31fde4aa394f5452305929541af6d38e4d8a37
shane [Thu, 24 Aug 2017 00:40:02 +0000 (17:40 -0700)]
update README for ubuntu 16.04 LTS + custom boost installation details
Summary:
the README didn't have explicit instructions for ubuntu 16.04 LTS... now it does.
i also added a section for how to handle building folly w/a custom boost installation.
Closes https://github.com/facebook/folly/pull/664
Reviewed By: eduardo-elizondo
Differential Revision:
D5694143
Pulled By: yfeldblum
fbshipit-source-id:
e2786d045c3459cac49c8b052d90ca24d10f7922
Alison Tsai [Wed, 23 Aug 2017 23:50:28 +0000 (16:50 -0700)]
macro to enable scoped trace section functionality
Summary: Add a macro to enable optional scoped trace section functionality (user-defined). This macro will have no effect unless configured to do so. This change means that if proxygen is being upgraded, folly must also be updated.
Reviewed By: mzlee
Differential Revision:
D5635123
fbshipit-source-id:
7db17f6ae8c0d1484cf9fad043eb42717279bd0a
Yedidya Feldblum [Tue, 22 Aug 2017 22:51:49 +0000 (15:51 -0700)]
Use simple exception_wrapper ctor in the Promise::setException test
Summary:
[Folly] Use simple `exception_wrapper` ctor in the `Promise::setException` test.
And add a new case testing with `exception_ptr`.
Reviewed By: andrewjcg
Differential Revision:
D5683035
fbshipit-source-id:
e8276166dacbe09a9a745271d636db44c593058c
Aaryaman Sagar [Tue, 22 Aug 2017 17:54:11 +0000 (10:54 -0700)]
Added a for_each function to iterate through ranges
Summary:
Adding a for_each function that allows generalized indexed and breakable iteration through ranges, these can either be runtime ranges (i.e. entities for which std::begin and std::end work) or compile time ranges (as deemed by the presence of a std::tuple_length<>, get<> (ADL resolved) functions)
The function is made to provide a convenient library based solution to the proposal p0589r0, which aims to generalize the range based for loop even further to work with compile time ranges
A drawback of using range based for loops is that sometimes you do not have access to the index within the range. This provides easy access to that, even with compile time ranges.
Further this also provides a good way to break out of a loop without any overhead when that is not used.
A simple use case would be when using futures, if the user was doing calls to n servers then they would accept the callback with the futures like this
auto vec = std::vector<std::future<int>>{request_one(), ...};
when_all(vec.begin(), vec.end()).then([](auto futures) {
folly::for_each(futures, [](auto& fut) { ... });
});
Now when this code switches to use tuples instead of the runtime std::vector, then the loop does not need to change, the code will still work just fine
when_all(future_one, future_two, future_three).then([](auto futures) {
folly::for_each(futures, [](auto& fut) { ... });
});
Reviewed By: yfeldblum
Differential Revision:
D5557336
fbshipit-source-id:
79fcbafa7e1671f8856f0dcb7bf7996435dadeaa
Mingtao Yang [Tue, 22 Aug 2017 17:36:32 +0000 (10:36 -0700)]
Explicitly initialize AsyncSocket in MockAsyncSSLSocket
Summary:
Even though MockAsyncSSLSocket's initializes AsyncSSLSocket, which should
initialize AsyncSocket, this does not actually happen because AsyncSSLSocket
virtually inherits from AsyncSocket.
Because of this, prior to this diff, the MockAsyncSSLSocket was not properly
setting its EventBase.
Reviewed By: knekritz
Differential Revision:
D5676596
fbshipit-source-id:
5f3c0e848179cb5eb4d2dc4921a11e7c04d7c0e0
Yedidya Feldblum [Tue, 22 Aug 2017 04:10:34 +0000 (21:10 -0700)]
Use exception_wrapper::from_exception_ptr in Try and Promise
Summary:
[Folly] Use `exception_wrapper::from_exception_ptr` in `Try` and `Promise`.
It does just what we need; DRY.
Reviewed By: andrewjcg
Differential Revision:
D5674663
fbshipit-source-id:
73e46df62c06736c4eaf013d05dfea819cbec515
Stella Lau [Tue, 22 Aug 2017 01:15:27 +0000 (18:15 -0700)]
Add zlib-specific codec initialization
Summary:
- Create interface to initialize zlib codec using specific parameters
- This enables the raw inflate/deflate and auto inflate options
- Add tests for option initialization
Reviewed By: terrelln, yfeldblum
Differential Revision:
D5649980
fbshipit-source-id:
fd36e8edc0e8c528cd6c9d8f39e8ef839b6acfef
Yedidya Feldblum [Mon, 21 Aug 2017 18:38:39 +0000 (11:38 -0700)]
exception_wrapper::from_exception_ptr
Summary:
[Folly] `exception_wrapper::from_exception_ptr`.
A handry helper for converting from `std::exception_ptr` to `folly::exception_wrapper`.
Reviewed By: ericniebler
Differential Revision:
D5668179
fbshipit-source-id:
a81a60cb22a2a697714268e027af62dd8825d2c3
Phil Willoughby [Mon, 21 Aug 2017 12:07:57 +0000 (05:07 -0700)]
SynchronizedPtr
Summary: Fairly minimal API to start with. Refer to the comments for the rationale/usage.
Reviewed By: yfeldblum
Differential Revision:
D5554854
fbshipit-source-id:
173bf7c40e70b55bf6afb8c4bc9e83d48f90b6ee
Xiangyu Bu [Fri, 18 Aug 2017 23:59:18 +0000 (16:59 -0700)]
Recommended cipher list for server side.
Summary: A SSLOptions recommended for cipher use.
Reviewed By: yfeldblum
Differential Revision:
D5614280
fbshipit-source-id:
a6b1adfa8d168f35c7bc7d4088c4073c3f4084a5
Xiangyu Bu [Fri, 18 Aug 2017 23:35:27 +0000 (16:35 -0700)]
Let SSLContext::setCipherList accept generic container type.
Summary:
Make SSLContext::setCipherList() and SSLContext::setSignatureAlgorithms()
accept std::array besides std::vector so that cipher lists in SSLOptions
can be initialized POD.
Reviewed By: yfeldblum
Differential Revision:
D5578758
fbshipit-source-id:
7e5c2e9a75600e93c89e7b13a9042434a4189384
Dave Watson [Fri, 18 Aug 2017 15:45:44 +0000 (08:45 -0700)]
Drop jemalloc specific smartRealloc integration
Summary:
This was added several jemalloc versions ago, and is no longer a win.
From microbenches in folly/test, this codepath is successful less than .5% of the time.
There are a handful of other places directly using this (fbvector, IOBuf, ThreadLocal),
but should probably change them individually.
Reviewed By: interwq
Differential Revision:
D5596678
fbshipit-source-id:
354d7204f61df0eace4d98d930d0f6e06a90ffde
David Lam [Fri, 18 Aug 2017 05:59:58 +0000 (22:59 -0700)]
Remove outdated comments referencing removed TAsyncSSLServerSocket
Summary:
TAsyncSSLServerSocket was deleted in
D1806807, so we should remove
these comments.
Reviewed By: yfeldblum
Differential Revision:
D5657431
fbshipit-source-id:
ca875293737ad8ba0a8c028c9bfa5651f4a6065f
darrenl [Fri, 18 Aug 2017 05:41:29 +0000 (22:41 -0700)]
Fix incorrect format in Overview markdown
Summary:
The format is incorrect in [Overview.md](https://github.com/facebook/folly/blob/master/folly/docs/Overview.md)
Closes https://github.com/facebook/folly/pull/661
Reviewed By: eduardo-elizondo
Differential Revision:
D5657083
Pulled By: yfeldblum
fbshipit-source-id:
a9cedb413cbb3d455f4c1e5f785d05a33f8182c8
Stella Lau [Thu, 17 Aug 2017 23:34:56 +0000 (16:34 -0700)]
Fix undefined behavior when decoding varint
Summary: Left shifting `0x7f` by `63` is undefined behavior (i.e. when decoding `0xFFFF...`)
Reviewed By: yfeldblum, terrelln
Differential Revision:
D5653353
fbshipit-source-id:
c74c9f43a9bc82d15a2223df853dc533cea1478b
Mingtao Yang [Thu, 17 Aug 2017 20:54:11 +0000 (13:54 -0700)]
Add getSSLContext() to AsyncSSLSocket
Reviewed By: knekritz
Differential Revision:
D5632201
fbshipit-source-id:
5db380379ab6cb608922c77dd716bfc4410b2cd8
Neel Goyal [Thu, 17 Aug 2017 17:59:06 +0000 (10:59 -0700)]
Change AsyncSSLSocket getSecurityProtocol to handle unencrypted mode
Summary: Return empty string for `getSecurityProtocol` if the socket is good and the handshake failed, otherwise "TLS"
Reviewed By: knekritz
Differential Revision:
D5647637
fbshipit-source-id:
b95cbf39e4bb7f89b1ebcbc0238c2becba7ad42a
Phil Willoughby [Thu, 17 Aug 2017 08:27:07 +0000 (01:27 -0700)]
Remove a use of SFINAE in the Range constructor.
Summary:
Specifically, the constructor `implicit Range(Iter)` is now declared and defined for all `Range` specializations. It is an error to use it, and we `static_assert`, unless `Iter` is `char const *` or `char *`.
Performance effect
---
Measuring compilation-time on a file that just make ~40k StringPieces, compiled with -O3. All compilers produced identical code before/after this change.
* clang-trunk: 4% improvement
* gcc-5: no change
* gcc-4.9: 11% improvement
* gcc-7.1: 5% improvement
Could this possibly break any existing code?
---
Yes. If you have a function that's overloaded for both `Range<char const*>` and `Range<X>` and your input object is not `char const*` and is implicitly convertible to both `char const*` and `X`: that is now ambiguous whereas before it would unambiguously pick the `Range<char const*>` overload. I don't consider this scenario likely.
Why should this work?
---
Using SFINAE is more expensive at compile time (with some compilation environments) than not using it. It's necessary to use SFINAE when there is an alternative function which will be used in preference when the substitution fails, but when that is not the case it is on average cheaper to make the function always exist and use static_assert to disallow the bad uses of it. A bonus is that the caller gets a more comprehensible error message.
Reviewed By: nbronson
Differential Revision:
D5639502
fbshipit-source-id:
13469f2995a487398734f86108087fdc8e32ad71
Philip Jameson [Thu, 17 Aug 2017 00:46:52 +0000 (17:46 -0700)]
Optionally run autoconf
Summary:
This makes it so that the //folly:config rule can run autoconf to create folly-config
- Uses cxx_genrule get compiler settings and paths to dependent libraries
- Goes around a couple of oddities in the way that buck exports some of its macros
- While it uses buck_cxx_library, that's okay to use outside of facebook's internal repos.
Reviewed By: meyering
Differential Revision:
D5620729
fbshipit-source-id:
0d2d8e3bda92182dcdcd3e80cb12a3756b3816ac
Rushy Panchal [Thu, 17 Aug 2017 00:19:03 +0000 (17:19 -0700)]
Add prepareSkipTo() method to EliasFanoReader
Summary:
`prepareSkipTo(x`) allows the client of EliasFanoReader to "hint" that
`skipTo(x)` will be called in the near future. The primary benefit of doing so
is that memory which is needed for `skipTo(x)` can be prefetched to minimize
cache misses incurred when calling `skipTo(x)`.
Reviewed By: ot, philippv
Differential Revision:
D5508995
fbshipit-source-id:
4876b566256849f76193db3dc0404768aeeeb30d
Shu Zhang [Wed, 16 Aug 2017 20:17:13 +0000 (13:17 -0700)]
Add ConcurrentHashMap installable
Summary:
ConcurrentHashMap is a newly added feature and we wanted to test it in our enviornment, making it installable.
Built & Installed on ubuntu 14 env.
Closes https://github.com/facebook/folly/pull/659
Reviewed By: djwatson
Differential Revision:
D5629159
Pulled By: yfeldblum
fbshipit-source-id:
8a40e768f3db7918a3b284059f2efa0b7ecb9aca
Mirek Klimos [Wed, 16 Aug 2017 04:04:27 +0000 (21:04 -0700)]
folly::ElfFile - add support to iterate over program headers
Summary: Adding iterateProgramHeaders, similar to iterateSections, just iterates over program headers instead of section headers. I want this to get the size of the first PT_LOAD header.
Differential Revision:
D5602575
fbshipit-source-id:
f73989cade20214f884571c1099761ecaa4841f7
Maged Michael [Wed, 16 Aug 2017 01:01:19 +0000 (18:01 -0700)]
Fix destruction order
Summary:
- Added `hazptr.cpp` and `memory_resource.cpp`. Moved singleton code to source.
- Changed the singleton for the default `hazptr_domain` to a global.
- Changed hazptr_stats singleton to a global.
- Moved the thread caching calls from the hazptr_domain functions to the constructor/destructor of hazptr_holder.
- Changed the TLS singletons to TLS globals.
- Changed some inlining directives.
- Leak the hazptr_rec-s in the default domain
Reviewed By: davidtgoldblatt, djwatson
Differential Revision:
D5553753
fbshipit-source-id:
da69eecec55c0f78fb8ef5591f9aeffee99ff3fa
Alexey Spiridonov [Tue, 15 Aug 2017 17:52:45 +0000 (10:52 -0700)]
try to fix folly, wangle, etc open-source build
Summary: add missing source files to Makefile
Reviewed By: andriigrynenko
Differential Revision:
D5630758
fbshipit-source-id:
0f04c11b65fd3a6f4f33e34ae57c0fcba8671e97
Peter DeLong [Mon, 14 Aug 2017 23:40:47 +0000 (16:40 -0700)]
Add hooks to track which threads belong to which thread pools
Summary:
Keep track of which threads belong to which thread pools for use when debugging.
This will be paired with a gdb script that associates threads with their thread pools
Reviewed By: andriigrynenko
Differential Revision:
D5514729
fbshipit-source-id:
57ada4dd1aaaec5d7026e4eee05b0ec4e7434c77
Nick Wolchko [Mon, 14 Aug 2017 19:49:06 +0000 (12:49 -0700)]
allow comparing Optional<T> with none
Summary:
`std::optional` supports comparing with `std::nullopt`, so
`folly::Optional` should do the same with `folly::none`.
This also involves marking hasValue() noexcept to be the same as `std::optional`.
Reviewed By: yfeldblum, WillerZ
Differential Revision:
D5617825
fbshipit-source-id:
a4b863dd61c3a86223fb21a5b7759e7c295fd272
Xiangyu Bu [Mon, 14 Aug 2017 17:13:58 +0000 (10:13 -0700)]
AsyncSSLSocket::get/setClientCertValidationResult API.
Summary:
The added API will be used for storing and retrieving validation result of client cert.
At some point we may change "client" to "peer" to make it generic.
Reviewed By: anirudhvr
Differential Revision:
D5610404
fbshipit-source-id:
2feb03abc0594af4c68db33d8885ea214867148a
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