1. 06 Oct, 2017 5 commits
    • Stiopa Koltsov's avatar
      future.then() is identical to future.unit() · 05ced584
      Stiopa Koltsov authored
      Summary:
      Document that `future.then()` is identical to `future.unit()`.
      
      Put functions next to each other to make it clear, and use identical
      wording.
      
      Reviewed By: yfeldblum
      
      Differential Revision: D5955451
      
      fbshipit-source-id: 1b55d5785dc0995d4d9364f48241e98ad01b31f4
      05ced584
    • Yedidya Feldblum's avatar
      Remove Executor::addPtr · 6a1cf45e
      Yedidya Feldblum authored
      Summary:
      [Folly] Remove `Executor::addPtr`.
      
      It was there to support passing non-copyable callable objects wrapped as `std::shared_ptr`. It is no longer useful since we have `Function`, which is a non-copyable version of `std::function` which can support capturing non-copyable objects, and it is generally unused.
      
      Reviewed By: spacedentist
      
      Differential Revision: D5983801
      
      fbshipit-source-id: b49a86f8dd7e5250a097b0e714a1bdf9ac362916
      6a1cf45e
    • Jun Qu's avatar
      Workaround for a gcc crash · 76ca3798
      Jun Qu authored
      Summary: I recently got a gcc crash when using `ConcurrentHashMap`
      
      Reviewed By: djwatson
      
      Differential Revision: D5994587
      
      fbshipit-source-id: 412d48aa6da12c428bb9ab5ed7a317d89c9580b9
      76ca3798
    • Valeriy Khromov's avatar
      add static makeFromPath to construct SocketAddress from a unix domain socket path · f09b0411
      Valeriy Khromov authored
      Summary:
      Add `SocketAddress::makeFromPath(StringPiece)` static member function to
      constructor `SocketAddress` from a path to Unix domain socket.
      
      Reviewed By: yfeldblum
      
      Differential Revision: D5974523
      
      fbshipit-source-id: b5c1537e67d07d1ef401fea75e35753392eeaf6b
      f09b0411
    • Yedidya Feldblum's avatar
      Use fewer keep-alives in VirtualEventBase::keepAliveRelease · 71d0dd7f
      Yedidya Feldblum authored
      Summary:
      [Folly] Use fewer keep-alives in `VirtualEventBase::keepAliveRelease`.
      
      {D5982132} mistakenly used `VirtualEventBase::add`, which holds a keep-alive on the master `EventBase`, instead of calling `EventBase::add` directly.
      
      (Note: this ignores all push blocking failures!)
      
      Reviewed By: andriigrynenko
      
      Differential Revision: D5992403
      
      fbshipit-source-id: f427025c06f01e6a93d6eae8a051c3553f58be20
      71d0dd7f
  2. 05 Oct, 2017 4 commits
    • Yedidya Feldblum's avatar
      Make keepAliveRelease consistent between EventBase and VirtualEventBase · 25ddbd7f
      Yedidya Feldblum authored
      Summary: [Folly] Make `keepAliveRelease` consistent between `EventBase` and `VirtualEventBase`.
      
      Reviewed By: elsteveogrande
      
      Differential Revision: D5982132
      
      fbshipit-source-id: 536d48e5672567e78786691bfb283c34d1f31960
      25ddbd7f
    • Yedidya Feldblum's avatar
      Move GlobalThreadPoolList.h into folly/concurrency/ · 74570190
      Yedidya Feldblum authored
      Summary:
      [Folly] Move `GlobalThreadPoolList.h` into `folly/concurrency/`.
      
      This seems like a better place than the top-level. It seems reasonable because this has *something* to do with concurrency. This is used by executors, but is not itself an executor, so it was not clear that it should go to `folly/executors/`, although that also seems like quite the reasonable choice.
      
      Reviewed By: Orvid
      
      Differential Revision: D5985142
      
      fbshipit-source-id: 6117d133757af74023d6cffb838741da83d173bd
      74570190
    • Andre Pinto's avatar
      Add an overload to use backlashify with StringPiece · ff17894b
      Andre Pinto authored
      Summary: Allows calling backlashify on a StringPiece.
      
      Reviewed By: yfeldblum
      
      Differential Revision: D5930015
      
      fbshipit-source-id: ca14c78d9a90c45781da7229eb5d2f437792b2d1
      ff17894b
    • Lee Howes's avatar
      Add SemiFuture class. · a95a6976
      Lee Howes authored
      Summary:
      Offer a clean separation between future as a vocabulary type for crossing
      library interfaces, and future as a type to manage continuations.
      
      The principle is that if we want an API with clean separation of execution it
      should both return and receive SemiFutures. The returned SemiFuture would
      only be awaitable, but not continuable. If the caller wants to enqueue a
      continuation then it is efficiently convertable into a folly::Future by
      calling .via.
      
      This means that an API a) Does not have to take an executor to ensure it
      returns a valid future. That can be deferred to the caller or the caller's
      caller/target for true separation. b) The API can ensure that its own executor
      is not exposed to the caller, while still having a clean API.
      
      Obviously if some API wants to allow returning of a continuable future, then it
      can also provide an executor-taking API.
      
      Reviewed By: yfeldblum
      
      Differential Revision: D5769284
      
      fbshipit-source-id: 46241d1274bf7b1698a7d28a47cff2a65a983740
      a95a6976
  3. 04 Oct, 2017 4 commits
    • Eric Niebler's avatar
      give folly future's exceptions default visibility · eab6da6a
      Eric Niebler authored
      Summary: Exception types should have default visibility, otherwise RTTI doesn't work right.
      
      Reviewed By: elsteveogrande
      
      Differential Revision: D5976415
      
      fbshipit-source-id: 45dcfe3476b513aa49a6f78352318f31d381ada7
      eab6da6a
    • Yedidya Feldblum's avatar
      Move keepalive-acquire code into Executor::keepAliveAcquire overrides · b6861c02
      Yedidya Feldblum authored
      Summary:
      [Folly] Move keepalive-acquire code into `Executor::keepAliveAcquire` overrides.
      
      This makes the API more symmetric and allows for more flexibility. Also serves as preparation for generalizing the keepalive-token interface.
      
      Reviewed By: andriigrynenko
      
      Differential Revision: D5974080
      
      fbshipit-source-id: 26209e49a0f5834ba229d4bbfc9272c2e4ffb3fd
      b6861c02
    • Tom Jackson's avatar
      Benchmark comparison · f20581a4
      Tom Jackson authored
      Summary:
      I couldn't find anything that consumes `--json` output, so I made this. It prints out benchmark results from two runs, comparing each benchmark to its corresponding baseline. This should help with benchmarking changes across revisions.
      
      Along the way:
      - Two small transparent `struct`s replaces the use of `tuple`s everywhere.
      - New output JSON format (additive), formatted as array of arrays so order is preserved.
      - New comparison binary in `folly/tools/benchmark_compare`
      
      Sample output:
      
      {P58307694}
      
      Reviewed By: yfeldblum
      
      Differential Revision: D5908017
      
      fbshipit-source-id: d7411e22b459db16bd897f656e48ea4e896cb1bf
      f20581a4
    • Yedidya Feldblum's avatar
      Let keep-alive tokens from VirtualEventBase be destroyed from any thread · b2d64a0a
      Yedidya Feldblum authored
      Summary:
      [Folly] Let keep-alive tokens from `VirtualEventBase` be destroyed from any thread.
      
      This case was missed in {D5951397} (facebook/folly@6f3b7616f3402355441c62ca60a36159435aa818).
      
      Reviewed By: andriigrynenko
      
      Differential Revision: D5970670
      
      fbshipit-source-id: 19e2b00134516e68113234acd6111e21c3e23e8d
      b2d64a0a
  4. 03 Oct, 2017 3 commits
    • Maged Michael's avatar
      Dynamic MPMCQueue: Backout of last change as it may deadlock · 1292801d
      Maged Michael authored
      Summary: The previous change can lead to deadlock. Backing out.
      
      Reviewed By: djwatson
      
      Differential Revision: D5957084
      
      fbshipit-source-id: 72ea1cb6236367912b4b087da7e4d57f8a2daed0
      1292801d
    • Maged Michael's avatar
      Fixes: prevent compiler reporting UB, hazptr_array move operator, empty array test · 36b8f9c6
      Maged Michael authored
      Summary:
      Three fixes:
      (1) The compiler reports UB in line 432 for the case M > HAZPTR_TC_SIZE even though it is executed only if M <= HAZPTR_TC_SIZE. Added a condition M <= HAZPTR_TC_SIZE to help the compiler determine that line 432 is not executed in that case.
      (2) Added missing management of empty state in hazptr_array move operator
      (3) Added nullptr argument to empty hazptr_array in Array test
      
      Reviewed By: djwatson
      
      Differential Revision: D5951283
      
      fbshipit-source-id: cb8e61421ab06c7733f67bf2d2274d3311260ac4
      36b8f9c6
    • Yedidya Feldblum's avatar
      Let keep-alive tokens be destroyed from any thread · 6f3b7616
      Yedidya Feldblum authored
      Summary: [Folly] Let keep-alive tokens be destroyed from any thread.
      
      Reviewed By: andriigrynenko
      
      Differential Revision: D5951397
      
      fbshipit-source-id: 91e72588de4ef33a730ebef5770e77635d4e93ba
      6f3b7616
  5. 02 Oct, 2017 2 commits
    • Igor Sugak's avatar
      fix -Wvexing-parse · d6fe55fe
      Igor Sugak authored
      Summary:
      ```lang=cpp
      folly/test/stl_tests/StlVectorTest.cpp:1975:11: error: parentheses were disambiguated as redundant parentheses around declaration of variable named 'm' [-Werror,-Wvexing-parse]
          Vector(m);
                ^~~
      folly/test/stl_tests/StlVectorTest.cpp:1975:11: note: add a variable name to declare a 'Vector' initialized with 'm'
          Vector(m);
                ^
                 varname
      folly/test/stl_tests/StlVectorTest.cpp:1975:5: note: add enclosing parentheses to perform a function-style cast
          Vector(m);
          ^
          (        )
      folly/test/stl_tests/StlVectorTest.cpp:1975:11: note: remove parentheses to silence this warning
          Vector(m);
                ^ ~
      
      1 error generated.
      ```
      
      Reviewed By: Gownta
      
      Differential Revision: D5955613
      
      fbshipit-source-id: 3015570ce111603b3561914d07b55365a221c686
      d6fe55fe
    • 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
  6. 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
  7. 29 Sep, 2017 2 commits
  8. 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
  9. 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
  10. 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
  11. 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
  12. 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
  13. 21 Sep, 2017 1 commit
  14. 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
  15. 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
  16. 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
  17. 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
  18. 14 Sep, 2017 1 commit