1. 02 Oct, 2017 1 commit
    • Yedidya Feldblum's avatar
      Move Merge.h into folly/algorithm/ · 1b0dfd66
      Yedidya Feldblum authored
      Summary: [Folly] Move `Merge.h` into `folly/algorithm/`.
      
      Reviewed By: Orvid
      
      Differential Revision: D5951346
      
      fbshipit-source-id: 487203e55e2a44888e599ca22849798154e5b386
      1b0dfd66
  2. 01 Oct, 2017 1 commit
    • Maged Michael's avatar
      Optimize local and bulk management of hazptr_holder-s · bf4d5370
      Maged Michael authored
      Summary:
      Changes:
      - Added hazptr_local<M> for optimized management of local hazptr_holder-s.
      - Added hazptr_array<M> for optimized management of hazptr_holder-s
      - Added benchmarks for hazptr_local and hazptr_array
      - Added tests for hazptr_local and hazptr_array
      - Changed SWMRList example to use hazptr_local<2> instead of two hazptr_holder-s.
      - Updated benchmark performance results.
      
      Reviewed By: davidtgoldblatt
      
      Differential Revision: D5833721
      
      fbshipit-source-id: 154811f67c38abac7342cecb71f829778ccf76b2
      bf4d5370
  3. 29 Sep, 2017 2 commits
  4. 27 Sep, 2017 2 commits
    • Kyle Nekritz's avatar
      Add AsyncSocketExceptionType for early data rejection. · 79869083
      Kyle Nekritz authored
      Summary: To be used to signal that data that was sent as TLS 1.3 early data was lost. This needs its own exception type as it requires special handling (ie it should usually be retried immediately).
      
      Reviewed By: siyengar
      
      Differential Revision: D5869914
      
      fbshipit-source-id: ca0d8ef19cb991e9d6ffe0f8c99abfb03b748ce6
      79869083
    • Mohamed Amin JABRI's avatar
      Fix unittest compile error on futures/test/RetryingTest.cpp. · b83cd9e3
      Mohamed Amin JABRI authored
      Summary:
      On MacOS compiling unittests with "make chek" shows the following compile
      error:
      ```
      ../futures/test/RetryingTest.cpp:168:26: error: no matching function for call to 'min'
       newMemLimit.rlim_cur = std::min(1UL << 30, oldMemLimit.rlim_max);
      ```
      Closes https://github.com/facebook/folly/pull/680
      
      Reviewed By: elsteveogrande
      
      Differential Revision: D5921433
      
      Pulled By: yfeldblum
      
      fbshipit-source-id: 236d8336f852750a983c2e268db8811d1a4ed9ee
      b83cd9e3
  5. 26 Sep, 2017 1 commit
    • Michael Lee's avatar
      Delete conversion from Objective-C block to folly::Function · b6845258
      Michael Lee authored
      Summary: Objective-C blocks are stack allocated, and unless there is a proper assignment it isn't retained and the memory is freed. Because folly::Function used to move, it would hold a reference, but after switch to a constructor by-value, it no longer does this and we see a use-after-free.
      
      Reviewed By: yfeldblum, ericniebler
      
      Differential Revision: D5888606
      
      fbshipit-source-id: fe4cabb2f2ae289cce0e7429e0af3935ba314720
      b6845258
  6. 24 Sep, 2017 1 commit
    • Yedidya Feldblum's avatar
      Let ProcessReturnCode be publicly constructible · 4af3040b
      Yedidya Feldblum authored
      Summary:
      [Folly] Let `ProcessReturnCode` be publicly constructible.
      
      Via provided constructor functions, which limit how it may be constructed so that it is only constructible into a valid state.
      
      Differential Revision: D5898739
      
      fbshipit-source-id: 7490018adfc39408b4290248ef1220e8fd0238cb
      4af3040b
  7. 23 Sep, 2017 2 commits
    • Yedidya Feldblum's avatar
      Avoid tautological compare in folly/experimental/symbolizer/ · 91da2e5a
      Yedidya Feldblum authored
      Summary:
      [Folly] Avoid tautological compare in `folly/experimental/symbolizer/`.
      
      `x < 0` when `x` is unsigned is tautological and there are warnings against such comparisons. The underlying type of an unscoped enumerations without a fixed underlying type is not specified, and whether it is signed is also not specified; it could be unsigned, and is unsigned in practice in common cases.
      
      Reviewed By: Orvid, eduardo-elizondo
      
      Differential Revision: D5897792
      
      fbshipit-source-id: 24d84f9bf2c61c907585e1b675c2bbf11ef1720b
      91da2e5a
    • Matthew Tolton's avatar
      Fix deadlock in TimedMutex · 47d37c8e
      Matthew Tolton authored
      Summary:
      If a lock is stolen from fiber f1, and then fiber f2 is notified before f1 one
      wakes up and discovers the crime, then f1 will clear notifiedFiber_ so that f2
      thinks the lock was stolen from it as well and hence recurses back into lock().
      
      Reviewed By: andriigrynenko
      
      Differential Revision: D5896323
      
      fbshipit-source-id: 528ec1ed983175d3e08f3dc07b69bbc783a86cfb
      47d37c8e
  8. 22 Sep, 2017 1 commit
    • Nathan Bronson's avatar
      fix ASAN stl_tests:stl_vector_test · aee7113e
      Nathan Bronson authored
      Summary:
      folly/test/stl_tests/StlVectorTest.cpp was too slow under
      mode/dev-asan, resulting in timeouts, and the relinquish test allocated
      with malloc and freed with operator delete.  This diff reduces the vector
      size for testing under ASAN, and fixes the allocation mismatch.
      
      Reviewed By: Orvid
      
      Differential Revision: D5890969
      
      fbshipit-source-id: 49a9498f6c0c4b3c7165906efd1262e518fea810
      aee7113e
  9. 21 Sep, 2017 1 commit
  10. 20 Sep, 2017 1 commit
    • Kenny Yu's avatar
      Add gdb deadlock detector script to new folly/experimental/gdb directory · 14e3d271
      Kenny Yu authored
      Summary:
      This adds a gdb deadlock detector script into a new directory in folly. I
      chose to put it under the `experimental` directory and not the top-level
      directory as we have only tested these scripts on x86_64 Linux and not other
      types of platforms.
      
      This diff includes:
      - a README on the contents of this directory and how to use the scripts
      - a script to detect deadlocks
      
      gdb directory
      ---------------
      
      This new directory will contain a collection of gdb scripts that we have
      found helpful. These scripts use the [gdb extension Python API](https://sourceware.org/gdb/current/onlinedocs/gdb/Python.html#Python).
      
      To run the scripts, fire up gdb and load a script with `source -v`. Example:
      
      ```
      $ gdb -p 123456
      (gdb) source -v ./folly/experimental/gdb/deadlock.py
      Type "deadlock" to detect deadlocks.
      (gdb) deadlock
      Found deadlock!
      ...
      ```
      
      deadlock detector script
      ----------------------------
      
      Consider the following program that always deadlocks:
      
      ```
      void deadlock3() {
        std::mutex m1, m2, m3;
        folly::Baton<> b1, b2, b3;
      
        auto t1 = std::thread([&m1, &m2, &b1, &b2] {
          std::lock_guard<std::mutex> g1(m1);
          b1.post();
          b2.wait();
          std::lock_guard<std::mutex> g2(m2);
        });
      
        auto t2 = std::thread([&m3, &m2, &b3, &b2] {
          std::lock_guard<std::mutex> g2(m2);
          b2.post();
          b3.wait();
          std::lock_guard<std::mutex> g3(m3);
        });
      
        auto t3 = std::thread([&m3, &m1, &b3, &b1] {
          std::lock_guard<std::mutex> g3(m3);
          b3.post();
          b1.wait();
          std::lock_guard<std::mutex> g1(m1);
        });
      
        t1.join();
        t2.join();
        t3.join();
      }
      ```
      
      Once the process has deadlocked, we can use gdb to find the threads and mutexes involved in the deadlock:
      
      ```
      $ gdb -p 2174496
      (gdb) source -v ./folly/experimental/gdb/deadlock.py
      Type "deadlock" to detect deadlocks.
      (gdb) deadlock
      Found deadlock!
      Thread 2 (LWP 2174497) is waiting on mutex (0x00007ffcff42a4c0) held by Thread 3 (LWP 2174498)
      Thread 3 (LWP 2174498) is waiting on mutex (0x00007ffcff42a4f0) held by Thread 4 (LWP 2174499)
      Thread 4 (LWP 2174499) is waiting on mutex (0x00007ffcff42a490) held by Thread 2 (LWP 2174497)
      ```
      
      Reviewed By: yfeldblum
      
      Differential Revision: D5860868
      
      fbshipit-source-id: 020a32327a79bb066269fe08113695803ce06c7d
      14e3d271
  11. 19 Sep, 2017 4 commits
    • Phil Willoughby's avatar
      Benchmark a realistic common use · 3619b401
      Phil Willoughby authored
      Summary:
      We didn't previously benchmark the performance of `get()`, which was a strange
      omission.
      
      Reviewed By: akrieger
      
      Differential Revision: D5863567
      
      fbshipit-source-id: 468b249da9120fcb84f3303ac5e2157761b6369d
      3619b401
    • Christopher Dykes's avatar
      Enable -Wunused-variables · 94b8816b
      Christopher Dykes authored
      Summary:
      Only for clang for the moment, as more work is needed for GCC.
      MSVC builds have always had unused variable warnings enabled, I just hadn't gotten around to cleaning up all of the tests for it to be able to enable it.
      
      Reviewed By: yfeldblum
      
      Differential Revision: D5827840
      
      fbshipit-source-id: ab503b5791fcc58d685b8327179b810880c5dea7
      94b8816b
    • Christopher Dykes's avatar
      Fix hardware crc32 under MSVC · f3bce424
      Christopher Dykes authored
      Summary: It was horribly broken in multiple ways. It didn't support input > 4gb on Windows, was truncating the entire table to chars, and simply couldn't be compiled because it was exceeding MSVC's max macro instantion depth of 255.
      
      Reviewed By: yfeldblum
      
      Differential Revision: D5827332
      
      fbshipit-source-id: b08268c88db10c607b27231689b3ee3ec7553c1f
      f3bce424
    • Christopher Dykes's avatar
      Set names in NamedThreadFactory in the new thread · aa62e6f3
      Christopher Dykes authored
      Summary: This makes it now both work, and compile, on Windows.
      
      Reviewed By: yfeldblum
      
      Differential Revision: D5811100
      
      fbshipit-source-id: 5d6bfc04ed8e60417615da15bd197769e0c79c11
      aa62e6f3
  12. 18 Sep, 2017 1 commit
    • Eric Niebler's avatar
      fix strange recursive std::is_constructible instantiation involving the... · d3e97eba
      Eric Niebler authored
      fix strange recursive std::is_constructible instantiation involving the Function converting constructor
      
      Summary: In rare and obscure cases, the fact that `folly::Function`'s perfectly-forwarding, implicit converting constructor was SFINAE-ing on the argument's constructibility was causing a recursive template instantiation of std::is_constructible. Switch to passing the argument by value to avoid the need to test for constructibility.
      
      Reviewed By: yfeldblum
      
      Differential Revision: D5847034
      
      fbshipit-source-id: ce2ad1d2490206c6cae84c17544bd9fcd6ff47bb
      d3e97eba
  13. 15 Sep, 2017 4 commits
    • Eric Niebler's avatar
      Fix coroutine feature test macro on MSVC · 27197728
      Eric Niebler authored
      Summary: Coroutines are only available on MSVC when the /await compiler switch was passed, in which case the `_RESUMABLE_FUNCTIONS_SUPPORTED` macro is defined.
      
      Reviewed By: Orvid
      
      Differential Revision: D5837303
      
      fbshipit-source-id: af3349646e8875e3eac1bc3bbf47203f41f0bbde
      27197728
    • Dylan Yudaken's avatar
      Allow awaiting on a folly::Optional that returns a move-only type · 3597c587
      Dylan Yudaken authored
      Summary:
      await_resume is only called once, so this allows it to move the value out.
      At the same time remove a redundant clear (but keep the existing requirement that the promise type is an OptionalPromise), and clean up the tests.
      Also add a test to make sure the coroutine is cleaned up
      
      Reviewed By: ericniebler
      
      Differential Revision: D5834861
      
      fbshipit-source-id: 7ad487e818969cdf6fe27c9e82931aa247daf4e4
      3597c587
    • Stella Lau's avatar
      Allow getAutoUncompressionCodec() to have 1 terminal decoder · 481365ef
      Stella Lau authored
      Summary: getAutoUncompressionCodec() currently only allows unambiguous headers. Allow a single "terminal codec" to be called if all other codecs can't uncompress or throw.
      
      Reviewed By: terrelln
      
      Differential Revision: D5804833
      
      fbshipit-source-id: 057cb6e13a48fea20508d5c028234afddf7435f6
      481365ef
    • Pádraig Brady's avatar
      fix usingJEMalloc() with LTO · 610c1163
      Pádraig Brady authored
      Summary:
      LTO has better optimization which results in the malloc() being optimized away in this function.
      
      Note we don't use folly::dontOptimizeAway() because
      that introduces a circular dependency between the
      malloc and benchmark targets.
      
      Reviewed By: marksantaniello, meyering, interwq
      
      Differential Revision: D5840883
      
      fbshipit-source-id: 5dd9b152f70b7a49f125b6d79b4dfa40f4cdac59
      610c1163
  14. 14 Sep, 2017 3 commits
  15. 13 Sep, 2017 4 commits
    • Christopher Dykes's avatar
      Fix build without zlib compression enabled · fb0a1228
      Christopher Dykes authored
      Summary: The namespace alias was trying to alias a namespace that doesn't exist unless Folly is being compiled with zlib support.
      
      Reviewed By: terrelln
      
      Differential Revision: D5810929
      
      fbshipit-source-id: c659d8f775fc9b99e57cc95f5914418507e546fb
      fb0a1228
    • Stephen Chen's avatar
      fixing namespacing issue for the dummy non sse crc32c_hw · aa062435
      Stephen Chen authored
      Summary:
      Because the way the #if was written, the dummy crc32c_hw function accidentally
      ended in folly namespace instead of folly::details as expected. Fix this.
      
      Reviewed By: yfeldblum
      
      Differential Revision: D5826187
      
      fbshipit-source-id: ba0f2207a00bc21eda7a727f3f1025e1106d55f9
      aa062435
    • Marcus Holland-Moritz's avatar
      Fix UB from signed integer overflow in RWSpinLock · 7a3f4d06
      Marcus Holland-Moritz authored
      Summary:
      The signed counters used in a couple of places can in theory (and practice)
      overflow, yielding UB. Use unsigned counters instead.
      
      Reviewed By: luciang, philippv
      
      Differential Revision: D5818606
      
      fbshipit-source-id: c5928b779e76b309b00b7f6308a220e2bf6cbf79
      7a3f4d06
    • Jon Maltiel Swenson's avatar
      Backed out changeset ea9041ce2280 · 1c6da6e3
      Jon Maltiel Swenson authored
      Summary: Revert D5787837. Breaks `onSet()`/`onUnset()` behavior.
      
      Reviewed By: palmtenor
      
      Differential Revision: D5817063
      
      fbshipit-source-id: c7dea636fa60eb616d4ebe0a9d418bc96b3018ae
      1c6da6e3
  16. 12 Sep, 2017 8 commits
    • Michael Lee's avatar
      Include glog/logging.h in SmallLocksTest for DCHECK · d5005766
      Michael Lee authored
      Summary: The test uses DCHECK, but does not include glog/logging.h.
      
      Reviewed By: yfeldblum
      
      Differential Revision: D5818647
      
      fbshipit-source-id: fcb2630ac2b12acd1a7b84e228349b2887e976cd
      d5005766
    • Alberto Schiabel's avatar
      Update String.h · 17fd438a
      Alberto Schiabel authored
      Summary:
      Fixed typo in doc comment related to `void toLowerAscii(char* str, size_t length)`.
      This fixes the annoying xCode's warning `Parameter 'len' not found in the function declaration`.
      Closes https://github.com/facebook/folly/pull/670
      
      Reviewed By: yfeldblum
      
      Differential Revision: D5815034
      
      Pulled By: Orvid
      
      fbshipit-source-id: 9580cd0bbd4924d4ed461a5435f525316e5c285a
      17fd438a
    • Christopher Dykes's avatar
      Don't use std::void_t · d4bba1e7
      Christopher Dykes authored
      Summary: I was wrong, MSVC's implementation has the same bug as everything else.
      
      Reviewed By: yfeldblum
      
      Differential Revision: D5810646
      
      fbshipit-source-id: 9caabbbc2115f57b7e836bb85c9b108588c94ad9
      d4bba1e7
    • Martin Martin's avatar
      const -> constexpr in folly::small_vector · d3555e67
      Martin Martin authored
      Summary: const -> constexpr in folly::small_vector
      
      Reviewed By: yfeldblum
      
      Differential Revision: D5814264
      
      fbshipit-source-id: 4631bb7f3f04906636e5a188d4aa0d33ad796a3c
      d3555e67
    • Philip Jameson's avatar
      Remove unneeded parts of build script · 053c0a86
      Philip Jameson authored
      Summary: Remove an unneeded autoconf flag, as it causes the build to fail on missing boost-context
      
      Reviewed By: yfeldblum
      
      Differential Revision: D5815646
      
      fbshipit-source-id: cb6544593de9fbf8248506b09c56412b4635b30c
      053c0a86
    • Martin Martin's avatar
      clang-format folly::small_vector. No functional change. · 6f7b20b8
      Martin Martin authored
      Summary: clang-format folly::small_vector.  No functional change.
      
      Reviewed By: Orvid
      
      Differential Revision: D5808357
      
      fbshipit-source-id: d2ee831e25c60778c699214b875635c22854832d
      6f7b20b8
    • Jon Maltiel Swenson's avatar
      Make RequestContext provider overridable in order to save cost of setContext()... · 943afd98
      Jon Maltiel Swenson authored
      Make RequestContext provider overridable in order to save cost of setContext() on each fiber context switch
      
      Summary:
      Each fiber context switch currently involves the cost of saving/restoring `RequestContext`.  Certain
      fibers-based applications such as mcrouter don't use `RequestContext` at all, so updating the current
      thread-global `RequestContext` on each fiber context switch is unnecessary overhead.  Avoid this cost
      by allowing `FiberManager` to override the `RequestContext` provider at the start and end of each fiber drain
      loop.
      
      Reviewed By: andriigrynenko
      
      Differential Revision: D5787837
      
      fbshipit-source-id: ea9041ce228063c8701165366fd1e34132868d22
      943afd98
    • Christopher Dykes's avatar
      Fix CMake build · 14b06383
      Christopher Dykes authored
      Summary: Spookyhash got moved a long time ago, and a duplicate test name was added with the migration of executors from wangle to folly.
      
      Reviewed By: yfeldblum
      
      Differential Revision: D5811321
      
      fbshipit-source-id: 789b4d3187a2e1e21c6cf8297f733bb4dffdbd60
      14b06383
  17. 11 Sep, 2017 2 commits
    • Phil Willoughby's avatar
      Dead shift in ConcurrentHashMapSegment · d25d17e7
      Phil Willoughby authored
      Summary: Original problem detected by compiling with `-Werror,-Wunused-value`. On further inspection the only place which uses this detail class ensures that the `max_size` parameter is a power of two already, so we can discard the logic to manipulate `max_size` and put a `CHECK` clause in its place to guard against future changes to the caller that break this assumption.
      
      Reviewed By: yfeldblum
      
      Differential Revision: D5799110
      
      fbshipit-source-id: d21ed9ff196d54ef91e38254df8b1b88bbf29275
      d25d17e7
    • Anirudh Ramachandran's avatar
      Move SSL_CTX sessionContext initialization into main SSL_CTX initialization path · 001275d1
      Anirudh Ramachandran authored
      Summary: This field was only previously set if setupSessionCache was called on the wangle::ServerSSLContext
      
      Reviewed By: yfeldblum
      
      Differential Revision: D5776057
      
      fbshipit-source-id: ecdbe83816fee2ecbe7ea1b26a67b682a571309a
      001275d1
  18. 10 Sep, 2017 1 commit
    • Giuseppe Ottaviano's avatar
      Add convenience std::string overload for toLowerAscii · d84e6482
      Giuseppe Ottaviano authored
      Summary:
      `toLowerAscii` is surprisingly hard to use with `std::string` because (until C++17) `data()` returns a `const char*`. In addition, it is not widely known that `s[0]` is legal even if the string is empty. This can lead to a variety of suboptimal code, from explicitly checking emptiness, to casting away the `const` (which causes UB).
      
      Let's just have a simple overload for it.
      
      Reviewed By: pixelb, philippv, yfeldblum
      
      Differential Revision: D5801970
      
      fbshipit-source-id: 407e2e9e66147a0662a5e09c75921255adff0702
      d84e6482