1. 14 Apr, 2017 13 commits
    • Christopher Dykes's avatar
      Make folly::getCurrentThreadId() return a thread ID on OSX · 9b2f7afe
      Christopher Dykes authored
      Summary: It was previously returning a pointer masquerading as a `uint64_t`.
      
      Reviewed By: yfeldblum
      
      Differential Revision: D4888325
      
      fbshipit-source-id: 6cf6ed09f0e7a39a8a2f93d3fa14b06913c27805
      9b2f7afe
    • Christopher Dykes's avatar
      Add FOLLY_HAVE_PTRHEAD · 1244eb24
      Christopher Dykes authored
      Summary:
      Folly is gaining support for compiling without PThread support on Windows, but we need a way to know that at compile-time for certain APIs.
      This also includes changes to guard the only API outside of portability/PThread.h that needs to be guarded on the existence of PThread.
      
      Reviewed By: yfeldblum
      
      Differential Revision: D4889526
      
      fbshipit-source-id: 21175ad90f60a47718c7e2775e3b429b2aad62e2
      1244eb24
    • Christopher Dykes's avatar
      Add support for building without PThread to the CMake files · b8d8ea5a
      Christopher Dykes authored
      Summary: Because, soon it won't be required.
      
      Reviewed By: yfeldblum
      
      Differential Revision: D4892076
      
      fbshipit-source-id: 6bfbf5bf523262659c0af336f659398ae8545e50
      b8d8ea5a
    • Christopher Dykes's avatar
      Remove the old SpinLock implementations · 6226a991
      Christopher Dykes authored
      Summary: They aren't actually needed as the primary implementation is supported on all platforms.
      
      Reviewed By: yfeldblum
      
      Differential Revision: D4882687
      
      fbshipit-source-id: 7208c5d3c1f35b29b0cabb6a20fe030fbf10b131
      6226a991
    • Mark Williams's avatar
      Revert D4805628: [folly] Suppress more warnings for MSVC · 6c4a55d0
      Mark Williams authored
      Summary: This reverts commit 9574ea984e1e3daca01101259687f46effcf3a9f
      
      Differential Revision: D4805628
      
      fbshipit-source-id: 3285317a4c3f2012da1f13e9c91b6c623726c9b7
      6c4a55d0
    • Yedidya Feldblum's avatar
      Initialize the singleton-vault early in init() · a411c5f3
      Yedidya Feldblum authored
      Summary:
      Initialize the singleton-vault early in `init()` to avoid ordering problems with other parts of `init()`.
      
      Initialization is done by calling `SingletonVault::singleton()->registrationComplete()`. Do that before (almost) everything, in particular, before parsing args and initializing logging.
      
      Note that this just marks it okay for singletons to be instantiated, but does not by itself instantiate any singletons. However, this is useful if, in some way, parsing args or initializing logging should happen to use singletons.
      
      Reviewed By: andriigrynenko
      
      Differential Revision: D4889777
      
      fbshipit-source-id: 6817db22d38a498cd20e361fc574a146029432ec
      a411c5f3
    • Andrew Krieger's avatar
      Suppress more warnings for MSVC · a110f8da
      Andrew Krieger authored
      Summary:
      Several other warnings that aren't reasonable to disable globally occur in folly headers.
      - Wrap the unreachable code warnings in MSVC specific disable blocks to prevent problems for users.
      - Cast to signed types to perform integral negation before casting back to unsigned for bit operations.
      - Enable a simpler overload for bool->float conversion than one which attempts float->bool.
      - Delete one unneeded undef.
      
      (Note: this ignores all push blocking failures!)
      
      Reviewed By: yfeldblum
      
      Differential Revision: D4805628
      
      fbshipit-source-id: 9574ea984e1e3daca01101259687f46effcf3a9f
      a110f8da
    • Andrew Krieger's avatar
      Remove pthread dependency from CacheLocality.h · 01de3b43
      Andrew Krieger authored
      Summary:
      For getting a thread id for hashing, std::this_thread::get_id()
      is just as good and also removes an unneeded pthreads dependency. This enables
      using MPMCQueue on Windows without pthreads as well.
      
      Reviewed By: Orvid, yfeldblum
      
      Differential Revision: D4879940
      
      fbshipit-source-id: c4fb5eea165eb450240f94904aa26a10aa394d1b
      01de3b43
    • Christopher Dykes's avatar
      Switch TimedRWMutex implementation to use lock_guard where possible · 4e509c4b
      Christopher Dykes authored
      Summary: As titled. There are some places where scoping prevents trivial conversion, so I've left those places with explicit lock/unlock calls.
      
      Reviewed By: andriigrynenko, yfeldblum
      
      Differential Revision: D4888812
      
      fbshipit-source-id: c124306e0373ee9eb395cb98f88df63c91523d48
      4e509c4b
    • Christopher Dykes's avatar
      Use getCurrentThreadID() rather than pthread_self() in MemoryIdler · 04de301e
      Christopher Dykes authored
      Summary: Ignoring the questionability of the approach it's being used in, it's better to not have the direct PThread dependency.
      
      Reviewed By: yfeldblum
      
      Differential Revision: D4889245
      
      fbshipit-source-id: da099c6f938dbe98c1b9eeaf4de0a27a2c4d65f1
      04de301e
    • Andrew Krieger's avatar
      Explicitly use CreateFileA in readlink · 91b69f13
      Andrew Krieger authored
      Summary:
      In Unicode enabled projects, this errors because CreateFile aliases
      CreateFileW, which takes wchar_t* not char*.
      
      Reviewed By: Orvid, yfeldblum
      
      Differential Revision: D4878424
      
      fbshipit-source-id: b44b369c0533e74163f68d95c2bf353584033731
      91b69f13
    • Christopher Dykes's avatar
      Support folly::getCurrentThreadID() without PThread · ee080728
      Christopher Dykes authored
      Summary: Just use the native Windows API call instead, as it gives the same result.
      
      Reviewed By: yfeldblum
      
      Differential Revision: D4887587
      
      fbshipit-source-id: adbfd288bea425f1aff46d0685083807490f7f09
      ee080728
    • Christopher Dykes's avatar
      Don't use pthread_spinlock_t in TimedRWMutex · 214b26f3
      Christopher Dykes authored
      Summary: `TimedMutex` was already using `folly::SpinLock`, so switch `TimedRWMutex` to do the same.
      
      Reviewed By: andriigrynenko
      
      Differential Revision: D4888005
      
      fbshipit-source-id: 6e782347bc22dc186ed41f2e77c6614b8444bae2
      214b26f3
  2. 13 Apr, 2017 7 commits
    • Christopher Dykes's avatar
      Switch includes of PThread to the portability header · 62134365
      Christopher Dykes authored
      Summary:
      As part of the work towards getting Folly compiling without PThread, it needs to be treated as a non-portable include.
      This switches the includes not already covered by other diffs.
      
      Reviewed By: yfeldblum
      
      Differential Revision: D4882777
      
      fbshipit-source-id: d9521564c814f9bcff2fcb358cbb89b3777c327d
      62134365
    • Christopher Dykes's avatar
      Fix 1/2 of exception_wrapper under MSVC · 8a569003
      Christopher Dykes authored
      Summary:
      MSVC didn't like referring to members of `exception_wrapper` in the initializer for a `static constexpr` field directly in `exception_wrapper`, so shift the initialization to the actual definition of the fields.
      As the fields are only referred to via their address, dropping the `constexpr` loses nothing.
      
      Reviewed By: ericniebler
      
      Differential Revision: D4873939
      
      fbshipit-source-id: 30b690b1ab3f2f7a25b9dc4863b46f64c811797d
      8a569003
    • Neel Goyal's avatar
      Add method to check if SSL Lock is disabled · e7231fdb
      Neel Goyal authored
      Summary:
      Add a method where users can determine if a SSL lock is disabled.
      
      This can help when it comes to making decisions about things like whether reusing SSL Contexts is safe in multithreaded programs.
      
      Reviewed By: siyengar
      
      Differential Revision: D4875780
      
      fbshipit-source-id: 91e9259fee25856be1b77823559d16d0679bde5b
      e7231fdb
    • Christopher Dykes's avatar
      Kill a couple of PThread includes · 37af0398
      Christopher Dykes authored
      Summary: They aren't actually needed, and are in the way of being able to build Folly without PThread.
      
      Reviewed By: yfeldblum
      
      Differential Revision: D4882410
      
      fbshipit-source-id: e4a48600f79c57bb965a35fab94962a29b8e06d4
      37af0398
    • Christopher Dykes's avatar
      Add CMake build system · 7e9117ad
      Christopher Dykes authored
      Summary: This is for use on Windows only, and does not support Linux or OSX in the slightest. There are probably still a few hacks laying around in it, but it works, and that's good enough for now.
      
      Reviewed By: yfeldblum
      
      Differential Revision: D4873498
      
      fbshipit-source-id: 5952a927037dc1d56c51e71d51ba506d2cd17357
      7e9117ad
    • Nick Terrell's avatar
      Add bzip2 support · d216a9bd
      Nick Terrell authored
      Summary:
      Adds bzip2 support to `folly/io/Compression.h`.
      Adds bzip2 to the default set of supported codecs for the `AutomaticCodec`.
      
      Reviewed By: yfeldblum
      
      Differential Revision: D4873771
      
      fbshipit-source-id: d4f4861aef7e4b9efb67095e8892c265b5ae5557
      d216a9bd
    • Christopher Dykes's avatar
      Fix the last issues with exception_wrapper under MSVC · 3a7cbbe4
      Christopher Dykes authored
      Summary:
      Well, MSVC 2017 anyways.
      MSVC 2017 wasn't able to handle the decltype in the type specialization, which was also entirely unnecesary.
      
      Reviewed By: yfeldblum
      
      Differential Revision: D4880272
      
      fbshipit-source-id: b6deed72a12d4b58d6eca200e7287e536f94ca30
      3a7cbbe4
  3. 12 Apr, 2017 9 commits
    • Alexey Spiridonov's avatar
      Replace Subprocess::pipe* syntax sugar with Subprocess::Options().pipe* · b4bcc1a7
      Alexey Spiridonov authored
      Summary:
      This is a bit too magical -- it's not clear that the thing produces an Options object. If you do know that you can chain further option setters off this thing, it's nice, but otherwise, the first impression is "what just happened?".
      
      So, let's have one good way for doing things.
      
      Reviewed By: yfeldblum
      
      Differential Revision: D4863947
      
      fbshipit-source-id: 3dfe83cfc077d47f604f47dcb21149fbaa2d2243
      b4bcc1a7
    • Alexey Spiridonov's avatar
      Delete | operator for Subprocess::Options · 0e5ec48b
      Alexey Spiridonov authored
      Summary:
      This operator is WRONG. It has not worked correctly for years, e.g. it lacks support for chdir, and several other options.
      
      The operator is not really useful after C++11. Usually, you should just chain setters, e.g. `Subprocess::Options().pipeStdout().pipeStderr()`. If you must repeatedly mutate options in a fixed way, in the C++11 world you can use a lambda instead.
      
      Reviewed By: yfeldblum
      
      Differential Revision: D4862698
      
      fbshipit-source-id: a2d8ace53424b9232e178cf202cf51beb7b59b12
      0e5ec48b
    • Nick Terrell's avatar
      Fix zlib + lzma memory usage inefficiency · 6bb90698
      Nick Terrell authored
      Summary:
      Since IOBuf rounds to a good malloc size, zlib and lzma waste space.
      For a 4 MiB `length`, about 1 MiB of the IOBuf is wasted.
      
      Reviewed By: yfeldblum
      
      Differential Revision: D4872830
      
      fbshipit-source-id: 42fc83277b2dae22b75403e0e71c43e8f2b19f21
      6bb90698
    • Jude Taylor's avatar
      codemod: ASN1_STRING_data -> ASN1_STRING_get0_data · 6dbd9e97
      Jude Taylor authored
      Reviewed By: anirudhvr
      
      Differential Revision: D4830205
      
      fbshipit-source-id: 55f34c3bddead8a73174c403f76572248c541a10
      6dbd9e97
    • Christopher Dykes's avatar
      Make folly::StrictConjunction usable under MSVC · 44ce72fd
      Christopher Dykes authored
      Summary:
      Template pack expansion plays much nicer when being expanded into the template parameters of a base class than it does as the template parameters to a templated `using` when under MSVC.
      This fixes the other half of `folly::exception_wrapper`.
      
      Reviewed By: yfeldblum
      
      Differential Revision: D4874047
      
      fbshipit-source-id: 6593d10f8737b940bd550353e54f43bc96402a48
      44ce72fd
    • Jude Taylor's avatar
      Provide a copy ctor for Digest that copies the current hash context · 68a3d541
      Jude Taylor authored
      Summary: opensource changes for t16702532
      
      Reviewed By: yfeldblum
      
      Differential Revision: D4846899
      
      fbshipit-source-id: 67a610ff399e95c7cf1c9c8a5950f79bfc3aabb9
      68a3d541
    • Artem Lantsev's avatar
      Add memory padding and alignment to prevent false sharing · a9d90ea1
      Artem Lantsev authored
      Summary: This is a follow up commit for the thread https://github.com/facebook/folly/pull/378
      
      Reviewed By: nbronson
      
      Differential Revision: D4860356
      
      fbshipit-source-id: f10a0d12a593c18b1abf94da5b477c524c04f4be
      a9d90ea1
    • Aravind Anbudurai's avatar
      Support linux namespace clone flags · 4e9783b9
      Aravind Anbudurai authored
      Summary:
      This diffs adds supports on folly::Subprocess to be able to take clone flags and
      use them to call clone(2) instead of the default vfork()
      
      I checked that all tests pass when I replace vfork with fork on trunk. So there
      isn't anything built assuming the parent is paused for an execve. Correct me if
      I am wrong here.
      
      (Note: this ignores all push blocking failures!)
      
      Reviewed By: snarkmaster
      
      Differential Revision: D4853169
      
      fbshipit-source-id: 7e5851df3a49996a4a5dc1945457686dd042e1f4
      4e9783b9
    • Angelo Failla's avatar
      IPAddressV(46) methods to convert IPs to their inverse in-addr.arpa / ip6.arpa representation · b41eb6f0
      Angelo Failla authored
      Summary: As per the title, this adds methods to convert IPv(46) to their inverse representation, this is useful for applications that needs to calculate the inverse arpa representation, typically used when making PTR DNS requests.
      
      Reviewed By: Orvid
      
      Differential Revision: D4867502
      
      fbshipit-source-id: 190e5c309b17a633e1c97b077f212ab38725860f
      b41eb6f0
  4. 11 Apr, 2017 6 commits
    • Eric Niebler's avatar
      non-throwing, non-allocating exception_wrapper · 19e3e9fe
      Eric Niebler authored
      Summary:
      The purpose of this reimplementation of `exception_wrapper` is threefold:
      
      - Make `exception_wrapper` smaller. It goes from 48 bytes to 24.
      - Give it `noexcept` ~~copy and~~ move
      - Store small exception objects in an internal buffer; i.e., with zero allocations.
      
      The ultimate goal is to change `folly::Try<T>` to a thin wrapper over `folly::Expected<T, exception_wrapper>`. (Currently, it stores the `exception_wrapper` on the heap.)
      
      As part of this redesign, I:
      
      - Remove `exception_wrapper::getCopied`. The user shouldn't care how the `exception_wrapper` stores the exception.
      - Remove `exception_wrapper::operator==`. It was only used in 2 places in test code. The existing semantics (return true IFF two `exception_wrapper`s point to the //same// exception object) prevented the small-object optimization.
      - Add new `handle()` API that behaves like cascading `catch` clauses. For instance:
      ```lang=c++
      exception_wrapper ew = ...;
      ew.handle(
          [&](const SomeException& e) { /*...*/ },
          [&](const AnotherException& e) { /*...*/ },
          [&](...) { /* catch all*/ }, // yes, lambda with ellipses works!
      ```
      - Add a `type()` member for accessing the `typeid` of the wrapped exception, if it's known or can be determined with a `catch(std::exception&)`.
      
      This table shows the percent improvement for the exception_wrapper_benchmark test:
      
      | Test  | Percent improvement (gcc-5)  | Percent improvement (gcc-4)
      | -----  | -----  | -----
      | exception_wrapper_create_and_test  | 14.33%    | -6.50%
      | exception_wrapper_create_and_test_concurrent | 11.91% | 20.15%
      | exception_wrapper_create_and_throw | -0.82% | -0.25%
      | exception_wrapper_create_and_cast | 15.02% | 14.31%
      | exception_wrapper_create_and_throw_concurrent | 18.37% | 8.03%
      | exception_wrapper_create_and_cast_concurrent | 28.18% | -10.77%
      
      The percent win for gcc-5 is 15% on average. The non-throwing tests show a greater win since the cost of actually throwing an exception drowns out the other improvements. (One of the reasons to use `exception_wrapper` is to not need to throw in the first place.) On gcc-4, there is roughly no change since the gcc-4 standard exceptions (`std::runtime_error`, std::logic_error`) are non-conforming since they have throwing copy operations.
      
      Reviewed By: yfeldblum
      
      Differential Revision: D4385822
      
      fbshipit-source-id: 63a8316c2923b29a79f8fa446126a8c37aa32989
      19e3e9fe
    • Christopher Dykes's avatar
      Treat OpenSSL as a non-portable include · c5b9338e
      Christopher Dykes authored
      Summary: On Windows, the OpenSSL headers have to be included in a specific order relative to WinSock. Fixing the issues ad-hock is not a viable way to continue, so treat it as completely non-portable and require all includes of it in Folly to go through the portability header.
      
      Reviewed By: yfeldblum
      
      Differential Revision: D4856858
      
      fbshipit-source-id: 56aca1fb0fe095f41a8af12488c6c2080344603d
      c5b9338e
    • Christopher Dykes's avatar
      Implement clearenv in the portability headers · a5a61149
      Christopher Dykes authored
      Summary:
      It doesn't exist on OSX or Windows, so implement it.
      
      Closes https://github.com/facebook/folly/issues/567
      
      Reviewed By: yfeldblum
      
      Differential Revision: D4783463
      
      fbshipit-source-id: 0a2586aced7123b797a8e55a3e86124b449634e4
      a5a61149
    • Andrii Grynenko's avatar
      Fix TLRefCount::useGlobal to work with TSAN · 1d11ad7a
      Andrii Grynenko authored
      Summary: TSAN has a limitation for the number of locks held concurrently - https://github.com/llvm-mirror/compiler-rt/blob/master/lib/sanitizer_common/sanitizer_deadlock_detector.h#L126, so we have to work around that.
      
      Reviewed By: yfeldblum
      
      Differential Revision: D4866477
      
      fbshipit-source-id: 958251e97d91c1c46ef4e907de2cf189fb04f88e
      1d11ad7a
    • Andrii Grynenko's avatar
      Fix Fiber::LocalData leak for large fiber locals · 42f6e99c
      Andrii Grynenko authored
      Summary: facepaw
      
      Reviewed By: yfeldblum
      
      Differential Revision: D4856227
      
      fbshipit-source-id: 17a73d4d630c6efe1763bbd8aff8b7a2c7721c27
      42f6e99c
    • Christopher Dykes's avatar
      Revert D4832473: [Folly] Disable EnvUtil::setAsCurrentEnvironment() on platforms without clearenv() · 4fe88e4c
      Christopher Dykes authored
      Summary: This reverts commit a80aabb5a223264746ab45e3138d065bce5fe99c
      
      Differential Revision: D4832473
      
      fbshipit-source-id: 1a78d61f3f09f1064876a786c15601a091f4402b
      4fe88e4c
  5. 10 Apr, 2017 5 commits
    • Alexander Shaposhnikov's avatar
      Remove superfluous std::move · 0fa94136
      Alexander Shaposhnikov authored
      Summary: Cleanup: remove superfluous std::move for return values.
      
      Reviewed By: yfeldblum
      
      Differential Revision: D4856421
      
      fbshipit-source-id: bf2cb66f3b43eb8f3b183e22b0acd31e0a0c0958
      0fa94136
    • Nick Terrell's avatar
      Fix std::max() call in Compression.cpp · 03ce292a
      Nick Terrell authored
      Summary:
      `std::max(uint64_t, size_t)` was called.
      Fixes https://github.com/facebook/folly/issues/576.
      
      Reviewed By: Orvid
      
      Differential Revision: D4861336
      
      fbshipit-source-id: 1b6f67b291451048ba79d638d2c1184f9245dc0c
      03ce292a
    • Christopher Dykes's avatar
      Fix the build... Whoops... · b8ec2ef5
      Christopher Dykes authored
      Summary: I landed a change to Folly that used a feature I had just re-written in Folly without updating the change. This has broken everything. Whoops.
      
      Reviewed By: yfeldblum
      
      Differential Revision: D4861562
      
      fbshipit-source-id: 05beadbe233d1fdf90fb4435e65b718cdec7f63e
      b8ec2ef5
    • Christopher Dykes's avatar
      Re-work the OpenSSL portability header to be a portability header · 9783dc4e
      Christopher Dykes authored
      Summary:
      It was defining the same functions as OpenSSL, but it was putting them in the `folly::ssl` namespace and requiring a manual `use namespace` everywhere to actually be able to use it. Proper portability headers require no interaction to function correctly other than including them in the build.
      This adjusts it so including it is all that is required to get an OpenSSL 1.1.0 compatible API.
      This also re-organizes the code to significantly lower the amount of nesting in the `#if`'s, and puts it in order from oldest APIs to newest, rather than haphazard.
      
      Reviewed By: yfeldblum
      
      Differential Revision: D4856784
      
      fbshipit-source-id: 7c00fdf4a3e51e37287d2b1ef294046f38a96a43
      9783dc4e
    • Jason Fried's avatar
      Client RequestChannels and folly/python/futures.h · 46b709bc
      Jason Fried authored
      Summary:
      Use RequestChannel to construct Thrift Clients.
      
      use folly/python/futures.h to marry up thrift client rpc futures to
      asyncio futures. No gil exchanges
      
      py3 clients are async context managers now.
      
      Reviewed By: ambv, yfeldblum
      
      Differential Revision: D4639677
      
      fbshipit-source-id: 6b400747507446882d3cfcb1cf7e85c3daa07a2e
      46b709bc