1. 24 Aug, 2017 1 commit
    • 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 2 commits
    • Yedidya Feldblum's avatar
      Apply clang-format to folly/**/*Address*.* · 0b856bd5
      Yedidya Feldblum authored
      Summary: [Folly] Apply `clang-format` to `folly/**/*Address*.*`.
      
      Reviewed By: Orvid
      
      Differential Revision: D5581523
      
      fbshipit-source-id: 97b5270e43e279e7deb9606524d5fee844a50649
      0b856bd5
    • Phil Willoughby's avatar
      Add a UDL suffix to define a StringPiece · d44f36ab
      Phil Willoughby authored
      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
      d44f36ab
  13. 07 Aug, 2017 1 commit
    • Sargun Vohra's avatar
      Don't allow Future::onError([](exception_wrapper&){}) to compile · 148df69f
      Sargun Vohra authored
      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
      148df69f
  14. 06 Aug, 2017 2 commits
    • Yedidya Feldblum's avatar
      Consistent use of sformat in address-related files · d7d34a09
      Yedidya Feldblum authored
      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
      d7d34a09
    • Yedidya Feldblum's avatar
      Apply clang-format to folly/**/*Range*.* · fc10d0b8
      Yedidya Feldblum authored
      Summary: [Folly] Apply `clang-format` to `folly/**/*Range*.*`.
      
      Reviewed By: meyering
      
      Differential Revision: D5570553
      
      fbshipit-source-id: 230aa8557c2d402d741aaa541f96f4634dd13d3b
      fc10d0b8
  15. 04 Aug, 2017 3 commits
    • Xiangyu Bu's avatar
      Test server-side getPeerCert(). · e4c892c7
      Xiangyu Bu authored
      Summary: Make sure server can get client cert using AsyncSSLSocket::getPeerCert() call.
      
      Reviewed By: anirudhvr
      
      Differential Revision: D5557303
      
      fbshipit-source-id: d95696f592e3b3f67acba9f92add32b91c29a000
      e4c892c7
    • Xiangyu Bu's avatar
      Clang-format AsyncSSLSocketTest.cpp. · b6a67aee
      Xiangyu Bu authored
      Summary: ... as titled.
      
      Reviewed By: yfeldblum
      
      Differential Revision: D5558742
      
      fbshipit-source-id: b63b121cde8db93de4cabc80563539297611d600
      b6a67aee
    • Marko Novakovic's avatar
      Replacing instances of __CLANG__ with __clang__ · 647dba2f
      Marko Novakovic authored
      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
      647dba2f
  16. 03 Aug, 2017 1 commit
    • Alex Guzman's avatar
      Add X509_EXTENSION unique pointer · d0f5d850
      Alex Guzman authored
      Summary: Adds unique pointer type for X509_EXTENSION
      
      Reviewed By: knekritz
      
      Differential Revision: D5556504
      
      fbshipit-source-id: b84190f20dd0a2ee9f5f07f197caf53a9a063af7
      d0f5d850