1. 21 Oct, 2019 2 commits
    • Nathan Bronson's avatar
      switch to RDTSC spin loop timing · c9d712c3
      Nathan Bronson authored
      Summary:
      The PAUSE instruction's latency varies widely across x64
      architectures, resulting in too much spinning on Skylake in some
      scenarios.  This diff switches to using cycle counts to limit spinning
      on x64, so that the minimum and maximum spin durations are independent
      of asm_volatile_pause's latency.
      
      Reviewed By: yfeldblum
      
      Differential Revision: D17961663
      
      fbshipit-source-id: 6170bfa48d007ca21b73b1a5c7e68da0043cda2c
      c9d712c3
    • Wez Furlong's avatar
      getdeps: don't use fbsource hash in the simple shipit fetcher · eddca91c
      Wez Furlong authored
      Summary:
      This avoids invalidating the entire build in response
      to just running `hg amend`, which is frustrating and slow.
      
      Reviewed By: chadaustin
      
      Differential Revision: D18005409
      
      fbshipit-source-id: ef93313859919298be78204046eb08bcadc5398e
      eddca91c
  2. 19 Oct, 2019 1 commit
    • Yedidya Feldblum's avatar
      Backport invocability variable templates · 88742563
      Yedidya Feldblum authored
      Summary: [Folly] Backport invocability variable templates: `is_invocable_v`, `is_invocable_r_v`, `is_nothrow_invocable_v`, `is_nothrow_invocable_r_v`. And for the member-invoke and free-invoke traits.
      
      Reviewed By: ericniebler
      
      Differential Revision: D17950331
      
      fbshipit-source-id: 5409d7a72116b0976573e1f64760c5ef9274966f
      88742563
  3. 18 Oct, 2019 4 commits
    • Mingtao Yang's avatar
      Make getSSLServerName() return SNI presented in CH, if available · d9b854ef
      Mingtao Yang authored
      Summary:
      If CH parsing is enabled, also parse out the ServerName extension. OpenSSL 1.1.1
      changes the behavior of `SSL_get_servername`: an SNI value is stored in
      the underlying SESSION if and only if both parties negotiated that SNI.
      
      There are some situations where one would wish to retrieve the original
      ServerName that the client sent.
      
      Reviewed By: knekritz
      
      Differential Revision: D17893443
      
      fbshipit-source-id: b29ee42e90629c869dd5e68c93c7cb2abc19745f
      d9b854ef
    • Lewis Baker's avatar
      Make folly::coro::collectAll() isolate RequestContext state of child tasks. · 615a44f0
      Lewis Baker authored
      Summary:
      No longer allow a child task's modifications to the RequestContext made before it's first suspension point to bleed into the next child task's context.
      
      Now always restore the parent task's RequestContext before starting subsequent tasks.
      
      Reviewed By: andriigrynenko
      
      Differential Revision: D17846070
      
      fbshipit-source-id: 44e206d4c833759fc36c7d1bd0f3545ca6bb9ab1
      615a44f0
    • Dan Melnic's avatar
      Relax DFATAL message · 368f00f0
      Dan Melnic authored
      Summary: Relax DFATAL message
      
      Reviewed By: yfeldblum
      
      Differential Revision: D18001089
      
      fbshipit-source-id: 2027d0257e1cba6905dc4eb1863b70a8fe6a7366
      368f00f0
    • Alexander Zinoviev's avatar
      trim, ltrim, rtrim functions with custom predicate · d0002eca
      Alexander Zinoviev authored
      Summary: trim, ltrim and rtrim are similar to ltrimWhitespace, rtrimWhitespace and trimWhitespace but you can specify what you want to remove
      
      Reviewed By: yfeldblum
      
      Differential Revision: D17946658
      
      fbshipit-source-id: 9bdc5e6eb810e628a8c16b5142c17a3313f884f2
      d0002eca
  4. 17 Oct, 2019 7 commits
    • Rodolfo Granata's avatar
      folly/executors: properly synchronize access to thread pool stats. · 8c7a26ad
      Rodolfo Granata authored
      Summary:
      ThreadPoolExecutor::getPoolStats depends on derived classes implementation.
      Calling `getPoolStats` is specially useful from `ThreadPoolExecutor::withAll`.
      
      This change moves registration of thread pool executor instances to derived classes
      to avoid `ThreadPoolExecutor::withAll` racing with thread pool destruction while calling `getPoolStats`.
      
      Reviewed By: yfeldblum
      
      Differential Revision: D17965135
      
      fbshipit-source-id: 637de55ed78b085dc86fffa0e0f4a66cd4cfcede
      8c7a26ad
    • Dan Melnic's avatar
      keepAliveRelease code reorg · e4519f66
      Dan Melnic authored
      Summary: keepAliveRelease code reorg
      
      Reviewed By: kevin-vigor
      
      Differential Revision: D17835172
      
      fbshipit-source-id: 48c60b04324f0d9bd1ac628e2625d3d4d2654c99
      e4519f66
    • Dan Melnic's avatar
      Add missing switch case · f6ca07e8
      Dan Melnic authored
      Summary: Add missing switch case
      
      Reviewed By: yfeldblum
      
      Differential Revision: D17945170
      
      fbshipit-source-id: 8128c40e1c86b2a5ff8d1bad3c0e9fe197adc174
      f6ca07e8
    • Wez Furlong's avatar
      getdeps: regard IOError as transient when fetching URLs · a9e811bd
      Wez Furlong authored
      Summary:
      this should help avoid this particular error:
      
      ```
      IOError: [Errno socket error] [Errno 11001] getaddrinfo failed
      ```
      
      Reviewed By: chadaustin
      
      Differential Revision: D17886598
      
      fbshipit-source-id: bd9f5b84ebd7ca5c339be3afec3a975fa907d052
      a9e811bd
    • Wez Furlong's avatar
      watchman: pass version info down to watchman build via environment · 4a9c487d
      Wez Furlong authored
      Summary:
      This diff allows passing a watchman version number override
      via the environment as well as via the cmake `WATCHMAN_VERSION_OVERRIDE`
      option.
      
      To help invalidate the build I've added a new section to the manifest
      files that allows listing out additional env vars that the project
      hashes should be sensitive to.  The effect of this is that we'll
      re-run the cmake configure step if the listed env vars are changed.
      
      Reviewed By: Ben0mega
      
      Differential Revision: D17865896
      
      fbshipit-source-id: 8ea5572b0b9b7af95ec5c310e494cb17a139ced4
      4a9c487d
    • Wez Furlong's avatar
      getdeps: constrain testpilot to our number of jobs · e009093f
      Wez Furlong authored
      Summary: testpilot's defaults assume a bigger machine than some of our laptops
      
      Reviewed By: fanzeyi
      
      Differential Revision: D17878120
      
      fbshipit-source-id: e01f1f9c77a4f5f011051c9c642dbe934c66bc0b
      e009093f
    • Lucas Dobson-Defenbaugh's avatar
      Check for existence of thread during getEventBase · a5bffff6
      Lucas Dobson-Defenbaugh authored
      Summary: During shutdown there's a race condition in IOThreadPoolExecutor::getEventBase where a thread is created in ensureActiveThreads, and then destroyed before pickThread() is called. This adds the same guard that exists in add().
      
      Reviewed By: yfeldblum
      
      Differential Revision: D17955227
      
      fbshipit-source-id: 042cb5c42056a9da4578571fb10936bbc477c4ff
      a5bffff6
  5. 16 Oct, 2019 7 commits
    • Eric Niebler's avatar
      add Folly portability macros for C++17 inline variables · fc88fcbf
      Eric Niebler authored
      Summary: Add a portability macro for testing whether the compiler supports C++17's inline variables.
      
      Reviewed By: yfeldblum
      
      Differential Revision: D17957184
      
      fbshipit-source-id: bff7d2bc15867e32f787860b4f8e5a0176ac1017
      fc88fcbf
    • Yedidya Feldblum's avatar
      Fix wrong definition of FOLLY_HAVE_GROUP_VARINT · bfdc0a57
      Yedidya Feldblum authored
      Summary: [Folly] Fix wrong definition of `FOLLY_HAVE_GROUP_VARINT` when group varint is unsupported.
      
      Reviewed By: Orvid
      
      Differential Revision: D17961015
      
      fbshipit-source-id: 3c82aaaf4b257180ab0956e4b181bfd619d7adda
      bfdc0a57
    • Matt Ma's avatar
      Fix folly Travis build caused by D17506766. · 91b375da
      Matt Ma authored
      Summary:
      /home/folly/folly/experimental/test/QuotientMultiSetTest.cpp:60:29: error:
      missing template arguments before 'reader'
           folly::QuotientMultiSet reader(data);
      
      Reviewed By: vitaut
      
      Differential Revision: D17959566
      
      fbshipit-source-id: 02fec44b3d644eea0213895aa4df70349ef7d062
      91b375da
    • Wei Liu's avatar
      Revert D17908896: Fix deadlock in Folly RCU · 58405477
      Wei Liu authored
      Differential Revision:
      D17908896
      
      Original commit changeset: 85847fc17f4a
      
      fbshipit-source-id: 9b2bd8c11881cad18cffea0e14349e25d743b150
      58405477
    • Rodolfo Granata's avatar
      ThreadPoolExecutor: throw in getPendingTaskCountImpl instead of pure virtual. · 560befd3
      Rodolfo Granata authored
      Summary:
      Calling `folly::ThreadPoolExecutor::withAll` is powerfull when combined with `folly::ThreadPoolExecutor::getPoolStats`.
      However getPendingTaskCountImpl being pure virtual can trigger `__cxa_pure_virtual ... std::terminate()` while object is partially destructed.
      
      This change signals implementors of derived clases to write a body for getPendingTaskCountImpl while allowing calling getPoolStats -> getPendingTaskCountImpl within a try/catch block.
      
      Reviewed By: yfeldblum
      
      Differential Revision: D17915523
      
      fbshipit-source-id: 2ffad7076313407969d88c75c7e457fa4e7e2d6d
      560befd3
    • Joe Loser's avatar
      Check if type is instantiation of a template (#1184) · 626871c3
      Joe Loser authored
      Summary:
      - There is not an easy way to check if a given type is an instantiation
        of a class template.
      - The common solution is to write a custom trait each time and
        specialize it for the given instantiation so that the trait returns
        `std:true_type`.
      - Add `is_instantiation_of` to help with DRY in custom traits for
        checking if a type is an instance of a given class template. Note that
        this does not work when the class template has a mix of type and
        non-type template parameters. It only works with types.
      Pull Request resolved: https://github.com/facebook/folly/pull/1184
      
      Reviewed By: vitaut
      
      Differential Revision: D16161679
      
      Pulled By: yfeldblum
      
      fbshipit-source-id: c933fd3db7c56f61b6784fdcd199ff7963d61d8f
      626871c3
    • Liu Cao's avatar
      Fix deadlock in Folly RCU · 06a918b7
      Liu Cao authored
      Summary:
      The deadlock repro is described https://github.com/facebook/folly/issues/1211.
      Fix is to check the working epoch before retire() starts the sync work.
      
      Reviewed By: yfeldblum
      
      Differential Revision: D17908896
      
      fbshipit-source-id: 85847fc17f4a75058d4a72c43dba0c570a2593d6
      06a918b7
  6. 15 Oct, 2019 7 commits
    • Felix Handte's avatar
      Expose Deleter in Context Pool · 6e0b5856
      Felix Handte authored
      Summary: As title.
      
      Reviewed By: yfeldblum
      
      Differential Revision: D17937014
      
      fbshipit-source-id: a0ff5f5f9cbbb182794dc564610d7adb9c7c8d08
      6e0b5856
    • Yedidya Feldblum's avatar
      Fix Json.SortKeys test when F14NodeMap may randomize · 628af5dd
      Yedidya Feldblum authored
      Summary: [Folly] Fix `Json.SortKeys` test when `F14NodeMap` may randomize table iteration order.
      
      Reviewed By: shixiao
      
      Differential Revision: D17903465
      
      fbshipit-source-id: 00f1a8c441af3e11815a4312f6dc810ec9455a5e
      628af5dd
    • Chad Austin's avatar
      poll more efficiently in Subprocess::waitTimeout · 3b62632c
      Chad Austin authored
      Summary:
      Unconditionally sleeping for 100ms in the wait polling loop has high average latency. If a process exits just after the initial wait() call, it's better to poll again sooner.
      
      Start with a 2ms sleep and double it every sleep, capping out at 100ms.
      
      Reviewed By: yfeldblum, mzhaom
      
      Differential Revision: D17769851
      
      fbshipit-source-id: efec8fdb8c2199b8db29b46b8c43fdaac56f69a8
      3b62632c
    • Chad Austin's avatar
      add Subprocess::waitOrTerminateOrKill · 16d41c4b
      Chad Austin authored
      Summary: `waitOrTerminateOrKill` fills the gap between `wait()` and `terminateOrKill`. It allows giving the subprocess a chance to shut down cleanly (after closing its stdin pipe, for example), but avoids waiting forever or leaking a child process.
      
      Reviewed By: yfeldblum, mzhaom
      
      Differential Revision: D17769090
      
      fbshipit-source-id: 8940fd63f7eb9c09ef293c89a5e97f69805735ff
      16d41c4b
    • Matt Ma's avatar
      Move QuotientMultiSet to folly/experimental/ · b797de38
      Matt Ma authored
      Summary:
      QuotientMultiSet is a space-efficient static data structure to store a non-decreasing sequence of b-bit integers.
      
      If the integers are uniformly distributed lookup is O(1)-time and performs a single random memory lookup with high probability.
      
      Reviewed By: ot
      
      Differential Revision: D17506766
      
      fbshipit-source-id: b3e7a22dd193672fadb07d4cccb8b01bedae7cf9
      b797de38
    • Joe Loser's avatar
      Document how to build tests in README (#1244) · ccd541a4
      Joe Loser authored
      Summary:
      - Document in the `README.md` how to build tests as part of the CMake build.
      
      Closes https://github.com/facebook/folly/issues/1240
      Pull Request resolved: https://github.com/facebook/folly/pull/1244
      
      Differential Revision: D17927395
      
      Pulled By: yfeldblum
      
      fbshipit-source-id: 6b638ac807886b505b69063f2a47162f3f3fc8de
      ccd541a4
    • Giuseppe Ottaviano's avatar
      Relax bit_cast requirements · d7dbd254
      Giuseppe Ottaviano authored
      Summary: The standard only requires `To` to be trivially copyable, not trivial.
      
      Reviewed By: yfeldblum
      
      Differential Revision: D17916612
      
      fbshipit-source-id: 80ae35672ea4664fe4204c8181ac6402065c4e03
      d7dbd254
  7. 14 Oct, 2019 5 commits
    • Lewis Baker's avatar
      Tweak to CollectAllBenchmark · 3b4a98dc
      Lewis Baker authored
      Summary: Made a slight tweak to the collectAll benchmark for the coroutine implementation to avoid allocating additional coroutine frames.
      
      Reviewed By: andriigrynenko
      
      Differential Revision: D17917156
      
      fbshipit-source-id: 890a2ab33eb53050930d4547119d30a9c161887e
      3b4a98dc
    • Chad Austin's avatar
      use std::chrono for Subprocess timeouts · d648e0bf
      Chad Austin authored
      Summary: std::chrono is less prone to error than specifying timeouts in `int` seconds.
      
      Reviewed By: yfeldblum, mzhaom
      
      Differential Revision: D17767787
      
      fbshipit-source-id: 5bb23d3a78e6e798e7b10331dc416e24d5a8746d
      d648e0bf
    • Chad Austin's avatar
      remove uses of Synchronized::operator-> · 816d933c
      Chad Austin authored
      Summary:
      Synchronized::operator-> is dangerous because it's very easy to
      implicitly acquire locks in ways that don't form a coherent locking
      model. Replace uses of it in folly in preparation for removing or
      marking the function deprecated later on.
      
      Reviewed By: yfeldblum
      
      Differential Revision: D17862465
      
      fbshipit-source-id: 45d3b0d738941c3faa6d73418e79dcb8a1259e98
      816d933c
    • Andrii Grynenko's avatar
      CollectAll benchmark · 4269fd6e
      Andrii Grynenko authored
      Reviewed By: yfeldblum
      
      Differential Revision: D17892633
      
      fbshipit-source-id: 1b4b2cffb040b1abf709ea2ccd4015426398dda0
      4269fd6e
    • Andres Suarez's avatar
      Yearless license header [2/2] · 15f1d999
      Andres Suarez authored
      Reviewed By: yfeldblum
      
      Differential Revision: D17889050
      
      fbshipit-source-id: 323a2a5796b4f06c2fe4c84a714a763aa3da4866
      15f1d999
  8. 13 Oct, 2019 3 commits
    • Yedidya Feldblum's avatar
      Apply extra formatting rules · 72850c2e
      Yedidya Feldblum authored
      Summary: [Folly] Apply extra formatting rules beyond black.
      
      Reviewed By: zertosh
      
      Differential Revision: D17898403
      
      fbshipit-source-id: 6d73c75a35513f138bcc0d734aada0c99cff54c7
      72850c2e
    • Yedidya Feldblum's avatar
      Apply black formatter to .py files · 77ab1491
      Yedidya Feldblum authored
      Summary: [Folly] Apply `black` formatter to `.py` files.
      
      Reviewed By: zertosh
      
      Differential Revision: D17898404
      
      fbshipit-source-id: b597b55b646e539a288d175e0b2db8111b5b103b
      77ab1491
    • Andres Suarez's avatar
      Yearless license header [1/2] · d2c64d94
      Andres Suarez authored
      Reviewed By: yfeldblum
      
      Differential Revision: D17889052
      
      fbshipit-source-id: e9733e6ab31d01064660043b0f4edc31b0f5377e
      d2c64d94
  9. 11 Oct, 2019 4 commits