1. 05 Aug, 2018 1 commit
    • Joe Loser's avatar
      Remove MSVC workaround in ApplyTupleTest (#898) · d74fb5be
      Joe Loser authored
      Summary:
      Problem:
      - There was a bug in a much older version of MSVC relating to
        accessing functions in an anonymous namespace with the workaround
        being to have an extra anonymous namespace.
      
      Solution:
      - Remove the workaround as the MSVC versions that Folly now targets
        (MSVC 2015 and MSVC 2017) should not have this bug.
      Pull Request resolved: https://github.com/facebook/folly/pull/898
      
      Reviewed By: aary
      
      Differential Revision: D9176601
      
      Pulled By: yfeldblum
      
      fbshipit-source-id: 7db87d28f8968eb5b3ff9d9375777f997b060a59
      d74fb5be
  2. 04 Aug, 2018 1 commit
  3. 03 Aug, 2018 11 commits
    • Subodh Iyengar's avatar
      Add missing headers · b1fe4e39
      Subodh Iyengar authored
      Summary:
      Add some missing headers required for
      other oss projects.
      
      These were not synced to the makefile.
      
      Reviewed By: shixiao
      
      Differential Revision: D9161271
      
      fbshipit-source-id: 283042c35ac9f78fef24348e0d78b26ab8f2eeb8
      b1fe4e39
    • Nathan Bronson's avatar
      fix bad codegen by widening needle · cc5a8cf0
      Nathan Bronson authored
      Summary:
      On architectures with SSE2 but not AVX2, the _mm_set1_epi8
      intrinsic at the core of F14Table::findImpl expands to multiple
      instructions.  One of those is a MOVD of either 4 or 8 byte width.
      Only the bottom byte of that move actually affects the result, but
      if a 1-byte needle has been spilled then this will be a 4 byte load.
      GCC 5.5 has been observed to reload (or perhaps fuse a reload and a
      narrow) needle using a MOVZX with a 1 byte load in parallel to the MOVD.
      This combination causes a failure of store-to-load forwarding, which has
      a big performance penalty (60 nanoseconds per find on a microbenchmark).
      Keeping needle >= 4 bytes avoids the problem and also happens to result
      in slightly more compact code.
      
      Reviewed By: yfeldblum
      
      Differential Revision: D9149727
      
      fbshipit-source-id: 9e957207c23914da317e763eb944bf7dd43a5c51
      cc5a8cf0
    • yenshan98's avatar
      Wording nit in README.md (#894) · 794ea600
      yenshan98 authored
      Summary:
      Change "If advanced debugging functionality is required" to "If advanced debugging functionality is required, use:" for consistency in README.md and to be more reader friendly.
      Pull Request resolved: https://github.com/facebook/folly/pull/894
      
      Reviewed By: shixiao
      
      Differential Revision: D9094182
      
      Pulled By: yfeldblum
      
      fbshipit-source-id: 147d436aaee291104b67eab1e549554696740907
      794ea600
    • Matthieu Martin's avatar
      Use more efficient container in Request · c5f64daf
      Matthieu Martin authored
      Summary:
      Use folly Map14 for RequestData and boost flat_set for RequestData's callbacks.
      See code comment to explain the choice.
      
      Reviewed By: vipannalla
      
      Differential Revision: D9147805
      
      fbshipit-source-id: adc2d26a7a46c5b7381599ebf44d26fa07e9b775
      c5f64daf
    • Victor Zverovich's avatar
      Fix building of targets using f14_hash with modules · e42d9766
      Victor Zverovich authored
      Summary:
      This fixes building of targets such as `folly:dynamic` that contain `F14Map.h`
      includes with modules (`mode/dev-mod`). Previously they failed with the
      following error:
      
      ```
      folly/container/F14Map.h:37:10: error: use of private header from outside its
      module: 'folly/container/F14Map-pre.h' [-Wprivate-header]
               ^
      ```
      
      Reviewed By: shixiao
      
      Differential Revision: D9144188
      
      fbshipit-source-id: 0476f88ce2373c8b9fbf148a2e0532ff92b2477a
      e42d9766
    • Xiao Shi's avatar
      explicitly convert to `InternalSizeType` in F14 · e2db8003
      Xiao Shi authored
      Summary:
      For F14Vector containers, we assume that the size could fit in `uint32_t`,
      i.e., the `InternalSizeType`. This diff fixes where we implicitly convert
      (shorten) a `size_t` to `InternalSizeType`.
      
      Reviewed By: nbronson
      
      fbshipit-source-id: e970071dbde6394262a555facc8e2a24c6007f68
      e2db8003
    • Joe Loser's avatar
      Generalize include path for dwarf.h (#790) · e66fb34c
      Joe Loser authored
      Summary:
      Do not assume `dwarf.h` is contained within a subdirectory called `libdwarf` during CMake configure.
      
      See https://github.com/facebook/folly/issues/788 for more detailed info.
      Fixes: #788.
      Pull Request resolved: https://github.com/facebook/folly/pull/790
      
      Reviewed By: andrewjcg
      
      Differential Revision: D9094892
      
      Pulled By: yfeldblum
      
      fbshipit-source-id: 6b5faf000e5ff4f85b2b93e43d12a911eb05b5ab
      e66fb34c
    • Matthieu Martin's avatar
      Improve setContext efficiency · dcb5a31e
      Matthieu Martin authored
      Summary: Avoid exponential cost of find in unodered set
      
      Reviewed By: yfeldblum, shubhanshu04
      
      Differential Revision: D9145024
      
      fbshipit-source-id: e7949e967e078a8857962893581495d03e01f989
      dcb5a31e
    • Xiao Shi's avatar
      Back out "[folly] use heterogeneous lookup and mutation in folly::dynamic" and... · 41431d75
      Xiao Shi authored
      Back out "[folly] use heterogeneous lookup and mutation in folly::dynamic" and "[folly] use F14NodeMap in folly::dynamic"
      
      Summary:
      D8299863 and D8299800
      
      Mostly backing out for xplat autoupdater. The TARGETS / DEFS got scrambled.
      
      Differential Revision: D9139265
      
      fbshipit-source-id: 78b0238370d4de4fdc363d0867dc46de3a572f58
      41431d75
    • Matthieu Martin's avatar
      Nit simplify setContext · 5f195e92
      Matthieu Martin authored
      Summary: I keep modifying this code, and I keep feeling like it would be more readable without std::swap. Thoughts?
      
      Reviewed By: yfeldblum
      
      Differential Revision: D9140662
      
      fbshipit-source-id: a86862dbfd1c0caeb69cc66b215994a3d1dd0294
      5f195e92
    • Dan Melnic's avatar
      Add the new GSO related methods to MockAsyncUDPSocket · 3e915e8b
      Dan Melnic authored
      Summary: Add the new GSO related methods to MockAsyncUDPSocket
      
      Reviewed By: yfeldblum
      
      Differential Revision: D9136190
      
      fbshipit-source-id: 5a2173caae8ac21fbb7532c21f9f6f7aaf227ce3
      3e915e8b
  4. 02 Aug, 2018 9 commits
    • Xiao Shi's avatar
      work around (fixed) libstdc++ bug for heterogeneous mutation · aebe18a7
      Xiao Shi authored
      Summary:
      N4387 lifted the restrictions on `pair` and `tuple` construction that the
      element types must be implicitly convertible to the target element types. Prior
      to GCC 6, this document was not implemented in libstdc++. There are other
      subsequent fixes to address LWG2367, for exmaple.
      
      The upstream implementation for N4387 is here:
      https://github.com/gcc-mirror/gcc/commit/d3c64041b32b6962ad6b2d879231537a477631fb
      
      This diff adds the `insert` overloads to work around these issues as well as
      test coverage.
      
      Note that the following overload still wouldn't work:
        m.insert({sp, x})
      since the compiler is not able to deduce the element types without attempting
      to construct a `pair`.
      
      Reviewed By: yfeldblum, nbronson
      
      Differential Revision: D9117504
      
      fbshipit-source-id: c6fae625bf4d9518cb2b4bcc76465b004c4cd253
      aebe18a7
    • Joe Loser's avatar
      IP_RECVERR is not defined on Mac (#899) · a62ff6ec
      Joe Loser authored
      Summary:
      Problem:
      - `IP_RECVERR` symbol is not defined on Mac OS.
      - A test expects this symbol to be found. But, in the case on Mac OS, the symbol is not found and hence will cause a hard compiler error.
      
      Solution:
      - `ifdef` the portion of the test that is relying on this symbol.
      Pull Request resolved: https://github.com/facebook/folly/pull/899
      
      Differential Revision: D9140373
      
      Pulled By: yfeldblum
      
      fbshipit-source-id: 127ab352cea790194171376ac809c23249883251
      a62ff6ec
    • Matthieu Martin's avatar
      Test Ensure unset called before set · e1b05e78
      Matthieu Martin authored
      Summary: This is a unittest for an issue I fixed previously (but had to land ASAP).
      
      Reviewed By: yfeldblum
      
      Differential Revision: D9140622
      
      fbshipit-source-id: 09dcb4206d2a09a57c2f2239a1aa217b124e88fd
      e1b05e78
    • Matthieu Martin's avatar
      Ensure unset called before set · 075ca921
      Matthieu Martin authored
      Summary: Some of the RequestData's instances share same thread-local, and rely on strict ordering of unset/set
      
      Reviewed By: djwatson
      
      Differential Revision: D9138483
      
      fbshipit-source-id: fba59a7f5619d54ed21d71a40fb2cc6ce0e93797
      075ca921
    • Dan Melnic's avatar
      Disable GSO if FOLLY_HAVE_MSG_ERRQUEUE is not defined · cf00ac58
      Dan Melnic authored
      Summary: Disable GSO if FOLLY_HAVE_MSG_ERRQUEUE is not defined
      
      Reviewed By: yfeldblum
      
      Differential Revision: D9128837
      
      fbshipit-source-id: 25977eb7f46ac57dca17c7956277f9f647357baa
      cf00ac58
    • Xiao Shi's avatar
      use heterogeneous lookup and mutation in folly::dynamic · 0e2c4290
      Xiao Shi authored
      Summary:
      This diff allows `folly::dynamic` to lookup and mutate using any type that is
      convertible to `StringPiece` (i.e., `const char*`, `std::string`, `fbstring`)
      without having to construct a `dynamic` object (which requires copying the
      string).
      
      Currently dynamic string types uses fnv32 hash, which is OK since F14 is going
      to do a mixing step anyway; we are changing this in D8304491.
      
      Reviewed By: yfeldblum
      
      Differential Revision: D8299863
      
      fbshipit-source-id: a154bfe8f17e1d83968cdc1755ec54b6eed4299e
      0e2c4290
    • Xiao Shi's avatar
      use F14NodeMap in folly::dynamic · c150d3e6
      Xiao Shi authored
      Summary:
      F14NodeMap is a safe drop-in replacement for std::unordered_map. It is smaller
      than std::unordered_map (32 bytes instead of 56 bytes) and has been shown
      to be faster in many production use cases. This diff replaces the hash table
      inside folly::dynamic. The effect is that sizeof(folly::dynamic) will drop from 64
      bytes to 40 bytes, and use cases that use folly::dynamic as an object may also
      get a CPU win.
      
      Reviewed By: nbronson
      
      Differential Revision: D8299800
      
      fbshipit-source-id: abd0b034537c95f2ccbdf78fe5ae8fe9157f32ac
      c150d3e6
    • Matthieu Martin's avatar
      Avoid unecessary RequestContext swap in FiberManager · c73368f4
      Matthieu Martin authored
      Summary:
      In my use case, at least, it's very likely that most Fibers are sharing the same RequestContext.
      This could save a lot of onSet/onUnset calls.
      Unsafe?
      
      Reviewed By: andriigrynenko
      
      Differential Revision: D9115679
      
      fbshipit-source-id: 216208dff509c61b9f20f324c3e648ec79ebbaf7
      c73368f4
    • Qingpeng Niu's avatar
      Public method to get maxSize for TDigest · f40a4d88
      Qingpeng Niu authored
      Summary: Public method to get `maxSize` for `TDigest`.
      
      Reviewed By: yfeldblum
      
      Differential Revision: D9124932
      
      fbshipit-source-id: 1effab8900c3007f6a92d9d6c1d83189746f4ac6
      f40a4d88
  5. 01 Aug, 2018 4 commits
    • Matthieu Martin's avatar
      Merge setContext and unsetShallowCopyContext · 6b3a5109
      Matthieu Martin authored
      Summary:
      There is no reason for setContext to call set/unset when both request context holds identical data.
      So merge unsetShallowCopyContext implementation there.
      
      Reviewed By: djwatson
      
      Differential Revision: D9119718
      
      fbshipit-source-id: 7b9c6badbfb29416b6b0032467984720b697a1e8
      6b3a5109
    • Matthieu Martin's avatar
      Don't shallow copy default request context · a26a1a9e
      Matthieu Martin authored
      Summary:
      This is to be consistent with setContext, which doesn't call set/unset of the default context.
      Main goal is to merge code in next diff.
      
      I think the default context is never relevant, and should only be the current context in the internal of the async framework, in between executing coroutines.
      We should probably enforce that request data is never set in the default context to guarantee correctness.
      
      Reviewed By: djwatson
      
      Differential Revision: D9119717
      
      fbshipit-source-id: 8fa07520d506c02663f58f7616f1f390645997bc
      a26a1a9e
    • Matthieu Martin's avatar
      Fix shallow copy segfault · 98fef9ad
      Matthieu Martin authored
      Summary: Mishandling of parent end boundary.
      
      Reviewed By: djwatson
      
      Differential Revision: D9119716
      
      fbshipit-source-id: c186e5acffdedc77577e1ab3a7b5876a6423e0f4
      98fef9ad
    • Joe Loser's avatar
      Replace boost::next with std::next (#896) · 4875d385
      Joe Loser authored
      Summary:
      - Replace uses of `boost::next` with `std::next`.
      - Replace uses of `boost::prior` with `std::prev`.
      Pull Request resolved: https://github.com/facebook/folly/pull/896
      
      Reviewed By: ot
      
      Differential Revision: D9114372
      
      Pulled By: yfeldblum
      
      fbshipit-source-id: 4b15b81ffb43dee00b64c4abc171747a95ceb6b7
      4875d385
  6. 31 Jul, 2018 5 commits
    • Marshall Cline's avatar
      improve compile-time errmsg for f.get() · ac96eb79
      Marshall Cline authored
      Summary:
      We have seen some caller-confusion after removing the lvalue-qualified Future::get().
      
      Goal of this is to improve/clarify the compile-time error-msg for `future.get()`.
      
      The resulting error-messages are compiler-dependent, but generally they are more explicit, indicating an explicit deletion of the lvalue-qualified method, and in some cases also displaying the deprecation-message:
      
      * Clang:
        * old: 'this' argument to member function 'get' is an lvalue, but function has rvalue ref-qualifier
        * new: call to deleted member function 'get': must be rvalue-qualified, e.g., std::move(future).get()
      * gcc:
        * old: error: passing 'Future<int>' as 'this' argument discards qualifiers [-fpermissive]
        * new: use of deleted function 'T Future<T>::get() & [with T = int]'
      * MS VC:
        * old: 'int Future<int>::get(void) &&': cannot convert 'this' pointer from 'Future<int>' to 'Future<int> &&'
        * new: 'int Future<int>::get(void) &': attempting to reference a deleted function
      * icc:
        * old: function "Future<T>::get [with T=int]" (declared at line 6) cannot be called on an lvalue
        * new: function "Future<T>::get() & [with T=int]" (declared at line 9) was declared deprecated ("must be rvalue-qualified, e.g., std::move(future).get()")
      
      Reviewed By: yfeldblum
      
      Differential Revision: D9071064
      
      fbshipit-source-id: a40712ce94fd10bc153cb74a7d6d6a0539e07a15
      ac96eb79
    • Yedidya Feldblum's avatar
      Use C++ v.s. PP to handle libcpp in dynamic ctor · 359eb495
      Yedidya Feldblum authored
      Summary: [Folly] Use C++ v.s. PP to handle libcpp in `dynamic` ctor taking `std::vector<bool>::const_reference`.
      
      Reviewed By: shixiao
      
      Differential Revision: D9027115
      
      fbshipit-source-id: 94de4260d1d40ac450c37d3803994d436adcf06e
      359eb495
    • Yedidya Feldblum's avatar
      Mark std::list as not relocatable · b3aee940
      Yedidya Feldblum authored
      Summary:
      [Folly] Mark `std::list` as not relocatable.
      
      From the github issue (facebook/folly#889), `std::list` allocated storage may hold back-pointers to the owning `std::list` object in both libstdc++ and libc++.
      
      The relocatability marking dates to 2011 or earlier; perhaps it applied then.
      
      Closes #889.
      
      Reviewed By: nbronson
      
      Differential Revision: D9043357
      
      fbshipit-source-id: bf954e74f36f554bfbb2e5bb5ac40b933a749003
      b3aee940
    • Marshall Cline's avatar
      fix contract nits (non-functional; comment-only) · 28f37dc5
      Marshall Cline authored
      Summary: Fix a few nits in the contracts/specification
      
      Reviewed By: yfeldblum
      
      Differential Revision: D8962060
      
      fbshipit-source-id: 8344403d3e26a01bef02deee3bb964fbaf6a1591
      28f37dc5
    • Tingzhe Zhou's avatar
      Concurrent Priority Queue: Fast and Scalable · 148e1b8f
      Tingzhe Zhou authored
      Summary:
      This is the implementation of the unbounded concurrent priority queue based on Mound.
       - The data structure supports push, pop, size and empty operations.  [TODO: timed pop]
       - User can select whether it is the strict priority queue (PopBatch = 0), or relaxed implementation (PopBatch > 0).
       - Supports blocking.
      
      Reviewed By: magedm
      
      Differential Revision: D9028417
      
      fbshipit-source-id: e12dc43aef4fb5b1195d9e27807cbd9f0ad1a401
      148e1b8f
  7. 30 Jul, 2018 2 commits
    • Yedidya Feldblum's avatar
      Use brace-initialization for folly::none · 8daf15ad
      Yedidya Feldblum authored
      Summary:
      [Folly] Use brace-initialization for `folly::none`.
      
      Will help with future work.
      
      Reviewed By: shixiao
      
      Differential Revision: D9039671
      
      fbshipit-source-id: fc34041bc040332540ed3e9dfd7ab452e82ca47f
      8daf15ad
    • Dan Melnic's avatar
      Adding UDP generic segmentation offload support · 9af8f2be
      Dan Melnic authored
      Summary: Adding UDP generic segmentation offload support
      
      Reviewed By: siyengar
      
      Differential Revision: D8825396
      
      fbshipit-source-id: 5974307c2a901f4967e6f1c678b604ec1c21b3d0
      9af8f2be
  8. 29 Jul, 2018 2 commits
  9. 28 Jul, 2018 1 commit
    • Phil Willoughby's avatar
      thread safe errno->string · 5ae9ed9e
      Phil Willoughby authored
      Summary: `strerror` isn't thread safe, `folly::errnoStr` is.
      
      Reviewed By: yfeldblum
      
      Differential Revision: D9036249
      
      fbshipit-source-id: da4ad1089f4319e62b0273ec12b4950624105a77
      5ae9ed9e
  10. 27 Jul, 2018 3 commits
    • Yedidya Feldblum's avatar
      Fix fbvector::swap impl · c3440ba2
      Yedidya Feldblum authored
      Summary:
      [Folly] Fix `fbvector::swap` impl to do proper ADL.
      
      Instead of passing template parameters, cast the arguments. That way non-template `swap` overloads can also be found.
      
      Reviewed By: Gownta
      
      Differential Revision: D9026136
      
      fbshipit-source-id: 29240fed1c90d3556c2476917a21cbe1949c9a3c
      c3440ba2
    • Mahesh Maddikayala's avatar
      fix travis build failure for 'sigar' package · 7acadf6e
      Mahesh Maddikayala authored
      Summary: Added option to send parameters to 'configure' script from fbcode builder
      
      Reviewed By: jstrizich
      
      Differential Revision: D9004547
      
      fbshipit-source-id: da54fa2dd453aab29051f37106423807a260535a
      7acadf6e
    • Yedidya Feldblum's avatar
      Tweaks to Futures after D9015012 · ff3c5f9c
      Yedidya Feldblum authored
      Summary:
      [Folly] Tweaks to Futures after {D9015012}.
      
      * Publish base-class methods with `using`.
      * Use trailing-comma in list initializers.
      
      Reviewed By: shixiao
      
      Differential Revision: D9024885
      
      fbshipit-source-id: d1e548630152a7d7ce892084daef24a4e62dd0df
      ff3c5f9c
  11. 26 Jul, 2018 1 commit
    • Pedro Eugenio Rocha Pedreira's avatar
      Propagate executor priority through FutureSplitter · a31665e0
      Pedro Eugenio Rocha Pedreira authored
      Summary:
      The futures created by FutureSplitter don't carry the orginal future's
      executor priority, what makes it hard to guarantee that certain operations
      based on a future chain run on a determined executor priority.
      
      Reviewed By: WillerZ
      
      Differential Revision: D9015012
      
      fbshipit-source-id: 96b7e7ccb33583105f96d2170eeb159493b93ed0
      a31665e0