1. 24 Aug, 2017 9 commits
    • Aaryaman Sagar's avatar
      Added rvalue and const rvalue overloads to Try · 51647aaa
      Aaryaman Sagar authored
      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
      51647aaa
    • Aaryaman Sagar's avatar
      unwrapTryTuple only accepted rvalue tuple types · 374d408b
      Aaryaman Sagar authored
      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
      374d408b
    • Andrii Kryzhyk's avatar
      Create generic method to extract mac address from EUI-64 constructed addresses · de75bdc4
      Andrii Kryzhyk authored
      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
      de75bdc4
    • Peter DeLong's avatar
      Improve formatting of scripts and test files · f2d4ac87
      Peter DeLong authored
      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
      f2d4ac87
    • Stella Lau's avatar
      Add LZMA streaming interface · 9dc004f8
      Stella Lau authored
      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
      9dc004f8
    • Yedidya Feldblum's avatar
      Try::exception overload for Try&& · 4d4a549d
      Yedidya Feldblum authored
      Summary:
      [Folly] `Try::exception` overload for `Try&&`.
      
      For consistency with `Try::value`.
      
      Reviewed By: WillerZ
      
      Differential Revision: D5691758
      
      fbshipit-source-id: 9904b2a5c90f4575a3c09dc012658d359d11fdd9
      4d4a549d
    • Christopher Dykes's avatar
      Rename FOLLY_A64 to FOLLY_AARCH64 · aa86aa27
      Christopher Dykes authored
      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
      aa86aa27
    • shane's avatar
      update README for ubuntu 16.04 LTS + custom boost installation details · a901072c
      shane authored
      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
      a901072c
    • Alison Tsai's avatar
      macro to enable scoped trace section functionality · f74bfffc
      Alison Tsai authored
      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
      f74bfffc
  2. 22 Aug, 2017 5 commits
    • Yedidya Feldblum's avatar
      Use simple exception_wrapper ctor in the Promise::setException test · 116ae463
      Yedidya Feldblum authored
      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
      116ae463
    • Aaryaman Sagar's avatar
      Added a for_each function to iterate through ranges · 05db64e6
      Aaryaman Sagar authored
      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
      05db64e6
    • Mingtao Yang's avatar
      Explicitly initialize AsyncSocket in MockAsyncSSLSocket · 02fe20e3
      Mingtao Yang authored
      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
      02fe20e3
    • Yedidya Feldblum's avatar
      Use exception_wrapper::from_exception_ptr in Try and Promise · 1eccb2e6
      Yedidya Feldblum authored
      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
      1eccb2e6
    • Stella Lau's avatar
      Add zlib-specific codec initialization · 2ca5653c
      Stella Lau authored
      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
      2ca5653c
  3. 21 Aug, 2017 2 commits
    • Yedidya Feldblum's avatar
      exception_wrapper::from_exception_ptr · f372f154
      Yedidya Feldblum authored
      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
      f372f154
    • Phil Willoughby's avatar
      SynchronizedPtr · 4560ebca
      Phil Willoughby authored
      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
      4560ebca
  4. 19 Aug, 2017 1 commit
    • Xiangyu Bu's avatar
      Recommended cipher list for server side. · f2ddd0ef
      Xiangyu Bu authored
      Summary: A SSLOptions recommended for cipher use.
      
      Reviewed By: yfeldblum
      
      Differential Revision: D5614280
      
      fbshipit-source-id: a6b1adfa8d168f35c7bc7d4088c4073c3f4084a5
      f2ddd0ef
  5. 18 Aug, 2017 4 commits
  6. 17 Aug, 2017 6 commits
    • Stella Lau's avatar
      Fix undefined behavior when decoding varint · 322158b3
      Stella Lau authored
      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
      322158b3
    • Mingtao Yang's avatar
      Add getSSLContext() to AsyncSSLSocket · bf29c7e0
      Mingtao Yang authored
      Reviewed By: knekritz
      
      Differential Revision: D5632201
      
      fbshipit-source-id: 5db380379ab6cb608922c77dd716bfc4410b2cd8
      bf29c7e0
    • Neel Goyal's avatar
      Change AsyncSSLSocket getSecurityProtocol to handle unencrypted mode · 4ff438f8
      Neel Goyal authored
      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
      4ff438f8
    • Phil Willoughby's avatar
      Remove a use of SFINAE in the Range constructor. · 6078246a
      Phil Willoughby authored
      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
      6078246a
    • Philip Jameson's avatar
      Optionally run autoconf · 1eb414a3
      Philip Jameson authored
      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
      1eb414a3
    • Rushy Panchal's avatar
      Add prepareSkipTo() method to EliasFanoReader · 29c72a13
      Rushy Panchal authored
      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
      29c72a13
  7. 16 Aug, 2017 3 commits
    • Shu Zhang's avatar
      Add ConcurrentHashMap installable · 5dd29df0
      Shu Zhang authored
      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
      5dd29df0
    • Mirek Klimos's avatar
      folly::ElfFile - add support to iterate over program headers · fbc0b24a
      Mirek Klimos authored
      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
      fbc0b24a
    • Maged Michael's avatar
      Fix destruction order · 520148aa
      Maged Michael authored
      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
      520148aa
  8. 15 Aug, 2017 1 commit
  9. 14 Aug, 2017 3 commits
    • Peter DeLong's avatar
      Add hooks to track which threads belong to which thread pools · b32c4feb
      Peter DeLong authored
      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
      b32c4feb
    • Nick Wolchko's avatar
      allow comparing Optional<T> with none · 23de25b8
      Nick Wolchko authored
      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
      23de25b8
    • Xiangyu Bu's avatar
      AsyncSSLSocket::get/setClientCertValidationResult API. · 7289b921
      Xiangyu Bu authored
      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
      7289b921
  10. 10 Aug, 2017 1 commit
    • Nathan Bronson's avatar
      small_vector default constructor shouldn't be explicit · 3b856e50
      Nathan Bronson authored
      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
      3b856e50
  11. 09 Aug, 2017 4 commits
    • Nick Jiang's avatar
      fix sorted_vector_{set,map} bulk_insert deduplication · ae32b8a5
      Nick Jiang authored
      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
      ae32b8a5
    • Yedidya Feldblum's avatar
      Explicitly handle gcc in FOLLY_MAYBE_UNUSED · eb8f3c3c
      Yedidya Feldblum authored
      Summary:
      [Folly] Explicitly handle gcc in `FOLLY_MAYBE_UNUSED`.
      
      Fixes build break from {D5562220}.
      
      Reviewed By: Orvid
      
      Differential Revision: D5594288
      
      fbshipit-source-id: 5aa2dcb6133d53a0eb20d34b67c8e4407dd2b7ca
      eb8f3c3c
    • Yedidya Feldblum's avatar
      Cut unnecessary parens in IPAddress.h · 13f2e056
      Yedidya Feldblum authored
      Summary: [Folly] Cut unnecessary parens in `IPAddress.h`.
      
      Reviewed By: meyering
      
      Differential Revision: D5589756
      
      fbshipit-source-id: 6499e0db2aeb232356e2808fc59a35869b5dad0a
      13f2e056
    • Yedidya Feldblum's avatar
      Let IPAddressV4::bitCount and IPAddressV6::bitCount be constexpr · 9432d632
      Yedidya Feldblum authored
      Summary: [Folly] Let `IPAddressV4::bitCount` and `IPAddressV6::bitCount` be `constexpr`.
      
      Reviewed By: meyering
      
      Differential Revision: D5589954
      
      fbshipit-source-id: f4208efd62e71f47a7c87bdc8ddd421f93413c29
      9432d632
  12. 08 Aug, 2017 1 commit