1. 27 Jun, 2021 40 commits
    • Roman Koshelev's avatar
      Correcting and adding a coarse_ * clock (#1580) · 78e483e0
      Roman Koshelev authored
      Summary: Pull Request resolved: https://github.com/facebook/folly/pull/1580
      
      Reviewed By: luciang
      
      Differential Revision: D28627136
      
      Pulled By: yfeldblum
      
      fbshipit-source-id: 1362506502ad3282f53512999d1c79822f2ce6e8
      78e483e0
    • Yedidya Feldblum's avatar
      suppress lint-time diagnostics in OpenSSLThreadding.cpp · 7a06e2f4
      Yedidya Feldblum authored
      Differential Revision: D29089239
      
      fbshipit-source-id: 83cbe9d74d8f7f648e18b8ce1e3e13ca8cb33006
      7a06e2f4
    • Yedidya Feldblum's avatar
      revise Synchronized LockedPtr to use lock types · b805d853
      Yedidya Feldblum authored
      Summary:
      Use `std::unique_lock`, `std::shared_lock`, and `folly::upgrade_lock`. There are two reasons:
      
      * Makes generic the use of `std::unique_lock` with `std::mutex`, which is currently special-cased.
      * Permits specializations of `std::unique_lock` and the other lock types to be found automatically.
      
      In particular, this permits the use of `Synchronized<T, DistributedMutex>`, which is only proxy-lockable and not lockable.
      
      Reviewed By: simpkins
      
      Differential Revision: D28705607
      
      fbshipit-source-id: 48daa2910ce16ee4fde6f5ea629a41d9768f3c87
      b805d853
    • Yedidya Feldblum's avatar
      cut legacy friends of SharedMutex · 424e569f
      Yedidya Feldblum authored
      Summary: They were used as extension points at one time, but no longer.
      
      Reviewed By: Alfus
      
      Differential Revision: D28987212
      
      fbshipit-source-id: e9d59e5cf9641323657314b088eef516ce068112
      424e569f
    • Aaryaman Sagar's avatar
      Fix ParkingLot memory ordering bug · ff7ab9db
      Aaryaman Sagar authored
      Summary:
      ```
      auto x = std::atomic<std::uint64_t>{0};
      auto y = std::atomic<std::uint64_t>{0};
      
      // thread 1
      x.store(1, std::memory_order_release);
      auto one = y.load(std::memory_order_seq_cst);
      
      // thread 2
      y.fetch_add(1, std::memory_order_seq_cst);
      auto two = x.load(std::memory_order_seq_cst);
      ```
      Here it is possible for both `one` and `two` to end up with the value `0`. The
      code in ParkingLot assumed that this would not be possible; and the counter used
      to track the number of waiters could get reordered with respect to loads around
      it.  This diff adds a seq_cst fence to ensure unparking threads always sequence
      their stores before parking _before_ the counter load globally.
      
      Reviewed By: yfeldblum, ot
      
      Differential Revision: D28972810
      
      fbshipit-source-id: 06eb6a2e6df6b00bf07ac8454a79257a5276e154
      ff7ab9db
    • Yedidya Feldblum's avatar
      check functions for DistributedMutex · d418b5ee
      Yedidya Feldblum authored
      Summary: To observe how the compiler generates corresponding code.
      
      Reviewed By: Alfus
      
      Differential Revision: D28984027
      
      fbshipit-source-id: d1c86197931aad257eb922cec9810c71ecdfc20a
      d418b5ee
    • Yedidya Feldblum's avatar
      use lowest() in numeric traits · 348568d4
      Yedidya Feldblum authored
      Summary:
      The numeric functions `less_than` and `greater_than` are intended for integer use but, technically, they are not constrained to integer use. If they are used with floating-point types, `min()` does not do the expected thing so use use `lowest()`.
      
      Fixes: https://github.com/facebook/folly/issues/1604.
      
      Reviewed By: iahs
      
      Differential Revision: D29069620
      
      fbshipit-source-id: 369bd59338b889cb1ec0f56d232a3775500573d0
      348568d4
    • Jiawen Geng's avatar
      make deleted function public for AsyncUDPSocket.h (#1603) · 5c8255f7
      Jiawen Geng authored
      Summary:
      Ref: https://abseil.io/tips/143
      
      Pull Request resolved: https://github.com/facebook/folly/pull/1603
      
      Differential Revision: D29034248
      
      Pulled By: yfeldblum
      
      fbshipit-source-id: 87ae1970eab3f067d71a480fc7a95b18e2041c6d
      5c8255f7
    • Lee Howes's avatar
      Add back default SerialExecutor defaulted to getGlobalCPUExecutor. · 5d231c67
      Lee Howes authored
      Summary: Use the global immutable executor by default for SerialExecutor.
      
      Reviewed By: yfeldblum
      
      Differential Revision: D28925750
      
      fbshipit-source-id: 91f75cfb3a4880098d933fe1f148d5c3b2e896e7
      5d231c67
    • Maged Michael's avatar
      HazptrDomain: Remove unused data members and function · b66627fc
      Maged Michael authored
      Summary:
      Remove unused HazptrDomain data members unprotected_ and children_ and the function reclaim_unprotected_safe.
      
      The data members and function were used before the change in October 2020 that eliminated the nesting of synchronous reclamation within asynchronous reclamation.
      
      Reviewed By: yfeldblum
      
      Differential Revision: D29017460
      
      fbshipit-source-id: 645a61aedc801cb3eb14a4c3a085fea8b8422f1e
      b66627fc
    • Lee Howes's avatar
      Remove use of default SerialExecutor · 99893da2
      Lee Howes authored
      Summary: Remove all uses of the default SerialExecutor by changing callsites to be explicit, and removing the default parameter. This will allow us to change the default to a safer option in a subsequent diff.
      
      Reviewed By: yfeldblum
      
      Differential Revision: D28842180
      
      fbshipit-source-id: 93027dcf8b19c44380534dabd731651780dac90e
      99893da2
    • Dan Melnic's avatar
      io_uring SendmsgRecvmsg test fixes · 61943560
      Dan Melnic authored
      Summary: io_uring SendmsgRecvmsg test fixes
      
      Reviewed By: danobi
      
      Differential Revision: D29003163
      
      fbshipit-source-id: c1139a67d7b687d0eab21be7c6329f593dbe6ea9
      61943560
    • Yedidya Feldblum's avatar
      keep_sink_nx · 3d4885b9
      Yedidya Feldblum authored
      Summary: A function like keep_sink but marked `noexcept`. Useful for shrinking check functions with duplicated cleanups.
      
      Reviewed By: aary
      
      Differential Revision: D28984340
      
      fbshipit-source-id: f1099d43db25492db0e633f8cc8a5d44bcf157bc
      3d4885b9
    • Dead Code Bot's avatar
      Remove dead includes in folly/executors · 12ccdf77
      Dead Code Bot authored
      Reviewed By: yfeldblum
      
      Differential Revision: D28995271
      
      fbshipit-source-id: bd64f4f98742fbad801f3db15a9cb8f5f71fe4b1
      12ccdf77
    • Chad Austin's avatar
      fix tpx command line when filtering is enabled · a6321e32
      Chad Austin authored
      Summary:
      The testpilot command line getdeps generated was not suitable for tpx
      when filtering. tpx would consider the passed test filter an
      environment variable.
      
      Reorder a few things to at least make filtering work.
      
      Reviewed By: fanzeyi
      
      Differential Revision: D28976061
      
      fbshipit-source-id: 21c45b3a4a59711a2a5da36a1bd11b7b4871ec5d
      a6321e32
    • Kudo Chien's avatar
      Fix openNoInt building error after android ndk r21 (#1593) · 73123851
      Kudo Chien authored
      Summary:
      Android NDK bionic with FORTIFY will override original `open()` definition and making folly `wrapNoInt` template failed to deduct.
      The issue may happen only after NDK r21 because [this commit landed after r21](https://android.googlesource.com/platform/bionic/+/9349b9e51b41d12fd054b925802b626ca2db0afb%5E%21/#F0)
      
      References:
      https://github.com/android/ndk/issues/1328
      https://github.com/llvm/llvm-project/commit/0a0e411204a2baa520fd73a8d69b664f98b428ba
      
      Pull Request resolved: https://github.com/facebook/folly/pull/1593
      
      Test Plan:
      Tested running `objdump -dr` on the object file generated in both `mode/opt`
      and `mode/opt-gcc` build modes and confirmed the generated code was
      identical.
      
      Reviewed By: yfeldblum
      
      Differential Revision: D28953120
      
      Pulled By: simpkins
      
      fbshipit-source-id: 225583a5a011e8456592a0bcfcd669fe966ea6af
      73123851
    • Cameron Pickett's avatar
      Build in automatic cancellation support to AsyncScope · ed173626
      Cameron Pickett authored
      Summary: Introduces a CancellableAsyncScope type that automatically adds a CancellationToken to every task added() on the scope.
      
      Reviewed By: yfeldblum
      
      Differential Revision: D28438228
      
      fbshipit-source-id: 2416725360c16f8d95dd5c35997dd624278d0980
      ed173626
    • Yedidya Feldblum's avatar
      add hasher<string_view> · e47bc9b4
      Yedidya Feldblum authored
      Summary: Add a specialization of `folly::hasher<std::string_view>` parallel to the specialilzation of `folly::hasher<std::string>`.
      
      Reviewed By: luciang
      
      Differential Revision: D28921343
      
      fbshipit-source-id: 77213d9ff66cec57b6d36b214c41e479e1d9455d
      e47bc9b4
    • Emanuele Altieri's avatar
      FB_LOG_ONCE() · b3427e71
      Emanuele Altieri authored
      Summary: We need a thread-safe alternative to `LOG_FIRST_N(severity, n)` -- specifically when n = 1, the most common case.
      
      Reviewed By: yfeldblum, ot, luciang
      
      Differential Revision: D28884240
      
      fbshipit-source-id: 41c937bf37dba036b71f1c62fd70445e79a3924a
      b3427e71
    • Andrew Huang's avatar
      Add TLS 1.3 to SSLContext::SSLVersion enum · db723b64
      Andrew Huang authored
      Summary: Since we're moving towards enabling TLS 1.3 by default in folly, add this version to the SSLVersion enum.
      
      Reviewed By: yfeldblum
      
      Differential Revision: D28908538
      
      fbshipit-source-id: 19d9ee248fff4682eec59c6f3d699fc6c9fa1917
      db723b64
    • Yedidya Feldblum's avatar
      extract some SharedMutex params to a policy · 3d61464f
      Yedidya Feldblum authored
      Summary: There are many possible knobs that may be tweaked but long chains of positional params are awkward. Extract a policy param to house many of these chained params. Facilitates adding more params in the future as well.
      
      Reviewed By: ot, luciang
      
      Differential Revision: D28824188
      
      fbshipit-source-id: f56ec15242b148890eced06a3dd101d7cfaaefb1
      3d61464f
    • Yedidya Feldblum's avatar
      simplify catch clauses constructing exception_wrapper · 704df442
      Yedidya Feldblum authored
      Summary:
      Now that `exception_wrapper` can access the exception object directly from the `std::exception_ptr`, it no longer needs to be passed the exception object separately.
      
      This eliminates duplicative `catch (exception const&)` clauses which primarily construct `exception_wrapper` instances, reducing build artifact size.
      
      Reviewed By: akrieger
      
      Differential Revision: D27888763
      
      fbshipit-source-id: 5f60a07083b3c8d818f0eafd5b17afcfca239ab8
      704df442
    • Yedidya Feldblum's avatar
      let try_and_catch work with -fno-exceptions · fdc8edc2
      Yedidya Feldblum authored
      Summary: The helper `catch_exception` may be used to wrap the `try {} catch (...) {}` syntax.
      
      Reviewed By: Orvid, luciang
      
      Differential Revision: D28276166
      
      fbshipit-source-id: be903215251d8ea3321bd6d3b994b19359056f8c
      fdc8edc2
    • Yedidya Feldblum's avatar
      let proxy-lockable unlock pass the state by const& · 168d50be
      Yedidya Feldblum authored
      Summary: Avoid questions of what may the mutex unlock method do to the passed state: nothing.
      
      Reviewed By: aary
      
      Differential Revision: D28895552
      
      fbshipit-source-id: 8b73e76711bb553a344d958c80dcf14d56e74ffd
      168d50be
    • Robert Quitt's avatar
      Clean up old googletest conditional compilations · 1bc5dd9d
      Robert Quitt authored
      Summary:
      Remove all the conditional compilations that were used for the googletest upgrade. We're set on Googletest 1.10.x now, so no need to keep the old code lying around.
      
      TODO in the future, is to deprecate some of the other fb-only patches, and to switch over fbcode to use fbsource/third-party
      
      Reviewed By: yfeldblum, igorsugak
      
      Differential Revision: D28860854
      
      fbshipit-source-id: 8ffbaf860fca8897f6691218bc0154723ec954d4
      1bc5dd9d
    • Yedidya Feldblum's avatar
      work around a miscompile crashing DistributedMutex::unlock · 59d01631
      Yedidya Feldblum authored
      Summary: Under gcc8 in some usages, the compiler emits a stack copy of the proxy state but passes `7` instead of the address of the stack copy. Looks like incorrect codegen. Work around that bug by not having a stack copy.
      
      Reviewed By: aary
      
      Differential Revision: D28890467
      
      fbshipit-source-id: 50b16464708c7ef3e360618f3d738264f59cf8a6
      59d01631
    • Yedidya Feldblum's avatar
      cut try_and_catch overload taking explicit types to catch · b42e5ace
      Yedidya Feldblum authored
      Summary: There is no longer compelling reason to keep this overload since it is relatively cheap to inspect any `exception_wrapper` or `exception_ptr`, no matter from which exception object type it is constructed.
      
      Reviewed By: luciang
      
      Differential Revision: D26877547
      
      fbshipit-source-id: d9a38c9a56a47b9453eda2d9e8abf7586c8aab61
      b42e5ace
    • Dan Melnic's avatar
      Switch getReadBuffers to be IOBufVecQueue::IoVecVec based · 6a4d3877
      Dan Melnic authored
      Summary:
      Switch getReadBuffers to be IOBufVecQueue::IoVecVec based
      
      (Note: this ignores all push blocking failures!)
      
      Reviewed By: simpkins
      
      Differential Revision: D28467957
      
      fbshipit-source-id: 637bf07d516120cb2bab89c3cbc28f58b700748a
      6a4d3877
    • Giuseppe Ottaviano's avatar
      Fix skip pointer population in EliasFanoCoding · 2b7d6e1d
      Giuseppe Ottaviano authored
      Summary: Universe upper bound is inclusive, so we need to make sure that we have a pointer for `upperBitsUniverse / skipQuantum`. The bug has currently no effect as we use a tighter upper bound by reading the end of the list on construction, but it is necessary to fix this if we want to avoid doing that.
      
      Reviewed By: yfeldblum, philippv, luciang
      
      Differential Revision: D28886633
      
      fbshipit-source-id: ba53fcc3f2ae1d52fe8e39576ad930754282ddd9
      2b7d6e1d
    • Dan Melnic's avatar
      Add folly::IOBufIovecBuilder to be used with vector recv · 0adab1a9
      Dan Melnic authored
      Summary:
      Add folly::IOBufIovecBuilder to be used with vector recv
      
      (Note: this ignores all push blocking failures!)
      
      Reviewed By: simpkins
      
      Differential Revision: D28394781
      
      fbshipit-source-id: 973eea6e4cbe15d68d1f123d5fed98b50f5d23cc
      0adab1a9
    • Yedidya Feldblum's avatar
      cut diagnostic suppressions in exception_wrapper · 7e9fdf18
      Yedidya Feldblum authored
      Reviewed By: ot, luciang
      
      Differential Revision: D28250766
      
      fbshipit-source-id: 288c8c61d23c001dcb0d461d3d5179e82c755aaf
      7e9fdf18
    • Yedidya Feldblum's avatar
      fix a static-assert for C++20 · 14c2b1dc
      Yedidya Feldblum authored
      Summary:
      In C++20, `std::atomic` is no longer trivial. Change the static-assert that checks for its triviality to check instead for narrower properties.
      
      Fixes: https://github.com/facebook/folly/issues/1594.
      
      Reviewed By: ot, Mizuchi, luciang
      
      Differential Revision: D28856931
      
      fbshipit-source-id: e7ff4a1e80e59fdc78efb271f63c6325d5528416
      14c2b1dc
    • Yedidya Feldblum's avatar
      ProxyLockable revisions · d7389fcf
      Yedidya Feldblum authored
      Summary:
      * Rename from `proxy()` to `state()` and from `proxy_type` to `state_type`.
      * Require `state_type` to be semiregular and testable (convertible explicitly to `bool`). A default-constructed instance and an instance just after assignment from a default-constructed instance must test false.
      * Add `std::adopt_lock` constructor which can accept a `state_type`.
      
      Reviewed By: aary
      
      Differential Revision: D28724949
      
      fbshipit-source-id: 64fc29bd875dc24cc3fd62d1b4b86f7ebdacfb73
      d7389fcf
    • Yedidya Feldblum's avatar
      simplify exception_wrapper::handle · 6fd0d1b5
      Yedidya Feldblum authored
      Summary: By implementing it in terms of a param-pack expansion of calls to `with_exception`. No longer rethrows objects not derived from `std::exception`.
      
      Reviewed By: luciang
      
      Differential Revision: D28125669
      
      fbshipit-source-id: b9eef160cc03e2d6f5524c1a5113405cc2881324
      6fd0d1b5
    • Yedidya Feldblum's avatar
      implement exception_wrapper::with_exception directly · 98c2c6f1
      Yedidya Feldblum authored
      Summary: Rather than implementing it via `handle`, which is complex. Works now that exact casting can always be done without `catch`.
      
      Reviewed By: luciang
      
      Differential Revision: D27987594
      
      fbshipit-source-id: 9961b55089f58df1b06793390817e497c6da54ae
      98c2c6f1
    • Leander Schulten's avatar
      FindSodium: Do not create target unconditionally (#430) · 5ec574fe
      Leander Schulten authored
      Summary:
      This fixes  https://github.com/facebook/fbthrift/issues/429
      
      Pull Request resolved: https://github.com/facebook/fbthrift/pull/430
      
      Reviewed By: iahs
      
      Differential Revision: D28832985
      
      Pulled By: vitaut
      
      fbshipit-source-id: 0719f27207d11bb7970cc43c621640c425d8f55d
      5ec574fe
    • Yedidya Feldblum's avatar
      implement exception_wrapper::is_compatible_with<Ex> directly · 5e84ecec
      Yedidya Feldblum authored
      Summary: Rather than implementing it via `with_exception`, which is implemented in terms of `handle`, which is complex. Works now that exact casting can always be done without `catch`.
      
      Reviewed By: ot, luciang
      
      Differential Revision: D27987235
      
      fbshipit-source-id: 822b0fe168e3b55c506b88810e13573b87c381c7
      5e84ecec
    • Rustam Miftakhutdinov's avatar
      Add deadlock detector to folly and thrift server · cd2a2b28
      Rustam Miftakhutdinov authored
      Summary:
      - Add DeadlockDetector interface to folly/concurrency
      - Add IOThreadPoolDeadlockDetectorObserver class that can be registered in IOThreadPoolExecutor to enable the functionality for its threads that use EventBase.
      - In ThriftServer use the new observer with IOThreadPoolExecutor
      - Default implementation of deadlock detector is stubbed out and does not do anything
      
      Reviewed By: mshneer
      
      Differential Revision: D28582490
      
      fbshipit-source-id: 1cf3c2957b46de83f07c53bab708fe09ebbe2b79
      cd2a2b28
    • Yedidya Feldblum's avatar
      implement exception_wrapper::get_exception<Ex> directly · e1d5ba6e
      Yedidya Feldblum authored
      Summary: Rather than implementing it via `with_exception`, which is implemented in terms of `handle`, which is complex. Works now that exact casting can always be done without `catch`.
      
      Reviewed By: ot, luciang
      
      Differential Revision: D27987172
      
      fbshipit-source-id: eca54e47b3a0fc5da4614bbd23b881b1e35eca4b
      e1d5ba6e
    • Abdoul-Kader Keita's avatar
      Missing cmake cache variables (#1090) · 9859073e
      Abdoul-Kader Keita authored
      Summary: Pull Request resolved: https://github.com/facebookexternal/f4d/pull/1090
      
      Reviewed By: laithsakka
      
      Differential Revision: D28774321
      
      Pulled By: kkeita
      
      fbshipit-source-id: 2c8eb8edf69611e94bf124b52fc8c1e11df9b527
      9859073e