1. 29 Apr, 2021 2 commits
  2. 28 Apr, 2021 1 commit
    • Lee Howes's avatar
      Add terminateOnBlocking parameter to CPUThreadPoolExecutor · 2a80218d
      Lee Howes authored
      Summary: Parameterises CPUThreadPoolExecutor to allow us to construct one that prohibits blocking operations on its threads. The flag is stored as a thread local and applied using a scoped guard.
      
      Reviewed By: yfeldblum
      
      Differential Revision: D27893465
      
      fbshipit-source-id: 71af1c0b7c23752f499712f498b6abb58a345979
      2a80218d
  3. 27 Apr, 2021 3 commits
    • Philip Pronin's avatar
      expose AsyncIOOp::getIocb · 2798cd1b
      Philip Pronin authored
      Summary:
      Similarly to `IoUringOp::getSqe()`, expose underlying submission data
      structure.  The end goal is to perform certain introspection in client code to
      report aggregated stats (number of IO, total size of IO, ...).
      
      Reviewed By: ot
      
      Differential Revision: D28022188
      
      fbshipit-source-id: edc51420ed901f0a0d9b5b1338308ad680371298
      2798cd1b
    • Alex Eckert's avatar
      Add api to check if AsyncPipe is still connected · 9eff0218
      Alex Eckert authored
      Summary:
      I have a use case where I would like to check if the
      AsyncPipe is still active without pumping something in to
      write(). Could set up an onClosed callback, but this would introduce
      more complexity.
      
      This adds a function to determine if the queue inside the AsyncPipe
      still exists.
      
      Reviewed By: iahs
      
      Differential Revision: D28015007
      
      fbshipit-source-id: 1ba37466218abd2f42eab1d8ea5677c3945e31f5
      9eff0218
    • Alan Frindell's avatar
      Optional peerAddress argument for sockets created with fd · ab5d1a0b
      Alan Frindell authored
      Summary: For TCP sockets, it may not be possible to query the peer address from the fd if the endpoint is no longer connected (closed with reset).  In most server cases, the peer address is known when the connection is accepted, so it can be prepopulated.
      
      Reviewed By: mjoras
      
      Differential Revision: D27985942
      
      fbshipit-source-id: 630098ac00930b978fe8a9cad1894834c44d4d93
      ab5d1a0b
  4. 26 Apr, 2021 3 commits
    • Igor Sugak's avatar
      fix -Wsuggest-override and -Wsuggest-destructor-override · e5cb25c2
      Igor Sugak authored
      Summary:
      ```
      folly/executors/InlineExecutor.h:29:11: error: '~InlineLikeExecutor' overrides a destructor but is not marked 'override' [-Werror,-Wsuggest-destructor-override]
        virtual ~InlineLikeExecutor() {}
                ^
      folly/Executor.h:57:11: note: overridden virtual function is here
        virtual ~Executor() {}
                ^
      In file included from tupperware/agent/system/Mounts.cpp:18:
      In file included from folly/futures/Future.h:36:
      In file included from folly/fibers/Baton.h:297:
      In file included from folly/fibers/Baton-inl.h:19:
      folly/fibers/FiberManagerInternal.h:588:10: error: 'timeoutExpired' overrides a member function but is not marked 'override' [-Werror,-Wsuggest-override]
          void timeoutExpired() noexcept { run(); }
               ^
      folly/io/async/HHWheelTimer.h:95:18: note: overridden virtual function is here
          virtual void timeoutExpired() noexcept = 0;
                       ^
      In file included from tupperware/agent/system/Mounts.cpp:18:
      In file included from folly/futures/Future.h:36:
      In file included from folly/fibers/Baton.h:297:
      In file included from folly/fibers/Baton-inl.h:19:
      folly/fibers/FiberManagerInternal.h:589:10: error: 'callbackCanceled' overrides a member function but is not marked 'override' [-Werror,-Wsuggest-override]
          void callbackCanceled() noexcept {}
               ^
      folly/io/async/HHWheelTimer.h:100:18: note: overridden virtual function is here
          virtual void callbackCanceled() noexcept { timeoutExpired(); }
                       ^
      3 errors generated.
      ```
      
      Reviewed By: simpkins
      
      Differential Revision: D27988235
      
      fbshipit-source-id: 799484c52f89fa20f647ff0801b8d136b657b395
      e5cb25c2
    • Lee Howes's avatar
      Add a termination tag to the blocking context · 4794b98c
      Lee Howes authored
      Summary:
      Add a termination tag that carries through the blocking context chain. This flag notifies logging operations that they may go as far as to terminate the process if blocking operations are detected.
      
      The flags carry through the blocking scopes so the termination flag will stay present while we enable and disable blocking - it would be sticky for a given thread once set.
      
      Reviewed By: yfeldblum
      
      Differential Revision: D27869075
      
      fbshipit-source-id: 27014a3e6c9b28c0f433949a576bb6116e7c06c0
      4794b98c
    • Yedidya Feldblum's avatar
      use only public gmock interface in transport/socket lifecycle observer · da606bda
      Yedidya Feldblum authored
      Summary: Internals are not portable between versions or across platforms.
      
      Reviewed By: Orvid
      
      Differential Revision: D27990286
      
      fbshipit-source-id: b70d8d3f67a1e5262efa842f70817e3ae3972339
      da606bda
  5. 25 Apr, 2021 6 commits
    • Yedidya Feldblum's avatar
      prefer thread_local over FOLLY_TLS in F14 · 92d8ef30
      Yedidya Feldblum authored
      Reviewed By: Orvid
      
      Differential Revision: D27582035
      
      fbshipit-source-id: 0f0c35adca1c44dcd0ef88f2443f769d7991e6aa
      92d8ef30
    • Yedidya Feldblum's avatar
      move thread-id function bodies to source · f68ed33b
      Yedidya Feldblum authored
      Summary: Add a source file for the function bodies of `getThreadID` and `getOSThreadID`.
      
      Differential Revision: D27698463
      
      fbshipit-source-id: 255961954b1be07e59b19ef3006dcd6149795861
      f68ed33b
    • Yedidya Feldblum's avatar
      add missing include of <algorithm> · dead70cc
      Yedidya Feldblum authored
      Summary: `folly/stats/StreamingStats.h` uses `std::min` and `std::max` so must `#include <algorithm>`.
      
      Reviewed By: Orvid
      
      Differential Revision: D27986054
      
      fbshipit-source-id: 1c1160101e1ebb4e0b1a16d3d97fd2931db9eeb0
      dead70cc
    • Yedidya Feldblum's avatar
      StaticSingletonManager type-erased create · 8ed2344b
      Yedidya Feldblum authored
      Summary: `StaticSingletonManager::create<T, Tag>` is larger than necessary, which may not be desirable when using many tags with the same type. Permit call-sites to use static data to shrink the functions.
      
      Reviewed By: aary
      
      Differential Revision: D27863037
      
      fbshipit-source-id: 9f6ced3e7d7a85b78e671f69d7a475ab4de5eea0
      8ed2344b
    • Yedidya Feldblum's avatar
      fix the deprecation suppression for gcc in the exception_wrapper test · 6fcad841
      Yedidya Feldblum authored
      Summary: By suppressing `-Wdeprecated-declarations` v.s. `-Wdeprecated`, which latter works only under clang.
      
      Reviewed By: Orvid
      
      Differential Revision: D27987616
      
      fbshipit-source-id: 4bf2a225a65d8ac7c7555123343e9536759fcfcc
      6fcad841
    • Igor Sugak's avatar
      fix a couple of -Wunused-value violations · e6e7080e
      Igor Sugak authored
      Summary:
      Reported by clang-12:
      ```
      folly/test/SynchronizedTestLib-inl.h:587:7: error: expression result unused [-Werror,-Wunused-value]
            SYNCHRONIZED_DUAL(lv, v, lm, m) {
            ^~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
      folly/Synchronized.h:1819:5: note: expanded from macro 'SYNCHRONIZED_DUAL'
          ::folly::detail::SYNCHRONIZED_macro_is_deprecated{};                       \
          ^                                                ~~
      ```
      
      Reviewed By: chadaustin
      
      Differential Revision: D27954777
      
      fbshipit-source-id: bd1dba5ebf563b34b496457b980568ea1c978442
      e6e7080e
  6. 24 Apr, 2021 9 commits
    • Yedidya Feldblum's avatar
      prefer thread_local over FOLLY_TLS in SharedMutex · 5d1b9736
      Yedidya Feldblum authored
      Reviewed By: Orvid
      
      Differential Revision: D27559485
      
      fbshipit-source-id: be2db59ef6d9b4cf178216a4b8851e27e7ecef93
      5d1b9736
    • Yedidya Feldblum's avatar
      use INSTANTIATE_TEST_SUITE_P over INSTANTIATE_TEST_CASE_P · 9ce8cd46
      Yedidya Feldblum authored
      Summary: The facility was renamed in gtest.
      
      Reviewed By: praihan
      
      Differential Revision: D27985919
      
      fbshipit-source-id: d35795d7bfb985767b5e6c28141dac47a4b9f0ce
      9ce8cd46
    • Yedidya Feldblum's avatar
      prefer fmt for formatting in small-locks bench · 76f8268c
      Yedidya Feldblum authored
      Summary: No risk of mismatched types.
      
      Reviewed By: vitaut
      
      Differential Revision: D27933275
      
      fbshipit-source-id: 41bf921748299ead7388bb0dc4197eb4390aa007
      76f8268c
    • Yedidya Feldblum's avatar
      cut google-perftools spin-lock from small-locks bench · 2e5f2bae
      Yedidya Feldblum authored
      Summary: To avoid the extra and unusual dependency in this particular case.
      
      Differential Revision: D27933052
      
      fbshipit-source-id: aeda0b7b5916c3fe05581f9880472d194412c461
      2e5f2bae
    • Yedidya Feldblum's avatar
      fix memory order in hazptr example · db330e7c
      Yedidya Feldblum authored
      Summary: The release order is not valid for compare-exchange-failure-load.
      
      Reviewed By: magedm
      
      Differential Revision: D27932613
      
      fbshipit-source-id: 689929ecdef8feaec268dc2cd350ce001103ee75
      db330e7c
    • Yedidya Feldblum's avatar
      cut posix semaphore polyfill · 31fbd123
      Yedidya Feldblum authored
      Summary: Prefer not to have polyfills. The class `NativeSemaphore` replaces this polyfill.
      
      Reviewed By: Orvid
      
      Differential Revision: D27971239
      
      fbshipit-source-id: 39bd8b2d9be895a947faee4d522420535378fdc3
      31fbd123
    • Lee Howes's avatar
      Rename ForbidTag to TrackTag to be more consistent with its implementation · 2a4fe7ca
      Lee Howes authored
      Summary: Rename ForbidTag to TrackTag as a counter to PermitTag. ForbidTag did not capture the idea that in practice we simply log blocking operations. TrackTag allows for that and opens scope for a more aggressive form of tracking on top.
      
      Reviewed By: andriigrynenko
      
      Differential Revision: D27914911
      
      fbshipit-source-id: d56132b7e389825167503934b7af08f9a3ccf1fe
      2a4fe7ca
    • Robin Cheng's avatar
      Unregister event handler fd before closing the fd in EventBaseAtomicNotificationQueue. · b756d166
      Robin Cheng authored
      Summary:
      Thread 1:
        - Creates an eventfd X
        - Registers X with an event base
        - Closes X
        - Unregisters X from the event base
      
      Thread 2:
        - Creates some other file descriptor (eventfd or socket or whatever); the operating system reuses file descriptor #X.
      
      The unregistering of X from the event base in thread 1 races with the opening of reused X in thread 2.
      
      The fix is to unregister X before closing X.
      
      Reviewed By: yfeldblum
      
      Differential Revision: D27962155
      
      fbshipit-source-id: 1bcb62c7ebe0297ab9687e1a0edf37d319637fda
      b756d166
    • Yedidya Feldblum's avatar
      cut macro FOLLY_CL_USE_FOLLY_TLS · 0297c176
      Yedidya Feldblum authored
      Summary: Replace the uses of `FOLLY_CL_USE_FOLLY_TLS` in some cases with C++ checks on `kIsMobile`.
      
      Differential Revision: D27669672
      
      fbshipit-source-id: 79a29896653f2fa62b10b488220d8cf83cba3d00
      0297c176
  7. 23 Apr, 2021 4 commits
    • Yedidya Feldblum's avatar
      fix missing include in inline-function-ref test · 483df6d0
      Yedidya Feldblum authored
      Summary: To use `std::atomic`, we need `#include <atomic>`.
      
      Reviewed By: Mizuchi
      
      Differential Revision: D27932606
      
      fbshipit-source-id: 8d29a56a75b27ae35bac37b87a7e6d6d1661030e
      483df6d0
    • Yedidya Feldblum's avatar
      use TYPED_TEST_SUITE over TYPED_TEST_CASE · 4e1a864b
      Yedidya Feldblum authored
      Summary: The facility was renamed in gtest.
      
      Reviewed By: praihan
      
      Differential Revision: D27904281
      
      fbshipit-source-id: 3f00b4371e17cd85672ad7ef706cea4ca1ba5c64
      4e1a864b
    • Yedidya Feldblum's avatar
      switch tests/benchmarks to folly native semaphore wrapper · f0d7b6d5
      Yedidya Feldblum authored
      Summary: On apple platforms, posix sem is deprecated. On windows, it does not exist. So switch to the native-semaphore wrapper.
      
      Reviewed By: chadaustin
      
      Differential Revision: D27903002
      
      fbshipit-source-id: d53c7762fea3123cf67cda48fdd87489a0ee496c
      f0d7b6d5
    • Yedidya Feldblum's avatar
      NativeSemaphore · 58a889d7
      Yedidya Feldblum authored
      Summary:
      A semaphore type which wraps the platform native semaphore type.
      
      On Windows, this is the Windows semaphore type. On Apple, this is the semaphore type from libdispatch. Otherwise, this is the POSIX semaphore type, which is deprecated on Apple and unavailable on Windows.
      
      Reviewed By: Orvid
      
      Differential Revision: D27951114
      
      fbshipit-source-id: e6a870f656eecd3ba41c2efed038b916c124d0e8
      58a889d7
  8. 22 Apr, 2021 6 commits
    • Chad Austin's avatar
      forward env vars through tpx · e9a24429
      Chad Austin authored
      Summary:
      The migration to tpx broke Watchman's tests because test_bser relies on YARN_YARN_OFFLINE_MIRROR being set in the environment and tpx doesn't forward environment variables into the test.
      
      Explicitly forward them ourselves.
      
      Reviewed By: fanzeyi
      
      Differential Revision: D27897172
      
      fbshipit-source-id: 16c8017a89979802bd9d443825ed4e22cb6ff6c9
      e9a24429
    • Giuseppe Ottaviano's avatar
      Allow creation of dismissed ScopeGuards · cc049da2
      Giuseppe Ottaviano authored
      Summary:
      This diff enables a symmetrical pattern to `makeGuard()`/`dismiss()`: `makeDismissedGuard()` will create a guard that will not execute unless `rehired()`'d.
      
      This is for use cases where the guard's scope is wider than where the condition on whether it should execute is evaluated. For example
      ```
      State state;
      auto guard = makeDismissedGuard([&] { cleanup(state); });
      if (modifyStateInAWayThatRequiresCleanup(state)) {
        guard.rehire();
      }
      // Use state.
      ```
      
      Reviewed By: yfeldblum
      
      Differential Revision: D27931274
      
      fbshipit-source-id: fbf7048dc991b73553cd6429f5e73345e4104d49
      cc049da2
    • Yedidya Feldblum's avatar
      support FOLLY_SAFE_CHECK with no message args · a99615fe
      Yedidya Feldblum authored
      Summary:
      Permit calls of the form:
      
      ```lang=c++
      FOLLY_SAFE_DCHECK(expr);
      ```
      
      Reviewed By: ot
      
      Differential Revision: D27843903
      
      fbshipit-source-id: 23869720822fcdba0845c42279855b101c8e2b36
      a99615fe
    • Andrii Grynenko's avatar
      Make sure all observer adaptors correctly capture dependencies · dbfa7c45
      Andrii Grynenko authored
      Reviewed By: praihan
      
      Differential Revision: D27800735
      
      fbshipit-source-id: 26f2c1be72bb66864173beb87244129dd6194c8d
      dbfa7c45
    • Yedidya Feldblum's avatar
      let SingletonVault::type_ be atomic · 1366baf8
      Yedidya Feldblum authored
      Summary: It is possible to have concurrent calls to `SingletonVault::setType` and `SingletonHolder::createInstance`. In which cases, non-atomic accesses to `SingletonVault::type_` race.
      
      Differential Revision: D27904167
      
      fbshipit-source-id: be01ee375d37839629b2e1d64bec99e32cd7e213
      1366baf8
    • Yedidya Feldblum's avatar
      tweak rcu benchmarks · 549f235f
      Yedidya Feldblum authored
      Summary:
      Add a benchmark for `rcu_retire`. Remove perf code from the rcu tests.
      
      As a motivating side-effect, removes faulty calls to `printf` which fail to compile across platforms, including mac.
      
      Differential Revision: D27902852
      
      fbshipit-source-id: 1698a0fd8ca3731f0b794cb1c2cb08c4bfb5d714
      549f235f
  9. 21 Apr, 2021 2 commits
    • Yedidya Feldblum's avatar
      remove AccessSpreader extern-template-struct · cd58205e
      Yedidya Feldblum authored
      Summary:
      Using `extern template struct` can be tricky - best to avoid.
      
      Use static storage but no longer use static initialization to avoid all issues surrounding ODR, global initializers, etc. Microbenchmarks show no significant hit.
      
      Add a global constructor to continue triggering initialization at static initialization time.
      
      Differential Revision: D27746718
      
      fbshipit-source-id: c5288c33412a80bb813c8d615794b9773cef323c
      cd58205e
    • Yedidya Feldblum's avatar
      mark the SingletonThreadLocal check function as kept · c5651a00
      Yedidya Feldblum authored
      Differential Revision: D27859994
      
      fbshipit-source-id: afde93e853a08a3d65f3d817cd2bbad337bfbfce
      c5651a00
  10. 20 Apr, 2021 1 commit
    • Lee Howes's avatar
      Add Unsafe names for set and get executor calls · 1bc16f19
      Lee Howes authored
      Summary:
      To encourage migration to safer executors, add transitional *Unsafe names for the old, mutable, global executors. This is consistent with the use of *Unsafe elsewhere in the async framework.
      
      (Note: this ignores all push blocking failures!)
      
      Reviewed By: yfeldblum
      
      Differential Revision: D26418111
      
      fbshipit-source-id: 414ee238ed4ae43619ce8d671fa5725f0679f67e
      1bc16f19
  11. 19 Apr, 2021 2 commits
    • Xavier Deguillard's avatar
      cmake: set CMAKE_CXX_FLAGS in FBCompilerSettingsUnix.cmake · 6696dbb0
      Xavier Deguillard authored
      Summary:
      It looks like the various CMAKE_CXX_FLAGS_* are simply ineffective, and I'm not
      sure why, setting CMAKE_CXX_FLAGS does work though, and CMake appears to add
      some release/debug flags to it when generating Ninja files.
      
      Reviewed By: fanzeyi
      
      Differential Revision: D27862117
      
      fbshipit-source-id: a89f6182b5bae9a087f8fcfd4c5f9526f91e2adf
      6696dbb0
    • Yedidya Feldblum's avatar
      call future continuations after catch · 18575625
      Yedidya Feldblum authored
      Summary: Avoid calling arbitrary user code from within the scope of framework `catch` blocks. Instead, get the current exception in the catch block, save it, and call the user code after.
      
      Differential Revision: D27842318
      
      fbshipit-source-id: de3ebabc5c08332701a619a93b6e01bfccc0ea71
      18575625
  12. 17 Apr, 2021 1 commit
    • Giuseppe Ottaviano's avatar
      __PRETTY_FUNCTION__ -> __func__ in FOLLY_SAFE_CHECK · 7c86b9b4
      Giuseppe Ottaviano authored
      Summary:
      Storing the `__PRETTY_FUNCTION__` for logging has an unreasonable cost on (non-strippable) binary size for debug builds, as different template instantiation will produce long, demangled, and non-mergeable strings.
      
      If necessary, all the information is retrievable from the debug info (even if the function is inlined), where it's stored in much more efficient form. So, switch to `__func__`, which is stripped.
      
      Reviewed By: yfeldblum, luciang
      
      Differential Revision: D27825136
      
      fbshipit-source-id: d499084c7e7b24db1cd46aa2b03f4a590c6eddc3
      7c86b9b4