1. 28 Aug, 2017 3 commits
    • Christopher Dykes's avatar
      Enable auto-deps in all of Folly · 2ccbaf9e
      Christopher Dykes authored
      Summary: This enables the last of the magic internally.
      
      Reviewed By: yfeldblum
      
      Differential Revision: D5719795
      
      fbshipit-source-id: fb59a0d7873e9a9f3b73f556b42b647091ca7e67
      2ccbaf9e
    • Yedidya Feldblum's avatar
      Shrink MicroSpinLock.h transitive includes and inline methods · 053fb025
      Yedidya Feldblum authored
      Summary: [Folly] Shrink `MicroSpinLock.h` transitive includes and inline methods.
      
      Reviewed By: Orvid
      
      Differential Revision: D5714883
      
      fbshipit-source-id: 1744685ff9fa8d3620aef2545c8fe3ebc481df06
      053fb025
    • Patryk Zaryjewski's avatar
      Make cancelling and rescheduling of functions O(1) · 951a822c
      Patryk Zaryjewski authored
      Summary: Currently FunctionScheduler calls that cancel/restart timer for a function of particular id are O(n). By introducing hashmap that translate id to pointer of particular RepeatFunc, we make it O(1).
      
      Reviewed By: simpkins
      
      Differential Revision: D5668557
      
      fbshipit-source-id: e5e8bf9bd75b6d5d42f0bfa398d476703e5801fa
      951a822c
  2. 25 Aug, 2017 5 commits
    • Aaryaman Sagar's avatar
      gcc 6.2 was not accepting the current definition of void_t · db9fd491
      Aaryaman Sagar authored
      Summary:
      The current definition of void_t was leading to errors because unused
      template parameters are ignored and SFINAE SFIAEs
      
      Reviewed By: yfeldblum
      
      Differential Revision: D5700825
      
      fbshipit-source-id: d23336070c217e8594980d6db710cb417b014236
      db9fd491
    • Marko Novakovic's avatar
      Added a flag FOLLY_FORCE_EXCEPTION_COUNT_USE_STD · 04a42b09
      Marko Novakovic authored
      Summary:
      The flag FOLLY_FORCE_EXCEPTION_COUNT_USE_STD forces
      the usage of std:uncaught_exceptions() for folly's
      implementation of uncaught_exceptions()
      
      Reviewed By: yfeldblum
      
      Differential Revision: D5542302
      
      fbshipit-source-id: 2c2f507ab9dde916a160a9c370a267cdcfd7203a
      04a42b09
    • Stella Lau's avatar
      Enforce forward progress with StreamCodec · 91022bb0
      Stella Lau authored
      Summary:
      - Throw exception if no forward progress was made with `StreamCodec.compress()` and `StreamCodec.uncompress()`
      - Prevents infinite looping behavior when no forward progress was made
      - Update tests
      
      Reviewed By: terrelln
      
      Differential Revision: D5685690
      
      fbshipit-source-id: 969393896b74f51250f0e0ce3af0cd4fedcab49a
      91022bb0
    • Qinfan Wu's avatar
      Fix typo in Function.h · 82ee3be4
      Qinfan Wu authored
      Summary: [Folly] Fix typo in `Function.h`.
      
      Reviewed By: yfeldblum
      
      Differential Revision: D5703550
      
      fbshipit-source-id: 9dc09697fd09db6c65b1a4f2d8bdf44451b4aab2
      82ee3be4
    • Greg Nisbet's avatar
      add public kSlotSize to IndexedMemPool · 37c61971
      Greg Nisbet authored
      Summary:
      add public kSlotSize to IndexedMemPool,
      needed to support getting the approximate memory footprint of the pool
      (since a Slot has two atomic uint32_t's more than a bare Elem)
      
      Reviewed By: yfeldblum
      
      Differential Revision: D5690225
      
      fbshipit-source-id: 667da6b67b339038b92b0e5acde17219fe1c85c5
      37c61971
  3. 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
  4. 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
  5. 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
  6. 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
  7. 18 Aug, 2017 4 commits
  8. 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
  9. 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
  10. 15 Aug, 2017 1 commit
  11. 14 Aug, 2017 1 commit
    • 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