folly.git
6 years agoSort #include lines
Yedidya Feldblum [Thu, 13 Jul 2017 02:53:53 +0000 (19:53 -0700)]
Sort #include lines

Summary: [Folly] Sort `#include` lines, as required by `clang-format`.

Reviewed By: igorsugak, Orvid

Differential Revision: D5405153

fbshipit-source-id: 3bb1c2b84271bcf7a195e07680777dbfdd499823

6 years agoRevert D5408572: replace getnameinfo with inet_ntop in v6 string formatting
Eli Lindsey [Thu, 13 Jul 2017 00:47:29 +0000 (17:47 -0700)]
Revert D5408572: replace getnameinfo with inet_ntop in v6 string formatting

Summary: This reverts commit 69b0171a9a54738045f9041381aea5512b17eb13

Differential Revision: D5408572

fbshipit-source-id: 3ec8ce96575b632fb134be99cc0d2538a01a7d85

6 years agoreplace getnameinfo with inet_ntop in v6 string formatting
Eli Lindsey [Wed, 12 Jul 2017 23:36:57 +0000 (16:36 -0700)]
replace getnameinfo with inet_ntop in v6 string formatting

Summary: Some implementations of getnameinfo are triggering reverse DNS lookups despite us specifying NI_NUMERICHOST. Avoid all that by instead producing our string representations of v6 addresses manually via inet_ntop and if_indextoname.

Differential Revision: D5408572

fbshipit-source-id: 69b0171a9a54738045f9041381aea5512b17eb13

6 years agoFix documentation for folly's to<double>() method's handling of 'NaN' and unparseable...
Mickey Phoenix [Wed, 12 Jul 2017 20:49:10 +0000 (13:49 -0700)]
Fix documentation for folly's to<double>() method's handling of 'NaN' and unparseable inputs

Summary:
The documentation for folly::to<double>()'s handling of unparseable inputs (including "") is incorrect.  Additionally, the documentation does not document to<double>()'s handling of the inputs "NaN", "-NaN", "inf", "infinity", "-inf", and "-infinity".

This corrects the documentation.

See https://github.com/facebook/folly/blob/3272dfdbe243e0ac02acca1dd82bc391d1da079a/folly/docs/Conv.md under the heading "Parsing floating-point types" for the incorrect documentation as rendered.

Reviewed By: yfeldblum

Differential Revision: D5367656

fbshipit-source-id: 22b38e2bb85d2e647975798360ead39eed6caae8

6 years agoDon't use range construction for associative containers in convertTo()
Tom Jackson [Wed, 12 Jul 2017 18:32:18 +0000 (11:32 -0700)]
Don't use range construction for associative containers in convertTo()

Summary: This avoids having exceptions occur while constructing hashtables.

Reviewed By: ot, yfeldblum

Differential Revision: D5384419

fbshipit-source-id: ba2de8cffa46df550bdc62abbe529801249e45cd

6 years agoImprove launder
Phil Willoughby [Wed, 12 Jul 2017 07:36:17 +0000 (00:36 -0700)]
Improve launder

Summary:
Should now work on GCC-compatible compilers, and all other compilers which don't attempt any inter-TU optimizations.

Moved out of Utility.h because it now requires a supporting .cpp file and some clients presume that Utility.h can be used header-only.

Reviewed By: ot

Differential Revision: D5381042

fbshipit-source-id: 7e954fed47de4386c85d46a61d56a8fe7fc516f4

6 years agoRevert D5393697: [Folly] Add an sfmt19937 benchmark
Christopher Dykes [Tue, 11 Jul 2017 23:46:22 +0000 (16:46 -0700)]
Revert D5393697: [Folly] Add an sfmt19937 benchmark

Summary: This reverts commit bc725838dc7f62d030c7e68bc6d229042df2b46c

Differential Revision: D5393697

fbshipit-source-id: 4b9ef1e733b0ad73e6deea7ac8a52dfe785b4f2b

6 years agoadd helper method to generate same crc32 results as php and boost::crc_32_type
Benjamin Renard [Tue, 11 Jul 2017 22:54:24 +0000 (15:54 -0700)]
add helper method to generate same crc32 results as php and boost::crc_32_type

Summary:
This revision adds a helper method in folly/Checksum.h, that returns the same crc32 value as php's built-in implementationa and boost::crc_32_type.

folly's default implementation only differs from the final xor (with 0xFFFFFFFF for boost and php, 0 for folly), which is added here.

Reviewed By: djwatson

Differential Revision: D5396671

fbshipit-source-id: 14874af2d5a80408c772875142de6e340ce01038

6 years agoAdd an sfmt19937 benchmark
Christopher Dykes [Tue, 11 Jul 2017 20:45:18 +0000 (13:45 -0700)]
Add an sfmt19937 benchmark

Summary: `__gnu_cxx::sfmt19937` is 3.5x faster than `std::mt19937` according to the benchmark.

Reviewed By: yfeldblum

Differential Revision: D5393697

fbshipit-source-id: bc725838dc7f62d030c7e68bc6d229042df2b46c

6 years agoAllow fiber to be called on both type Fiber and Fiber*
Peter DeLong [Tue, 11 Jul 2017 20:42:46 +0000 (13:42 -0700)]
Allow fiber to be called on both type Fiber and Fiber*

Summary: The fiber command can now be run on a value of type folly::fibers::Fiber or a value of type folly::fibers::Fiber*

Reviewed By: andriigrynenko

Differential Revision: D5393491

fbshipit-source-id: 1f48e08288f75c59852c939062db616eb06cea73

6 years agoUse Baton (again) in EventBase::runInEventBaseThreadAndWait
Giuseppe Ottaviano [Tue, 11 Jul 2017 17:21:38 +0000 (10:21 -0700)]
Use Baton (again) in EventBase::runInEventBaseThreadAndWait

Summary:
`Baton` is more lightweight than a mutex+condition variable, and the code is much simpler. This was actually the original implementation, but the dependency had to be dropped because `Baton` was unsupported on some architectures. That is not a problem anymore.

Also reorganize the includes to follow the conventions.

Reviewed By: andriigrynenko, yfeldblum

Differential Revision: D5396631

fbshipit-source-id: d782cf271eb35723aaeb3c372e1c1dafeaaf0f0a

6 years agoUpdate providedCiphersStr_ in one place.
Xiangyu Bu [Tue, 11 Jul 2017 17:00:51 +0000 (10:00 -0700)]
Update providedCiphersStr_ in one place.

Summary:
The function `setCipherList` seems to forget to update the data member
`providedCipherString_`. This diff updates `providedCiphersString_` at
a single place `setCiphersOrThrow()`, and adds two test cases to make
sure the derived `SSL*` uses the desired set of ciphers.

Reviewed By: yfeldblum

Differential Revision: D5372758

fbshipit-source-id: 8144ab3bc518b2b9fa8090af62f3bd6475bbbece

6 years agoCompute masks in IPAddressV6
Yedidya Feldblum [Tue, 11 Jul 2017 08:20:38 +0000 (01:20 -0700)]
Compute masks in IPAddressV6

Summary:
[Folly] Compute masks in `IPAddressV6`.

At runtime, instead of storing a 2Kb masks array in the binary.

Reviewed By: WillerZ, ot

Differential Revision: D5369901

fbshipit-source-id: 031a4eeda1670021236d8ab97f6e85e753675ae5

6 years agoAdd function to folly_fibers.py to get the address of a specific fiber from a fiberMa...
Peter DeLong [Tue, 11 Jul 2017 01:22:14 +0000 (18:22 -0700)]
Add function to folly_fibers.py to get the address of a specific fiber from a fiberManager

Summary: Add a fiber_address(fiberManager, index) function so that you can programatically get the address of a given fiber in a fiberManager

Reviewed By: andriigrynenko

Differential Revision: D5377605

fbshipit-source-id: b9504f7d253e8f702e9329c6f08ff406d4296a6e

6 years agoAdd some more OpenSSL 1.1 APIs for folly/portability/
Fred Emmott [Mon, 10 Jul 2017 20:43:13 +0000 (13:43 -0700)]
Add some more OpenSSL 1.1 APIs for folly/portability/

Summary: refs hhvm/packaging#128

Reviewed By: anirudhvr

Differential Revision: D5380271

fbshipit-source-id: 1cc206d9970b843c3582556096f3ceabeb8d01f6

6 years agoadd the getnameinfo error code and v6 scope id to exception text
Eli Lindsey [Mon, 10 Jul 2017 15:54:21 +0000 (08:54 -0700)]
add the getnameinfo error code and v6 scope id to exception text

Summary: Making the exception text more useful by adding getnameinfo's error code and the v6 scope id

Reviewed By: yangchi

Differential Revision: D5389137

fbshipit-source-id: e6b9b4edd7dd1859e0ed4d784b2f89a60a701955

6 years agoIn-place construction for Future v2017.07.10.00
Yedidya Feldblum [Sun, 9 Jul 2017 03:59:42 +0000 (20:59 -0700)]
In-place construction for Future

Summary:
[Folly] In-place construction for `Future`.

Using `in_place` as the first argument. Avoid constructing a contained object and then moving it into the `Future`, which may be more expensive, by providing an unambiguous way to specify perfect forwarding.

And a matching overload of `makeFuture` for no particularly good reason.

Differential Revision: D5362324

fbshipit-source-id: e612965f34ed0fae5fac17db631f7eab9984c696

6 years agoOption to set thread name for EventBaseThread
Alan Frindell [Sat, 8 Jul 2017 04:06:02 +0000 (21:06 -0700)]
Option to set thread name for EventBaseThread

Summary: as in title

Reviewed By: yfeldblum

Differential Revision: D5382995

fbshipit-source-id: 87534e6092f167399943287182ec61ae21e608c6

6 years agomake FunctionRef constexpr on compilers that support it
Eric Niebler [Fri, 7 Jul 2017 23:31:31 +0000 (16:31 -0700)]
make FunctionRef constexpr on compilers that support it

Summary:
`constexpr` All The Things! Although only very recent versions of modern compilers support this, FunctionRef can and should be `constexpr` (demonstration here: https://godbolt.org/g/NJ72RG).

This change also changes the `FunctionRef` constructor such that it no longer participates in overload resolution if the argument is not callable with the specified arguments. In addition, it perfectly forwards the callable object such that if it was an rvalue when it was passed to the constructor, it will be invoked as an rvalue in `operator()`.

Reviewed By: yfeldblum

Differential Revision: D5366720

fbshipit-source-id: bc64053213478aab5a5bd5950c7b2d6f364d86bd

6 years agoAdds `make_mock` to `folly::LeakySingleton`.
Jiahao Li [Fri, 7 Jul 2017 19:22:51 +0000 (12:22 -0700)]
Adds `make_mock` to `folly::LeakySingleton`.

Summary:
Provides a `make_mock` interface to `folly::LeakySingleton` for unit test
mocking.

Reviewed By: andriigrynenko

Differential Revision: D5382003

fbshipit-source-id: 9ab81dd64703f4f02772bfb8c85e020680abcc85

6 years agoDetermine noexcept'ness of folly::Optional with std::is_nothrow_constructible
Christopher Dykes [Fri, 7 Jul 2017 09:59:14 +0000 (02:59 -0700)]
Determine noexcept'ness of folly::Optional with std::is_nothrow_constructible

Summary: Because MSVC is not happy about how it's written now.

Reviewed By: yfeldblum

Differential Revision: D5378740

fbshipit-source-id: 8b77d1a05da75b331e0cb72bd0ad859b89e54b36

6 years agoDefine OPENSSL_NO_SSL2 under OpenSSL 1.1.0
Christopher Dykes [Thu, 6 Jul 2017 19:33:46 +0000 (12:33 -0700)]
Define OPENSSL_NO_SSL2 under OpenSSL 1.1.0

Summary: OpenSSL 1.1.0 drops support for SSLv2, and in doing so also removes the define that user-code used to guard on whether SSLv2 was supported. This adds the define to the portability header to indicate SSLv2 is not supported.

Reviewed By: anirudhvr

Differential Revision: D5376869

fbshipit-source-id: 04708db138dc13e7747cfff582f4cfed291648b3

6 years agolaunder
Phil Willoughby [Thu, 6 Jul 2017 07:09:18 +0000 (00:09 -0700)]
launder

Summary: Backport C++17's `std::launder`.

Reviewed By: yfeldblum, ot

Differential Revision: D5370531

fbshipit-source-id: b7cc6701d082b6c4855fa77bb644e151ce882deb

6 years agofix double comparison in histogram test
Adam Simpkins [Wed, 5 Jul 2017 19:56:00 +0000 (12:56 -0700)]
fix double comparison in histogram test

Summary:
The TestDoubleWidthTooBig test was performing an exact equality check on
two double values. This equality check fails when run on 32-bit
platforms.

Replace the EXPECT_EQ() check with EXPECT_NEAR(), and simply check that
the two values do not differ by more than 1e-14.

Reviewed By: Orvid

Differential Revision: D652767

fbshipit-source-id: 7bf7ed560a4180a2e2d07a6050d1df18e18d1eea

6 years agologging: fix compiler compatibility for one more constexpr function
Adam Simpkins [Wed, 5 Jul 2017 17:48:49 +0000 (10:48 -0700)]
logging: fix compiler compatibility for one more constexpr function

Summary:
Update LogLevel's operator+() to consist only of a single return statement.
This is required for pre-C++14 compiler support.

Reviewed By: yfeldblum

Differential Revision: D5368256

fbshipit-source-id: 9ecbcde5edd1d0b3e7580d6263ad926e44908219

6 years agoPromise<T>::makeEmpty() and Future<T>::makeEmpty()
Yedidya Feldblum [Wed, 5 Jul 2017 16:38:08 +0000 (09:38 -0700)]
Promise<T>::makeEmpty() and Future<T>::makeEmpty()

Summary:
[Folly] `Promise<T>::makeEmpty()` and `Future<T>::makeEmpty()`.

These can currently be done by creating, and then moving away from, regular promises and futures. But that allocates; this is semantically equivalent but more efficient.

Differential Revision: D5368339

fbshipit-source-id: de054cfc75c701c5d39aac64d9a2949cd34b1896

6 years agofolly/futures/detail/Core.h: avoid FP from clang's -Wconditional-uninitialized
Jim Meyering [Wed, 5 Jul 2017 06:56:54 +0000 (23:56 -0700)]
folly/futures/detail/Core.h: avoid FP from clang's -Wconditional-uninitialized

Summary:
Avoid this false positive from clang:

  folly/futures/detail/Core.h:369:15: error: variable 'priority' may be uninitialized when used here [-Werror,-Wconditional-uninitialized]

Reviewed By: yfeldblum

Differential Revision: D5369916

fbshipit-source-id: 49649417d1b799cc3945cba456b42ab438ad2ddc

6 years agoApply clang-format to folly/stats/
Yedidya Feldblum [Tue, 4 Jul 2017 05:28:37 +0000 (22:28 -0700)]
Apply clang-format to folly/stats/

Summary: [Folly] Apply clang-format to `folly/stats/`.

Reviewed By: Orvid

Differential Revision: D5366745

fbshipit-source-id: 3b7419d4ab4c6203693603722cd8e707741d3953

6 years agoApply clang-format to folly/ssl/
Yedidya Feldblum [Tue, 4 Jul 2017 03:01:32 +0000 (20:01 -0700)]
Apply clang-format to folly/ssl/

Summary: [Folly] Apply `clang-format` to `folly/ssl/`.

Reviewed By: Orvid

Differential Revision: D5366760

fbshipit-source-id: ad4ec0570050f80d69c78626906e18b5892a999f

6 years agoApply clang-format to folly/concurrency/
Yedidya Feldblum [Tue, 4 Jul 2017 02:41:36 +0000 (19:41 -0700)]
Apply clang-format to folly/concurrency/

Summary: [Folly] Apply `clang-format` to `folly/concurrency/`.

Reviewed By: Orvid

Differential Revision: D5366946

fbshipit-source-id: 2c9de7c4d8534e02c367fd235fb1ea943ba0539e

6 years agoExtract the namespace choice in FBString.h
Yedidya Feldblum [Tue, 4 Jul 2017 01:57:07 +0000 (18:57 -0700)]
Extract the namespace choice in FBString.h

Summary:
[Folly] Extract the namespace choice in `FBString.h`.

The funny `namespace` bits confuse `clang-format`, so let us remove the confusion.

Reviewed By: ot, Orvid

Differential Revision: D5367299

fbshipit-source-id: efca65fecc70076829c14e31a835bc91f3efb4a4

6 years agoApply clang-format to folly/io/ (namespace)
Yedidya Feldblum [Tue, 4 Jul 2017 00:52:24 +0000 (17:52 -0700)]
Apply clang-format to folly/io/ (namespace)

Summary: [Folly] Apply `clang-format` to `folly/io/` (namespace).

Reviewed By: Orvid, terrelln

Differential Revision: D5366477

fbshipit-source-id: b4efcdc66c62885f5574b2940e5138590710deae

6 years agoFix tests in CMake build
Christopher Dykes [Tue, 4 Jul 2017 00:32:55 +0000 (17:32 -0700)]
Fix tests in CMake build

Summary: The fix for this didn't get made before the commit landed.

Reviewed By: yfeldblum

Differential Revision: D5367593

fbshipit-source-id: 4ed9c781121d1b23db11d75d0f8d017d1d8663d9

6 years agoFix build of SysUio portability header
Christopher Dykes [Mon, 3 Jul 2017 22:15:31 +0000 (15:15 -0700)]
Fix build of SysUio portability header

Summary: When I moved the change internally, I failed to add the `#include` that was required :(

Reviewed By: yfeldblum

Differential Revision: D5366037

fbshipit-source-id: 7ddf8fc0b7a0468d0831e886d8025c1893f7f8ae

6 years agoconstexpr the Unit comparison ops
Eric Niebler [Mon, 3 Jul 2017 21:13:27 +0000 (14:13 -0700)]
constexpr the Unit comparison ops

Summary: `constexpr` All The Things!

Reviewed By: Orvid

Differential Revision: D5364910

fbshipit-source-id: 11abeb8adc38aef3ac4f2596ecf0f533b9e74203

6 years agoFor futures::retrying, detect policy type using std::result_of
Yedidya Feldblum [Mon, 3 Jul 2017 20:20:29 +0000 (13:20 -0700)]
For futures::retrying, detect policy type using std::result_of

Summary:
[Folly] For `futures::retrying`, detect policy type using `std::result_of`.

`FOLLY_CREATE_HAS_MEMBER_FN_TRAITS` does not work in all cases. For example, it does not work with inherited members.

And it is not really what we want, anyway, which is to dispatch based on the result type of invoking the policy with a particular set of arguments. We can do that more directly using `std::result_of`. And if we did not have `std::result_of`, then we could do that with SFINAE directly.

Reviewed By: WillerZ

Differential Revision: D5361808

fbshipit-source-id: 23f969dfd6dbaaa944dc2288e70c3ea11d3398f0

6 years agoContent-conversion constructors for Future
Phil Willoughby [Mon, 3 Jul 2017 12:55:21 +0000 (05:55 -0700)]
Content-conversion constructors for Future

Summary:
Allows you to construct a `Future<A>` from a `Future<B>` if A can be constructed from `B&&`.

The constructor is `implicit` if and only if `B&&` is convertible to `A`.

This is the same philosophy as Optional, and has the same use-cases.

Reviewed By: yfeldblum

Differential Revision: D5264185

fbshipit-source-id: e2fae373ab549c186a69dc5f4e32481ef7b11bba

6 years agoReplace folly::asm_pause with folly::asm_volatile_pause v2017.07.03.00
Christopher Dykes [Mon, 3 Jul 2017 04:20:10 +0000 (21:20 -0700)]
Replace folly::asm_pause with folly::asm_volatile_pause

Summary: There is no difference, as the statements are already implicitly volatile.

Reviewed By: yfeldblum

Differential Revision: D5363491

fbshipit-source-id: ab5bb878f5ca72aa0de96f82e345213729c071e2

6 years agoIn-place construction for Try
Yedidya Feldblum [Sun, 2 Jul 2017 17:22:35 +0000 (10:22 -0700)]
In-place construction for Try

Summary:
[Folly] In-place construction for `Try`.

Using `in_place` as the first argumenbt. Avoid move operations.

Reviewed By: Orvid

Differential Revision: D5362568

fbshipit-source-id: 5c2aaf5dba1253c59e384940add411f0f2b570b2

6 years agoIn-place construction for Optional
Yedidya Feldblum [Sun, 2 Jul 2017 17:22:33 +0000 (10:22 -0700)]
In-place construction for Optional

Summary:
[Folly] In-place construction for `Optional`.

Using `in_place` as the first argument. Avoid move operations.

Reviewed By: Orvid, ot

Differential Revision: D5362563

fbshipit-source-id: 771db2556842d5dec35d1bf2ad6c23358a417d54

6 years agoMove in_place and friends to Utility.h
Yedidya Feldblum [Sun, 2 Jul 2017 17:22:31 +0000 (10:22 -0700)]
Move in_place and friends to Utility.h

Summary:
[Folly] Move `in_place` and friends to `Utility.h`.

Document that they are backports from C++17.

Reviewed By: Orvid

Differential Revision: D5362364

fbshipit-source-id: 495cb7f339fc558f20d89100c141fc7a243239d5

6 years agoRemove construct_in_place
Yedidya Feldblum [Sun, 2 Jul 2017 17:22:29 +0000 (10:22 -0700)]
Remove construct_in_place

Summary:
[Folly] Remove `construct_in_place`.

It is an alias for `in_place`, and unnecessary.

Reviewed By: Orvid

Differential Revision: D5362354

fbshipit-source-id: 39ce07bad87185e506fe7d780789b78060008182

6 years agoDisambiguate the various in_place overloads, following C++17
Yedidya Feldblum [Sun, 2 Jul 2017 17:22:27 +0000 (10:22 -0700)]
Disambiguate the various in_place overloads, following C++17

Summary:
[Folly] Disambiguate the various `in_place` overloads, following C++17.

Forwarding `folly::in_place` is ambiguous because there are multiple overloads and we depend on deduction to choose the correct overload. For example:

```lang=c++
enum struct Err {};
Expected<Expected<int, Err>, Err> val(in_place, in_place, 3); // fails to compile
```

So we must disambiguate the three overloads: the default, the typed, and the indexed.

C++17 defines `std::in_place`, `std::in_place_type<typename>`, and `std::in_place_index<std::size_t>`. Let us mimic that exactly, so that it becomes trivial to swap out our implementations for the standard implementations once we jump to C++17.

Reviewed By: Orvid

Differential Revision: D5362339

fbshipit-source-id: d4012b01796390e74d8c14cdf68af70102608039

6 years agoDon't attempt to lock the file descriptor in readv/writev if it's a socket
Christopher Dykes [Sun, 2 Jul 2017 06:50:37 +0000 (23:50 -0700)]
Don't attempt to lock the file descriptor in readv/writev if it's a socket

Summary:
There is no way to lock a socket on Windows, so these calls will always fail. Just don't do the lock on Windows.
To do it properly with sockets, this should probably be forwarding to `sendmsg`/`recvmsg`, but this is good enough for now.

Reviewed By: simpkins

Differential Revision: D5307901

fbshipit-source-id: 9855274e932a3e2ec3cacae10363200187e0c01b

6 years agoEnable a missing test in the CMake build
Christopher Dykes [Sat, 1 Jul 2017 03:17:55 +0000 (20:17 -0700)]
Enable a missing test in the CMake build

Summary: This also silences a few warnings in the stl vector tests.

Reviewed By: yfeldblum

Differential Revision: D5350383

fbshipit-source-id: 84df2a7dbfbb23ebb3f15a09f0cb58080b3e06d6

6 years agoFix undefined warning errors
Nate Stedman [Sat, 1 Jul 2017 01:01:42 +0000 (18:01 -0700)]
Fix undefined warning errors

Summary: Xcode 9 is throwing errors because `-Wshadow-local` and `-Wshadow-compatible-local` are undefined in Clang.

Reviewed By: Orvid

Differential Revision: D5356476

fbshipit-source-id: 4cc9f48f796f66decb4beaa66d3e66f486449c19

6 years agoDrop std::max_align_t hack present for GCC 4.8
Christopher Dykes [Fri, 30 Jun 2017 23:20:37 +0000 (16:20 -0700)]
Drop std::max_align_t hack present for GCC 4.8

Summary: Folly no longer supports GCC 4.8, so this is no longer needed.

Reviewed By: yfeldblum

Differential Revision: D5354542

fbshipit-source-id: bd9a2732f22f2176f64f92f0af6f7d59dd59a8d9

6 years agoauto-dep the rest of Folly
Christopher Dykes [Fri, 30 Jun 2017 22:18:55 +0000 (15:18 -0700)]
auto-dep the rest of Folly

Summary: This is so we can do some magic internally.

Reviewed By: yfeldblum

Differential Revision: D5354341

fbshipit-source-id: 96abf92f4765f5ae21aa3c0dc4bcadcc22560ab5

6 years agoDon't try to access XlogFileScopeInfo->category if not supported
Adam Simpkins [Fri, 30 Jun 2017 19:36:56 +0000 (12:36 -0700)]
Don't try to access XlogFileScopeInfo->category if not supported

Summary: This was breaking Windows builds.

Reviewed By: Orvid

Differential Revision: D5351468

fbshipit-source-id: 3385931b82b11d71d98861fb45efc71a632d470b

6 years agoUse #warning rather than #warn
Christopher Dykes [Fri, 30 Jun 2017 18:19:54 +0000 (11:19 -0700)]
Use #warning rather than #warn

Summary: Because `#warn` isn't actually a thing.

Reviewed By: ot

Differential Revision: D5356878

fbshipit-source-id: 57751ca57e7f6aaf9f4d8be70958b9cacc4f7335

6 years agoRemove the now dead StringBase.cpp
Christopher Dykes [Fri, 30 Jun 2017 17:52:18 +0000 (10:52 -0700)]
Remove the now dead StringBase.cpp

Summary: The empty file was left to stop the bleeding without breaking things. Time to remove it.

Reviewed By: mzlee

Differential Revision: D5354310

fbshipit-source-id: cd3039811cf9d7371578e4078cd7d32e3bc6d8a1

6 years agoFlat combining: Fix typos in comments
Maged Michael [Fri, 30 Jun 2017 12:27:49 +0000 (05:27 -0700)]
Flat combining: Fix typos in comments

Summary: reserved

Reviewed By: djwatson

Differential Revision: D5352232

fbshipit-source-id: e3c27e22320e12bd635acb8a1b394a9de02cecfc

6 years agoHazard pointers: Fix leak in hazptr_priv destruction
Maged Michael [Fri, 30 Jun 2017 04:21:32 +0000 (21:21 -0700)]
Hazard pointers: Fix leak in hazptr_priv destruction

Summary:
- Fixed leak in hazptr_priv destruction
- Updated tests to detect leak

Reviewed By: djwatson

Differential Revision: D5351280

fbshipit-source-id: 724810cbbe0565f0cbd41f9d2121abefd98487bd

6 years agoMerge StringBase.cpp into String.cpp
Christopher Dykes [Fri, 30 Jun 2017 03:13:49 +0000 (20:13 -0700)]
Merge StringBase.cpp into String.cpp

Summary: It doesn't need to exist anymore

Reviewed By: yfeldblum

Differential Revision: D5318746

fbshipit-source-id: c70b184f4b3fc12ede4632d6b3d43de16ed758c7

6 years agologging: support building with gcc-4.9
Adam Simpkins [Thu, 29 Jun 2017 21:45:09 +0000 (14:45 -0700)]
logging: support building with gcc-4.9

Summary:
Versions of gcc prior to 5.x only support C++11 constexpr functions, and
require that they consist of only a single return statement.

This updates isLogLevelFatal() to meet those requirements so that it can still
be compiled with gcc 4.9.

Reviewed By: ikobzar

Differential Revision: D5350304

fbshipit-source-id: 2a9c256236c484f8c3d5f83690fde8b7333aa4fc

6 years agoRemoving memory leaks in rsa setter test
Ankit Shah [Thu, 29 Jun 2017 20:24:19 +0000 (13:24 -0700)]
Removing memory leaks in rsa setter test

Summary:
Using RSA free and removing unnecessary Bignum allocations to prevent
test failures due to memory leaks

Reviewed By: anirudhvr

Differential Revision: D5348232

fbshipit-source-id: 7c76f3dced26a3080fc82b4bacc06bc0768d6fda

6 years agoHazard pointers: Add support for thread local lists of retired objects and other...
Maged Michael [Thu, 29 Jun 2017 14:16:37 +0000 (07:16 -0700)]
Hazard pointers: Add support for thread local lists of retired objects and other optimizations

Summary:
- Add support for private lists of retired objects
- Add an option for one domain
- More scalable thread cache managemnt
- hazptr_rec alignment
- FOLLY_ALWAYS_INLINE
- Refactor management of retired objects in hazptr_domain
- Refactor benchmarks

Reviewed By: davidtgoldblatt

Differential Revision: D5322646

fbshipit-source-id: 9d31582b9a8216861e7e78e2e1cd08dc11cf7f88

6 years agoRemove dependency on Conv.h from FileUtil.h
Andrew Krieger [Thu, 29 Jun 2017 00:12:01 +0000 (17:12 -0700)]
Remove dependency on Conv.h from FileUtil.h

Summary: So we can use writeFile in projects which compile with -fno-rtti

Reviewed By: mzlee

Differential Revision: D5341469

fbshipit-source-id: bb77baf9576604ff862d54d59bf382862bd0dd58

6 years agoAdd `mode` parameter to FileUtil.h writeFile
Andrew Krieger [Wed, 28 Jun 2017 23:42:40 +0000 (16:42 -0700)]
Add `mode` parameter to FileUtil.h writeFile

Summary:
writeFileAtomic variants all have a mode, lets just hoist the mode parameter
up and use what was hardcoded as the default.

Reviewed By: Orvid

Differential Revision: D5341481

fbshipit-source-id: 6976915dd73d2382b42bd991782730601b918978

6 years agoMove CacheLocality out of detail/ and into concurrency/
Giuseppe Ottaviano [Wed, 28 Jun 2017 18:09:42 +0000 (11:09 -0700)]
Move CacheLocality out of detail/ and into concurrency/

Summary: There's no reason these utilities should only be used by folly.

Reviewed By: mzlee

Differential Revision: D5317894

fbshipit-source-id: 5a9bdf4c5efaa5bcbe78e6723a03a468f2fe5e32

6 years agoAdding getter and setter methods for RSA
Ankit Shah [Wed, 28 Jun 2017 15:25:32 +0000 (08:25 -0700)]
Adding getter and setter methods for RSA

Summary:
Added getter and setter methods for the RSA struct in OpenSSL. This is
needed for compatibility between OpenSSl 1.1.0 and other versions.

Reviewed By: yfeldblum

Differential Revision: D5331948

fbshipit-source-id: ab52ffd38bb5e0bd59e058bcbc6ec6122839844e

6 years agoShift Future::then and Future::thenMulti into the class definition
Christopher Dykes [Wed, 28 Jun 2017 00:29:12 +0000 (17:29 -0700)]
Shift Future::then and Future::thenMulti into the class definition

Summary:
GCC 7 has issues with `this->` in trailing return type declarations. This takes the approach of eliminating the trailing return types entirely.

Closes https://github.com/facebook/folly/pull/621

Reviewed By: yfeldblum

Differential Revision: D5324763

fbshipit-source-id: e38ae76c13ff60bc227146c1ec25afbac8b6982f

6 years agoFixes for Try::withException
Yedidya Feldblum [Tue, 27 Jun 2017 21:27:31 +0000 (14:27 -0700)]
Fixes for Try::withException

Summary:
[Folly] Fixes for `Try::withException`.

* Fix the overload with the exception type specified so that the specified exception type is checked. A mismatch between the specified exception type and the parameter type of the passed invokable will result in the expected compiler error.
* Add an overload where the exception type is deduced intentionally, as opposed to accidentally.

Of course, these simply forward to their corresponding `exception_wrapper::withException` overloads.

Reviewed By: ericniebler

Differential Revision: D5216691

fbshipit-source-id: 7e85c906c3aa17dfede6e0980c6ac8bf75034073

6 years agoMove folly/experimental/AtomicSharedPtr.h -> folly/concurrency/AtomicSharedPtr.h
Dave Watson [Tue, 27 Jun 2017 19:09:05 +0000 (12:09 -0700)]
Move folly/experimental/AtomicSharedPtr.h -> folly/concurrency/AtomicSharedPtr.h

Summary: As title.

Reviewed By: WillerZ, yfeldblum, ivmaykov

Differential Revision: D5312308

fbshipit-source-id: 91ad4bb39df0619f2885e13c1fda1e018292a40e

6 years agoallow AsyncSignalHandler to attach and detach from an EventBase
Adam Simpkins [Tue, 27 Jun 2017 02:27:32 +0000 (19:27 -0700)]
allow AsyncSignalHandler to attach and detach from an EventBase

Summary:
Add attachEventBase() and detachEventBase() methods to AsyncSignalHandler,
similar to the methods of AsyncSocket.

The main benefit of this is that it allows creating an AsyncSignalHandler with
an initially null EventBase, and then attaching it to an EventBase at some
later point in time.

Reviewed By: yfeldblum

Differential Revision: D5315325

fbshipit-source-id: 8a4ca483a62ca86837ea0bb54fa9a70d59f2f04e

6 years agomake io::Cursor::push() safe to call with an empty ByteRange
Adam Simpkins [Tue, 27 Jun 2017 02:15:05 +0000 (19:15 -0700)]
make io::Cursor::push() safe to call with an empty ByteRange

Summary:
Clang's UndefinedBehaviorSanitizer flagged an issue that pushAtMost() could
call `memcpy(dest, nullptr, 0)` if the input was an empty `ByteRange`.  A
default constructed `ByteRange` (or `StringPiece`) will be empty and both its
begin and end pointers will be null.  Unfortunately it is undefined behavior to
call `memcpy()` with a null source pointer even if the length is 0.

This updates the `Cursor` and `Appender` code to avoid calling `memcpy()` at
all when the input length is 0.

Reviewed By: yfeldblum

Differential Revision: D5322917

fbshipit-source-id: 67fce9579f97e7e93a5767b11cc5e43ff7be5876

6 years agoImprove Format's handling of temporaries
Giuseppe Ottaviano [Mon, 26 Jun 2017 21:42:31 +0000 (14:42 -0700)]
Improve Format's handling of temporaries

Summary:
`FormatValue` holds non-integral objects by reference, which
can cause subtle problems if a formatter is constructed with temporary
arguments and used beyond the expression that constructs it.

With this diff the arguments are perfectly forwarded into a tuple, so
the formatter will take ownership of the temporaries while holding
references to lvalues as before.

The only downside is that now `FormatValue` objects are constructed
every time the formatter is used, rather than only at formatter
construction. This should not be noticeable as those objects'
constructors should just take a reference to the argument.

Note that the format string is still held by reference, but this is
fine because it should almost always be a string literal.

Reviewed By: ericniebler

Differential Revision: D5317382

fbshipit-source-id: ef8355194b634d3751ef1ccca32dd1db29e27c48

6 years agoSupport marking a file-descriptor as blocking via fcntl
Christopher Dykes [Mon, 26 Jun 2017 21:39:26 +0000 (14:39 -0700)]
Support marking a file-descriptor as blocking via fcntl

Summary: Previously, only marking it as non-blocking was supported.

Reviewed By: simpkins

Differential Revision: D5307769

fbshipit-source-id: 03ed7c35632dbc9551552b21c401ea709bd6eaaa

6 years agoEdited folly synchronized doc because one of the functions was incorrect
Marie Bremner [Mon, 26 Jun 2017 21:21:01 +0000 (14:21 -0700)]
Edited folly synchronized doc because one of the functions was incorrect

Summary: Edited the example function for withWLock

Reviewed By: simpkins

Differential Revision: D5322000

fbshipit-source-id: 6d95b173087dec33cfdc0d0cee9c605cdf4e2593

6 years agoLet make_exception_wrapper construct on-heap objects in-place
Yedidya Feldblum [Mon, 26 Jun 2017 20:22:19 +0000 (13:22 -0700)]
Let make_exception_wrapper construct on-heap objects in-place

Summary:
[Folly] Let `make_exception_wrapper` construct on-heap objects in-place.

Currently, it constructs on-heap objects on the stack and then move-constructs them into on-heap storage.

Reviewed By: ericniebler

Differential Revision: D5315104

fbshipit-source-id: cc0493e7d98aacadd342eb56601028ced4a19bb3

6 years agoFix SharedPromise::isFulfilled doesn't get back correct value when it's running in...
Bi Xue [Mon, 26 Jun 2017 19:19:40 +0000 (12:19 -0700)]
Fix SharedPromise::isFulfilled doesn't get back correct value when it's running in a different thread of SharedPromise::setValue

Summary: The implementation of `SharedPromise::isFulfilled` return `hasValue_` directly without taking a lock. `isFulfilled` can be accessed concurrently, but `hasValue_` is not synchronized. Adding a lock fix the issue.

Reviewed By: yfeldblum

Differential Revision: D5319030

fbshipit-source-id: a94b12ed277aa64254680ae84cb18946226cceea

6 years agoResolve the circular dependency between ThreadLocalDetail and ThreadLocal
Christopher Dykes [Mon, 26 Jun 2017 18:42:42 +0000 (11:42 -0700)]
Resolve the circular dependency between ThreadLocalDetail and ThreadLocal

Summary: There was a circular dependency between the `detail/ThreadLocalDetail.(cpp|h)` files and `ThreadLocal.(cpp|h)`, this resolves that circular dependency by moving a couple of declarations into the detail file.

Reviewed By: yfeldblum

Differential Revision: D5318875

fbshipit-source-id: 61de7c4b3ffa30f9eb11bd97e0493e9de12c5804

6 years agoRevert D5312574: [folly] Fix up and namespace clock_gettime and clock_getres for... v2017.06.26.01
Christopher Dykes [Mon, 26 Jun 2017 17:25:00 +0000 (10:25 -0700)]
Revert D5312574: [folly] Fix up and namespace clock_gettime and clock_getres for MacOS

Summary: This reverts commit f16634ce92ee6c299613d3db22f0537bd31ac14d

Differential Revision: D5312574

fbshipit-source-id: 1557ac17f79fb8e3530a09d69fa978ddd38e5093

6 years agoImprove efficiency of trivial toDelim calls
Phil Willoughby [Mon, 26 Jun 2017 14:08:25 +0000 (07:08 -0700)]
Improve efficiency of trivial toDelim calls

Summary:
`toDelim` with a single parameter of the same type as the target type was
previously copy-constructing its result. It will now construct it with perfect
forwarding which is more efficient if the input is a temporary.

This brings `toDelim` into line with the similar implementations of `to` and
`tryTo`

Reviewed By: yfeldblum

Differential Revision: D5301427

fbshipit-source-id: 843a2d93384de88cce42f26da6562a1a6ed0dc9c

6 years agoExplicitly specify that timezone is a struct v2017.06.26.00
Christopher Dykes [Sun, 25 Jun 2017 00:00:32 +0000 (17:00 -0700)]
Explicitly specify that timezone is a struct

Summary: In the parameter declarations for the `gettimeofday` portability header implementation. More details on exactly why can be found in the newly added comment on the function.

Reviewed By: yfeldblum

Differential Revision: D5281301

fbshipit-source-id: 1b246adc7743b5470201e452c008418429f7f142

6 years agoExclude experimental/logging/example from the main folly_base rule
Christopher Dykes [Sat, 24 Jun 2017 23:59:30 +0000 (16:59 -0700)]
Exclude experimental/logging/example from the main folly_base rule

Summary: It's an example, not part of the main Folly library.

Reviewed By: yfeldblum

Differential Revision: D5304985

fbshipit-source-id: 7cfb95da5795af61e9307882f71836ef7fa5a463

6 years agoSplit the futures and logging tests in the CMake build
Christopher Dykes [Sat, 24 Jun 2017 23:58:33 +0000 (16:58 -0700)]
Split the futures and logging tests in the CMake build

Summary: They are intended to be run as separate sets of tests, and the logging tests define multiple mains.

Reviewed By: yfeldblum

Differential Revision: D5307503

fbshipit-source-id: ed38a762177cec3c600791b861584dd47019b5a9

6 years agoFix up and namespace clock_gettime and clock_getres for MacOS
Michael Lee [Sat, 24 Jun 2017 03:11:14 +0000 (20:11 -0700)]
Fix up and namespace clock_gettime and clock_getres for MacOS

Summary:
Resolve two issues with folly's clock_gettime() shim on Apple platforms (iOS, macOS, etc.):

When detecting whether folly should define clock_gettime() on Apple platforms, don't assume clock_gettime() is declared in Apple's headers just because MAC_OS_X_VERSION_10_12/__IPHONE_10_0 is defined. Someone might use a newer macOS or iOS SDK (which defines MAC_OS_X_VERSION_10_12/__IPHONE_10_0), but not have clock_gettime() (because _DARWIN_FEATURE_CLOCK_GETTIME isn't set).

When defining a shim for clock_gettime(), don't rely on Apple's clock_gettime() declaration. Instead, shadow Apple's declaration with our own. This prevents folly from inheriting Apple's availability and visibility attributes for clock_gettime().

Reviewed By: yfeldblum

Differential Revision: D5312574

fbshipit-source-id: f16634ce92ee6c299613d3db22f0537bd31ac14d

6 years agoMove address caching logic from AsyncSSLSocket to AsyncSocket.
Kyle Nekritz [Fri, 23 Jun 2017 22:51:53 +0000 (15:51 -0700)]
Move address caching logic from AsyncSSLSocket to AsyncSocket.

Summary: So that it is available on other transports.

Reviewed By: Orvid

Differential Revision: D5302039

fbshipit-source-id: cbfdadd158061ed9a2b3ed3e0960ce66f0d545fd

6 years agofix UBSAN failure in atomic_shared_ptr_test
Ilya Maykov [Fri, 23 Jun 2017 22:43:48 +0000 (15:43 -0700)]
fix UBSAN failure in atomic_shared_ptr_test

Summary: Fix UBSAN failure in atomic_shared_ptr_test by using reinterpret_cast instead of static_cast.

Reviewed By: yfeldblum

Differential Revision: D5314116

fbshipit-source-id: 8479c9c4bdeeb155067a3de75efe4e97c36519e5

6 years agoMoveOnly utility
Giuseppe Ottaviano [Fri, 23 Jun 2017 22:19:01 +0000 (15:19 -0700)]
MoveOnly utility

Summary: Same as `boost::noncopyable` but it does not disable move constructor/assignment.

Reviewed By: luciang

Differential Revision: D5311043

fbshipit-source-id: 44fe95712169b95a00e474385be43fa857cfd8ec

6 years agoFix AsyncFileWriterTest due to long being 32-bit on Windows
Christopher Dykes [Fri, 23 Jun 2017 21:13:19 +0000 (14:13 -0700)]
Fix AsyncFileWriterTest due to long being 32-bit on Windows

Summary: `long` is only 32-bits on Windows, which means this call to `std::min` was ambiguous, which caused a compile error.

Reviewed By: simpkins

Differential Revision: D5305964

fbshipit-source-id: 7e4152006e163a0301652be46318f0fc937e5ead

6 years agoFix exception_wrapper on Windows by abusing internals
Andrew Krieger [Fri, 23 Jun 2017 20:58:11 +0000 (13:58 -0700)]
Fix exception_wrapper on Windows by abusing internals

Summary:
exception_wrapper's non-allocating variant was depending
on the exception reference being a reference to a heap object,
which is not the case on Windows. All thrown exceptions are
copied to the stack first.

So, we abuse internals of exception_ptr to get the internally
heap allocated copy of the object. What could possibly go wrong.

Reviewed By: yfeldblum, ericniebler, Orvid

Differential Revision: D5270634

fbshipit-source-id: 2983a6af9a2c3cb66cbee8a382707a76b582c489

6 years agomove input shared_ptr in atomic_shared_ptr constructor
Ilya Maykov [Fri, 23 Jun 2017 18:32:32 +0000 (11:32 -0700)]
move input shared_ptr in atomic_shared_ptr constructor

Summary: By moving the input shared_ptr instead of copying it, we avoid doing an unnecessary ref count increment + decrement.

Reviewed By: djwatson, yfeldblum

Differential Revision: D5298467

fbshipit-source-id: b9f0b6999278609417bb4dc062030ca2388ba20a

6 years agoFix GlogFormatterTest on Windows
Christopher Dykes [Fri, 23 Jun 2017 02:55:36 +0000 (19:55 -0700)]
Fix GlogFormatterTest on Windows

Summary:
It was missing a portability header needed for `setenv`, and was assuming that the `system_clock` was represented as nanoseconds.
On Windows `std::chrono::system_clock` is represented as 100s of nanoseconds, ie. `FILETIME`.

Reviewed By: simpkins

Differential Revision: D5308182

fbshipit-source-id: facb922ebe1587723358b38499dadac683e3517b

6 years agoStop MSVC from complaining about digraphs not being supported
Christopher Dykes [Fri, 23 Jun 2017 01:09:20 +0000 (18:09 -0700)]
Stop MSVC from complaining about digraphs not being supported

Summary: MSVC complains about `<:` being a digraph and that it isn't interpreting it as one (C4628). Make it be quiet by making it not look like a digraph.

Reviewed By: simpkins

Differential Revision: D5305162

fbshipit-source-id: 7385164e8f73226ce18bc04c32894c2f27f8ae25

6 years agoSwitch the logging tests from .native() to .string()
Christopher Dykes [Fri, 23 Jun 2017 01:08:23 +0000 (18:08 -0700)]
Switch the logging tests from .native() to .string()

Summary: These were using `boost::filesystem::path.native()` in contexts where an `std::string` was the expected output. `boost::filesystem::path.native()` returns a `std::wstring` on Windows, so use `.string()` instead.

Reviewed By: simpkins

Differential Revision: D5305649

fbshipit-source-id: 3c7cd53d2f33d2dbb222731655cdab69d1c4a187

6 years agoFix ThreadName.cpp on Windows
Christopher Dykes [Fri, 23 Jun 2017 01:07:39 +0000 (18:07 -0700)]
Fix ThreadName.cpp on Windows

Summary: I failed to realize that this helper function also needs to be guarded on `!_WIN32`, because the assertions are false on Windows.

Reviewed By: ot, luciang

Differential Revision: D5304914

fbshipit-source-id: f2564cb2fcbfdc73a2529d4a41df2995748bc3f6

6 years agoEnable more auto-deps in Folly
Christopher Dykes [Fri, 23 Jun 2017 01:06:21 +0000 (18:06 -0700)]
Enable more auto-deps in Folly

Summary: This enables auto-deps support in more places in Folly. It also fixes a couple of auto-deps declarations that were missing an `s`.

Reviewed By: yfeldblum

Differential Revision: D5289542

fbshipit-source-id: 7d34b29bcc172fb31f91f1ba880864e2d5869ffd

6 years agoallow passing function pointers to Future::onError()
Adam Simpkins [Thu, 22 Jun 2017 20:39:56 +0000 (13:39 -0700)]
allow passing function pointers to Future::onError()

Summary:
Add appropriate specializations for detail::Extract() so that you can pass a
plain function pointer to `onError()`.  Previously the code only worked with
member function pointers and functor-style objects.

Reviewed By: yfeldblum, wez

Differential Revision: D5286773

fbshipit-source-id: 67b44d1d7573eb1da501475045fd24ad4ab1c074

6 years agologging: fix issues detecting XLOG(FATAL) statements as noreturn
Adam Simpkins [Thu, 22 Jun 2017 18:44:38 +0000 (11:44 -0700)]
logging: fix issues detecting XLOG(FATAL) statements as noreturn

Summary:
Update the FB_LOG() and XLOG() macros so that FATAL log messages are correctly
detected as not returning, by both clang and gcc.

We have to ensure that both sides of the log statement check (log message
enabled or disabled) evaluate to `[[noreturn]]` expressions.  I did try
updating the log check itself so that it could be constexpr detected as always
passing, but this was not sufficient.

Reviewed By: wez

Differential Revision: D5290780

fbshipit-source-id: 773a56a8392dfd7c310d5d84fc9311e66edf99cb

6 years agoAsyncSSLSocket connect without SSL
Aaron Balsara [Thu, 22 Jun 2017 18:26:36 +0000 (11:26 -0700)]
AsyncSSLSocket connect without SSL

Summary:
Currently when calling connect with AsyncSSLSocket in unencrypted
mode it still attempts to perform a SSL handshake. Add check to not
do SSL. Calling sslConnect will always run the SSL handshake

Reviewed By: jrahman

Differential Revision: D5153456

fbshipit-source-id: 4d9164115be72c8ee76e383535561e3083a327e3

6 years agologging: improve the AsyncFileWriter flush test()
Adam Simpkins [Thu, 22 Jun 2017 03:38:47 +0000 (20:38 -0700)]
logging: improve the AsyncFileWriter flush test()

Summary:
This test has run into occasional failures on continuous build test runs.
Unfortunately when something goes wrong it crashes in the std::thread
destructor due to this thread still being joinable when it is destroyed, which
hides information about what actually failed in the test.

This updates the test to immediately detach the thread, so that on error we
will be able see the real failure reason.

This also increases the size of the message that we write, which will hopefully
help ensure that this write always blocks.

Reviewed By: wez

Differential Revision: D5295574

fbshipit-source-id: ea8cfa855613398f88f9f982c600ec661018a31c

6 years agologging: fully convert the ERROR level to ERR
Adam Simpkins [Thu, 22 Jun 2017 00:23:21 +0000 (17:23 -0700)]
logging: fully convert the ERROR level to ERR

Summary:
Switch all code in the logging library from using `ERROR` to `ERR`,
and remove the `ERROR` LogLevel entirely, even if it is not already
defined as a macro.

Previously the code kept `ERROR` available as a LogLevel name if it had
not already been defined as a macro (which is done by common Windows header
files).  However, this made for inconsistent behavior, and made it easy to
write code that would not be portable to Windows.

This diff fully drops the `ERROR` name for consistency across platforms.

Reviewed By: wez

Differential Revision: D5288600

fbshipit-source-id: 8d2d52e955959c278345fc9c2086c7cacf9660f9

6 years agologging: add more tests for fatal log messages
Adam Simpkins [Thu, 22 Jun 2017 00:05:20 +0000 (17:05 -0700)]
logging: add more tests for fatal log messages

Summary:
Add some tests for fatal log messages during static initialization and
destruction.  Ideally most programs won't actually do much real work before or
after main, but make sure the logging framework behaves sanely in these
situations.

This also fixes a bug in the `test_none()` test, which previously caused it to
always succeed without testing the desired behavior.

Reviewed By: wez

Differential Revision: D5281718

fbshipit-source-id: ca838c098886e99418264acf9a4d651ea9e7502c

6 years agoAdd support for move operations on hazptr-holder. Other optimizations.
Maged Michael [Wed, 21 Jun 2017 22:56:45 +0000 (15:56 -0700)]
Add support for move operations on hazptr-holder. Other optimizations.

Summary:
- Support empty hazptr_holder, move constructor and assignment operator
- Limit thread caching to the default domain to improve performance of thread caching
- Fix unnecessary calls to stats singleton
- Use the mprotect version of AsymmetricMemoryBarrier for reducing the overhead of bulkReclaim().
- Update read-side benchmark results

Reviewed By: djwatson

Differential Revision: D5292885

fbshipit-source-id: bc5713ac95492a7114e1e467e71d2278e64b165d

6 years agologging: shorten output of logLevelToString()
Adam Simpkins [Wed, 21 Jun 2017 20:23:28 +0000 (13:23 -0700)]
logging: shorten output of logLevelToString()

Summary:
Remove the "LogLevel::" prefix from the logLevelToString() output.

This makes the output shorter and easier to read, and makes it simpler to write
LogFormatter implementations that want a short human-readable level
description.  Callers can always add a "LogLevel::" prefix on their own if
desired.

Reviewed By: wez

Differential Revision: D5288601

fbshipit-source-id: 046579ebdda76842d5a44c33d68941d73dd81162

6 years agoPrint expected/actual thread names when running EventBase logic in unexpected thread
Giuseppe Ottaviano [Wed, 21 Jun 2017 19:28:52 +0000 (12:28 -0700)]
Print expected/actual thread names when running EventBase logic in unexpected thread

Summary: The existing assertion errors do not give a lot of information to track down which thread is incorrectly using the `EventBase`. Print both the current thread name and the name of the thread running the event base loop.

Reviewed By: luciang

Differential Revision: D5289790

fbshipit-source-id: 563c7f68b7f9b7a6e85e22290d7e81afbf89871e

6 years agoCall onRecycle after element is marked as deallocated in IndexedMemPool
Victor Zverovich [Wed, 21 Jun 2017 18:38:32 +0000 (11:38 -0700)]
Call onRecycle after element is marked as deallocated in IndexedMemPool

Summary: Make `IndexedMemPool` call `Traits::onRecycle` on the element just before it is marked as deallocated. This mirrors the allocation behavior implemented in D5177462 and simplifies preventing access to recycled elements (the client just needs to check `isAllocated` before accessing the element).

Reviewed By: nbronson

Differential Revision: D5275283

fbshipit-source-id: 58365b5b7b32b07fa56529c476078f241fc20811

6 years agoShift the exception tracer benchmark and test into the test directory
Christopher Dykes [Wed, 21 Jun 2017 18:22:23 +0000 (11:22 -0700)]
Shift the exception tracer benchmark and test into the test directory

Summary: Tests and benchmarks don't belong in the same directory as source code.

Reviewed By: yfeldblum

Differential Revision: D5288080

fbshipit-source-id: 865c6dfbeff751bda49870e5284e168d33aff256