1. 26 Jun, 2018 10 commits
    • Maged Michael's avatar
      hazptr: Detect frequent calls to hazptr_tc::fill · a71bd7f2
      Maged Michael authored
      Summary: Detect frequent calls to hazptr_tc::fill. This is usually indicative of unnecessary overhead, either due to insufficient thread cache capacity for legitimate use cases, or due to unnecessary allocation of extra hazard pointers in user code.
      
      Reviewed By: yfeldblum
      
      Differential Revision: D8606484
      
      fbshipit-source-id: e75223f8bc3e180a1ee651ee2989522d6b0a89df
      a71bd7f2
    • Aaryaman Sagar's avatar
      index_sequence_for_tuple · 3fa2e787
      Aaryaman Sagar authored
      Summary: A simple helper to construct an index sequence from a given tuple type
      
      Reviewed By: yfeldblum
      
      Differential Revision: D8626776
      
      fbshipit-source-id: a4ea412293981d58e91a921dcae8468849f5f0bf
      3fa2e787
    • Marc Celani's avatar
      Fix a build failure · 2826a4e8
      Marc Celani authored
      Summary: As title
      
      Reviewed By: elsteveogrande
      
      Differential Revision: D8643234
      
      fbshipit-source-id: 989cdc53ed071fd78a1eba4b2955eff7651274f1
      2826a4e8
    • Maged Michael's avatar
      ConcurrentHashMap: Make iterators not copyable · 8cb68e8d
      Maged Michael authored
      Summary: Disable unsafe iterator operations: copying and operator++ (because it copies the iterator). Copying is unsafe because starting to protect buckets and nodes after their removal is not guaranteed to be effective.
      
      Reviewed By: yfeldblum, djwatson
      
      Differential Revision: D8594743
      
      fbshipit-source-id: 0990d8fe979a3217db855641d23e24cc853a25bf
      8cb68e8d
    • Aaryaman Sagar's avatar
      Backport std::apply and remove folly::applyTuple · 23817ea8
      Aaryaman Sagar authored
      Summary:
      Add a backport of `std::apply` with a similar implementation that makes it easy
      to reason about.  Also implement `applyTuple` in terms of `apply`, `invoke` and
      `tuple_cat`
      
      The implementation of `apply` has been taken straight from the standard,
      reducing chances of churn in incompatible assumptions (if any).  Note that the
      definition and declaration of `apply` has been changed from the way it is
      specified in the standard for better SFINAE compatibility, if needed, will
      followup with a paper proposing the same change in the standard
      
      Reviewed By: spacedentist
      
      Differential Revision: D8248199
      
      fbshipit-source-id: e3e76193a30b1599eca3fe986a33f61addad7a59
      23817ea8
    • Aaryaman Sagar's avatar
      Leftover occurences of integral_constant<bool, ...> · f6f9d7ea
      Aaryaman Sagar authored
      Summary: title
      
      Reviewed By: yfeldblum
      
      Differential Revision: D8631916
      
      fbshipit-source-id: be4ef689b9c2b0dcdd92f8ea61787f70f9a71f9c
      f6f9d7ea
    • Nathan Bronson's avatar
      use vector intrinsics for F14 on 32-bit platforms · 27929e3d
      Nathan Bronson authored
      Summary:
      This diff adds 32-bit support for F14, so SSE and NEON
      intrinsics can be used on x86 and arm architectures (rather than just
      x86_64 and aarch64).  The portability fallback to std::unordered_map
      and std::unordered_set is now used only when vector intrinsics are not
      available, or on PPC.
      
      Reviewed By: shixiao
      
      Differential Revision: D8586283
      
      fbshipit-source-id: 1c4d090e80381fe7ad071c3059b3cb242c04c9f7
      27929e3d
    • Nathan Bronson's avatar
      helper methods for over-aligned allocation with C++ allocators · 3cb1c6d0
      Nathan Bronson authored
      Summary:
      This diff adds helper methods for allocating
      possibly-over-aligned types using C++ allocators.  It uses one of three
      strategies:
      
      * REBINDING - When there is a type that is not over-aligned with the
      requested alignment, the allocator is rebound to that a type with the
      correct alignment (this allows allocating 1 char with alignment 8,
      for example).
      
      * BYPASSING - When the requested alignment is larger than max_align_t
      but the standard allocator is in use, the allocator is bypassed and
      aligned_malloc/aligned_free are used directly to manage the allocation.
      
      * OVER-ALLOCATING - When the type is truly over-aligned and the allocator
      is custom, extra memory is requested and a delta is stored before the
      returned memory to allow the original base location to be recovered.
      
      Reviewed By: shixiao
      
      Differential Revision: D8592767
      
      fbshipit-source-id: 487b5ff7f7f6b1b29a3f2a80d07129afd50bda24
      3cb1c6d0
    • Maged Michael's avatar
      hazptr: Increase thread cache capacity · abef2f07
      Maged Michael authored
      Summary: Increase thread cache capacity from 3 to 6 hazard pointers to accommodate 2 ConcurrentHashMap iterators.
      
      Reviewed By: yfeldblum
      
      Differential Revision: D8595800
      
      fbshipit-source-id: 53275c3cf6fb11c976a4da987d79ec33b9e5e617
      abef2f07
    • Maged Michael's avatar
      ConcurrentHashMap: Make iterators movable · 1f6bf6c8
      Maged Michael authored
      Summary:
      To reduce unnecessary copying for user code handling ConstIterator-s.
      
      Added move test and change UpdateStressTest to use few concurrent iterators.
      
      Reviewed By: yfeldblum
      
      Differential Revision: D8587056
      
      fbshipit-source-id: d6b592a3aa40ca8a7599b258b45a1d339088c978
      1f6bf6c8
  2. 25 Jun, 2018 4 commits
    • Aaryaman Sagar's avatar
      Remove Synchronized::asConst · 3af92dbe
      Aaryaman Sagar authored
      Summary: `folly::as_const` instead
      
      Reviewed By: yfeldblum
      
      Differential Revision: D8248219
      
      fbshipit-source-id: 22853d86c93065ee584458f18b7cd0e8d528d2f0
      3af92dbe
    • Dan Melnic's avatar
      Faster thread local iteration using the ThreadEntryNode · fa32adfe
      Dan Melnic authored
      Summary: Faster thread local iteration using the ThreadEntryNode
      
      Reviewed By: djwatson
      
      Differential Revision: D8551597
      
      fbshipit-source-id: 9118852c0a823851a95b63fe807bfc2679112beb
      fa32adfe
    • Marshall Cline's avatar
      modernize Future::get(): 2/n = 'our' tests use only rvalue-get() · 0a1b8f18
      Marshall Cline authored
      Summary:
      Change the folly/future/... tests to use mainly[*] the rvalue-qualified versions of get() and get(dur).
      
      [*] Although the lvalue-qualified get is deprecated, it is not yet removed, so this diff leaves a test for the lvalue-qualified version. But the bulk of the tests are for the rvalue-qualified get.
      
      Reviewed By: yfeldblum
      
      Differential Revision: D8239792
      
      fbshipit-source-id: c8a2e90cb5ab97a59ec97994c8c6a6ca27dab86e
      0a1b8f18
    • Yedidya Feldblum's avatar
      Fix forwarding/moving in Futures reduce · 7a960981
      Yedidya Feldblum authored
      Summary: [Folly] Fix forwarding/moving in Futures `reduce`.
      
      Reviewed By: marshallcline
      
      Differential Revision: D8601105
      
      fbshipit-source-id: 96c1632821e9e5088a900ccecdaff9f8d108b905
      7a960981
  3. 24 Jun, 2018 2 commits
    • Andrii Grynenko's avatar
      Fix collectAllSemiFuture to work for SemiFutures with deferred work · 7a111f40
      Andrii Grynenko authored
      Summary: We have to extend DeferredExecutor to be aware of nested DeferredExecutor, so that it can propagate various signals to them.
      
      Reviewed By: LeeHowes
      
      Differential Revision: D8600961
      
      fbshipit-source-id: 2b9520598cad65bd80f0346e6f76e224903780a1
      7a111f40
    • Yedidya Feldblum's avatar
      Let Futures Barrier::ControlBlock ctor fully construct · 3bb85dae
      Yedidya Feldblum authored
      Summary:
      [Folly] Let Futures `Barrier::ControlBlock` ctor fully construct.
      
      Invoke the constructor when allocating the control block, rather than try to initialize each field afterward.
      
      Differential Revision: D8605292
      
      fbshipit-source-id: d51648a1267ed7e3e13d9a9e8d8e5d1c18e24a98
      3bb85dae
  4. 23 Jun, 2018 5 commits
    • Yedidya Feldblum's avatar
      Be explicit about memory orders in Futures · 01336b86
      Yedidya Feldblum authored
      Summary:
      [Folly] Be explicit about memory orders in Futures.
      
      This clarifies the basic purpose of each atomic variable - namely, whether it protects control flow (relaxed) v.s. state (typically acq/rel).
      
      Reviewed By: davidtgoldblatt
      
      Differential Revision: D8472791
      
      fbshipit-source-id: 350ec9b38d7c36cfb6d9ae9f1abf758b1f2e97ba
      01336b86
    • Andrii Grynenko's avatar
      Implement coro::Future<void>::toFuture() · dcbf6db1
      Andrii Grynenko authored
      Summary: When converting to folly::Future we have to perform the void -> folly::Unit conversion.
      
      Differential Revision: D8463177
      
      fbshipit-source-id: 96312d0447dfc381a0ee586030f21b9cdbf4bee4
      dcbf6db1
    • Yedidya Feldblum's avatar
      Fix Range with clang + opt builds + ASAN · 184dd587
      Yedidya Feldblum authored
      Summary: [Folly] Fix Range with clang + opt builds + ASAN, where functions marked with `__attribute__((__noinline__))` are getting inlined.
      
      Reviewed By: nbronson
      
      Differential Revision: D8597928
      
      fbshipit-source-id: c963feea270b9e28e118d196950b04d8457b9c66
      184dd587
    • Yedidya Feldblum's avatar
      Fix incorrect unaligned load in Range · 19a78f65
      Yedidya Feldblum authored
      Summary: [Folly] Fix incorrect unaligned load in `Range`.
      
      Reviewed By: santazhang
      
      Differential Revision: D8597638
      
      fbshipit-source-id: 2c8c0baa0c90fb7a7d5a24f84686d3993ae8455b
      19a78f65
    • Nathan Bronson's avatar
      software prefetching for F14Value iteration · 3bcbf9d9
      Nathan Bronson authored
      Summary:
      When moving from chunk i to i-1 in an F14{Value,Node}{Map,Set}
      iteration, this diff prefetches chunk i-2.  This code will never be run
      for small maps and sets, since they fit in a single chunk, and it does
      not affect the fast-path of intra-chunk operator++.
      
      Reviewed By: shixiao
      
      Differential Revision: D8395569
      
      fbshipit-source-id: 60cace5997222fd7d1fa03ffcee93f439f2fcf03
      3bcbf9d9
  5. 22 Jun, 2018 8 commits
    • Nick Terrell's avatar
      Support negative compression levels · 28a03e7e
      Nick Terrell authored
      Summary:
      Folly uses level [-1, -3] for the default/fastest/best compression levels.
      Introduce a `ZSTD_FAST` codec to use negative compression levels.
      
      Reviewed By: chipturner
      
      Differential Revision: D8529340
      
      fbshipit-source-id: 7fb7ff65f08d4dcab009c2eb073920b53055ed9b
      28a03e7e
    • Yedidya Feldblum's avatar
      One Core alias in Promise and Future · abc3bfdf
      Yedidya Feldblum authored
      Summary: [Folly] One `Core` alias in `Promise` and `Future`. Having two aliases was odd.
      
      Reviewed By: marshallcline
      
      Differential Revision: D8472386
      
      fbshipit-source-id: fb2241445e100927602faed9d89775534d06d10a
      abc3bfdf
    • Yedidya Feldblum's avatar
      Refactor non-variadic collect variants · a8990a74
      Yedidya Feldblum authored
      Summary:
      [Folly] Refactor non-variadic `collect` variants.
      
      No change in behavior - just moving code around.
      
      Reviewed By: marshallcline
      
      Differential Revision: D8440630
      
      fbshipit-source-id: a6349c73c2109237f1be174c2260e9c9eb2d1c0e
      a8990a74
    • Yedidya Feldblum's avatar
      Refactor variadic collect and collectAll · 698d1e78
      Yedidya Feldblum authored
      Summary:
      [Folly] Refactor variadic `collect` and `collectAll`.
      
      No change in behavior - just moving code around. Principally, moving related code closer together, such as moving helper context types into the functions which use them.
      
      Reviewed By: andriigrynenko
      
      Differential Revision: D8416843
      
      fbshipit-source-id: 3637c46c073191ae2dabc78cbaa145fe34cca220
      698d1e78
    • Dilip Joseph's avatar
      Revert D8304491: [folly] Use folly Hash to hash strings in dynamic · 007670a6
      Dilip Joseph authored
      Differential Revision:
      D8304491
      
      Original commit changeset: 9988e9012c31
      
      fbshipit-source-id: cc88b31cfb65e3dbc0a2b8f7fbcc565a28a796f9
      007670a6
    • Nathan Bronson's avatar
      fix test on 32-bit platforms · e96aa455
      Nathan Bronson authored
      Summary:
      Folly hasher for integers is avalanching on 32-bit platforms,
      which is properly handled by the associated traits.  This diff fixes
      the unit tests to match.
      
      Reviewed By: yfeldblum
      
      Differential Revision: D8584675
      
      fbshipit-source-id: 5895b2ad8d82afdef2bf277819bb6e3fff56d99a
      e96aa455
    • Yang Zhang's avatar
      add optional thread finalizer to InitThreadFactory · 5e03c4db
      Yang Zhang authored
      Summary: Optional thread finalizer can help do cleanup work before thread exit.
      
      Reviewed By: yfeldblum
      
      Differential Revision: D8576224
      
      fbshipit-source-id: b9ecd1b790b1935616fbe71c870dad82ec379b4e
      5e03c4db
    • Nathan Bronson's avatar
      uint64_t -> size_t for 32-bit support · fae10d94
      Nathan Bronson authored
      Summary:
      On 64-bit platforms uint64_t and std::size_t are the same
      size, but that is not the case on 32-bit platforms such as arm or x86.
      This diff makes folly/io 32-bit clean, at least to the point that it
      compiles and passes unit tests.  There is no change to behavior on
      64-bit platforms.
      
      Reviewed By: shixiao
      
      Differential Revision: D8559702
      
      fbshipit-source-id: c61a5d3d0e327f36cdf9a606a48a256943efc098
      fae10d94
  6. 21 Jun, 2018 7 commits
    • Nathan Bronson's avatar
      fix MemoryTest for platforms without constexpr std::max · 8fbd6d60
      Nathan Bronson authored
      Reviewed By: Orvid
      
      Differential Revision: D8577555
      
      fbshipit-source-id: 9fa46102f9acf17ab4cc5412c136df17eb8982c4
      8fbd6d60
    • Nathan Bronson's avatar
      fix MemoryTest for 32-bit platforms · 511a163f
      Nathan Bronson authored
      Summary: This diff makes folly/test/memoryTest pass on 32-bit platforms.
      
      Reviewed By: shixiao
      
      Differential Revision: D8559725
      
      fbshipit-source-id: 472c184a655c1330f71f9f594f8804bec23e4c60
      511a163f
    • Dan Melnic's avatar
      Add ThreadLocal::accessAllThreads benchmark · 8080bbbd
      Dan Melnic authored
      Summary: Add ThreadLocal::accessAllThreads benchmark
      
      Reviewed By: djwatson
      
      Differential Revision: D8555358
      
      fbshipit-source-id: 44da3830df96183158d3641fc4611c8e36364c00
      8080bbbd
    • Nathan Bronson's avatar
      clang-format folly/io subdir · 928ed23a
      Nathan Bronson authored
      Summary: Automated reformat of folly/io subdir in preparation for other changes
      
      Reviewed By: yfeldblum
      
      Differential Revision: D8559473
      
      fbshipit-source-id: c94d9c05ee77e25b6a61ee7a47b472ccea1f18f3
      928ed23a
    • Alex Wang's avatar
      Fix some `CMAKE_REQUIRED_FLAGS` stuff (#811) · 38589135
      Alex Wang authored
      Summary:
      This fixes two issues related to CMAKE_REQUIRED_FLAGS
      
      ----
      
      CMAKE_REQUIRED_FLAGS, unlike the other CMAKE_REQUIRED_* variables, is a
      string, not a list. A list with more than one item in
      CMAKE_REQUIRED_FLAGS results in a semicolon showing up in the middle of
      the command line for at least check_symbol_exists and check_type_size
      calls, prematurely terminating the compilation command and resulting in
      potentially incorrect CMake test failures.
      
      For example, CMake fails to determine the size of __int128 on macOS
      10.13.3, with Apple Clang 9 (clang-900.0.39.2), even though __int128 is
      supported for this platform, as the following C program
      
          int main() {
              __int128 i;
          }
      
      compiles successfully with the command "clang test.c". CMake fails to
      compile a program with __int128 for an entirely different reason:
      
          Building CXX object CMakeFiles/cmTC_d7e3f.dir/INT128_SIZE.cpp.o
          /Applications/Xcode.app/Contents/Developer/Toolchains/XcodeDefault.xctoolchain/usr/bin/c++  -DGFLAGS_IS_A_DLL=0 -isystem /usr/local/include -I/usr/local/opt/openssl@1.1/include  -fsanitize=address,undefined -std=gnu++14;-Werror=unknown-warning-option   -o CMakeFiles/cmTC_d7e3f.dir/INT128_SIZE.cpp.o -c /Users/awang/code/CRES/scc-analysis/build-debug/CMakeFiles/CheckTypeSize/INT128_SIZE.cpp
          clang: error: no input files
          /bin/sh: -Werror=unknown-warning-option: command not found
          make[1]: *** [CMakeFiles/cmTC_d7e3f.dir/INT128_SIZE.cpp.o] Error 127
          make: *** [cmTC_d7e3f/fast] Error 2
      
      Using set(CMAKE_REQUIRED_FLAGS "${CMAKE_REQUIRED_FLAGS} <new_flag>")
      avoids this problem.
      
      ----
      
      CMAKE_REQUIRED_FLAGS is given to both C and C++ compiler invocations.
      The C++-specific flag -std=gnu++14 causes compilation to fail on Apple
      LLVM 9.1.0 (clang-902.0.39.2) with errors along the lines of:
      
          Building C object CMakeFiles/cmTC_af532.dir/CheckSymbolExists.c.o
          /Applications/Xcode.app/Contents/Developer/Toolchains/XcodeDefault.xctoolchain/usr/bin/cc -DGFLAGS_IS_A_DLL=0 -isystem /usr/local/include -I/usr/local/opt/openssl@1.1/include  -std=gnu++14   -o CMakeFiles/cmTC_af532.dir/CheckSymbolExists.c.o   -c /Users/awang/code/CRES/scc-analysis/build-debug/CMakeFiles/CMakeTmp/CheckSymbolExists.c
          error: invalid argument '-std=gnu++14' not allowed with 'C/ObjC'
          make[1]: *** [CMakeFiles/cmTC_af532.dir/CheckSymbolExists.c.o] Error 1
          make: *** [cmTC_af532/fast] Error 2
      
      The affected functions are:
      
        - pthread_atfork
        - memrchr
        - preadv
        - pwritev
        - clock_gettime
        - cplus_demangle_v3_callback
        - malloc_usable_size
      
      Of these, only pthread_atfork and clock_gettime were detected as being
      absent when they were actually present.
      
      The failure to correctly identify the presence of pthread_atfork, at
      least, can cause Folly to fail to build on macOS because Folly requires
      pthread_atfork for macOS but thinks it is absent due to the failed test.
      Closes https://github.com/facebook/folly/pull/811
      
      Reviewed By: simpkins
      
      Differential Revision: D7502576
      
      Pulled By: yfeldblum
      
      fbshipit-source-id: a508e432e460cf5492e5c74da7c8b1190ec923a3
      38589135
    • Yedidya Feldblum's avatar
      constexpr_find_first_set, constexpr_find_last_set · 09d75f08
      Yedidya Feldblum authored
      Summary: [Folly] `constexpr_find_first_set`, `constexpr_find_last_set`; with an application into `F14Table`.
      
      Reviewed By: nbronson
      
      Differential Revision: D8529579
      
      fbshipit-source-id: 90d02215001abf1ffb3f04550eda22021263bbb1
      09d75f08
    • Yedidya Feldblum's avatar
      Fix narrowing conversion in folly::popcount · fd346480
      Yedidya Feldblum authored
      Summary: [Folly] Fix narrowing conversion in `folly::popcount`.
      
      Reviewed By: ot, nbronson
      
      Differential Revision: D8555467
      
      fbshipit-source-id: fdef83fc05e3e595087e7b8a3aba98400e5a954a
      fd346480
  7. 20 Jun, 2018 4 commits
    • Xiao Shi's avatar
      fix bugs in fallback F14 containers · 101ad63e
      Xiao Shi authored
      Summary:
      Previously, `visitContiguousRanges` for fallback F14 sets did not build and
      `visitAllocationClasses` was invoking the visitor with the wrong order.
      
      This diff fixes these bugs and moves the tests so that it'll get run regardless
      of whether vector intrinsics are available.
      
      Reviewed By: nbronson
      
      Differential Revision: D8542771
      
      fbshipit-source-id: 3aee3ab9e3278110ec8349bd9c858d19df779eb1
      101ad63e
    • Giuseppe Ottaviano's avatar
      Use folly Hash to hash strings in dynamic · b1a0a138
      Giuseppe Ottaviano authored
      Summary:
      There should be no expectations on what hash is internally
      used in dynamic, so we don't need to maintain compatibility with
      `FBString`, which hasn't been used as string storage in `dynamic` for
      quite a while.
      
      Reviewed By: yfeldblum
      
      Differential Revision: D8304491
      
      fbshipit-source-id: 9988e9012c31b894746488494dd644054492def3
      b1a0a138
    • Daniel Xu's avatar
      Appease gcc-8 warnings (#869) · 7a46e6ee
      Daniel Xu authored
      Summary:
      GCC 8 introduces a new `class-memaccess` warning. The compiler rightly complains about `memcpy`-ing a non-POD datatype even though we know it's ok. Casting to `void*` before `memcpy` silences the compiler warning.
      Closes https://github.com/facebook/folly/pull/869
      
      Reviewed By: simpkins
      
      Differential Revision: D8475831
      
      Pulled By: danobi
      
      fbshipit-source-id: c0f4eb9a653803cc912be1c6148f50ab71a8c6ab
      7a46e6ee
    • Nathan Bronson's avatar
      fewer random tests for TDigest · 3364a725
      Nathan Bronson authored
      Summary:
      The tdigest_test is sometimes timing out on the Travis CI build,
      perhaps because it runs the tests sequentially rather than in parallel
      as under buck.  This diff reduces the size of the random tests.  At the
      reduced size it was slightly exceeding the hard-coded expected accuracy
      bounds, so the diff also loosens those.
      
      This is a test-only change.
      
      Reviewed By: yfeldblum
      
      Differential Revision: D8548385
      
      fbshipit-source-id: f78aee6aa22d59b297c2aef757da1dc9e0831052
      3364a725