1. 08 Jan, 2021 4 commits
    • Yedidya Feldblum's avatar
      let FunctionRef detect empty-callable · 8cf67ca0
      Yedidya Feldblum authored
      Summary: Let `folly::FunctionRef` detect empty-callable ctor arguments like `folly::Function` does. Handles pointers which may be nullptr.
      
      Reviewed By: luciang
      
      Differential Revision: D25840538
      
      fbshipit-source-id: 8cfccd57aa545ffc95807876d486ecf94aba8d62
      8cf67ca0
    • Giuseppe Ottaviano's avatar
      Mitigate lock contention in BlockingWaitExecutor · d973a73e
      Giuseppe Ottaviano authored
      Summary: `BlockingWaitExecutor::add` (and similarly `WaitExecutor`) posts the baton while holding the queue lock. If these happen in two different threads, the `drive()` thread wakes up while the lock is still held; the `add()` thread may be descheduled before the lock is released, causing the other thread to have to wait (and possibly sleep) for a while.
      
      Reviewed By: andriigrynenko
      
      Differential Revision: D25814620
      
      fbshipit-source-id: 07d3e9afdc4647e68f996e3f0a1c007fd1596611
      d973a73e
    • Greg Hogan's avatar
      Fix header filename in Overview (#1459) · 1be254ba
      Greg Hogan authored
      Summary: Pull Request resolved: https://github.com/facebook/folly/pull/1459
      
      Reviewed By: yfeldblum
      
      Differential Revision: D25730366
      
      Pulled By: Orvid
      
      fbshipit-source-id: d0fe94b1db6d81c0dabaa65de1483ea319669776
      1be254ba
    • Adam Simpkins's avatar
      fix a crash in AsyncSignalHandler destruction · 0ba2ee1f
      Adam Simpkins authored
      Summary:
      Update AsyncSignalHandler to check if the events are still registered before
      trying to unregister them during destruction.
      
      Without this check the code crashes if an AsyncSignalHandler is registered,
      and then the EventBase is destroyed before the AsyncSignalHandler is
      destroyed.  When the EventBase is destroyed the AsyncSignalHandler's event
      will be automatically unregistered, so `eb_event_del()` should not be called
      again here, and calling it triggers a crash by attempting to dereference the
      now-destroyed EventBase.
      
      This change makes AsyncSignalHandler behave more like the AsyncTimeout and
      EventHandler objects, which both support destroying the EventBase before these
      objects.
      
      Differential Revision: D25837541
      
      fbshipit-source-id: a1c44ab442b9078bf84a51be2cced432d247f6cd
      0ba2ee1f
  2. 07 Jan, 2021 8 commits
    • Yedidya Feldblum's avatar
      restrict FOLLY_HAVE_WEAK_SYMBOLS · 99330de1
      Yedidya Feldblum authored
      Summary: Restrict `FOLLY_HAVE_WEAK_SYMBOLS` by requiring not just that use of gnu weak symbols will compile but also that it will link and run when no definition is available for a weak declaration.
      
      Reviewed By: luciang
      
      Differential Revision: D25788660
      
      fbshipit-source-id: 52447601257242cd713ac5cd70e900e3738a9770
      99330de1
    • Misha Shneerson's avatar
      Only observe lag on tasks with Thrift's folly::RequestContext attached to it. · 9e3e7456
      Misha Shneerson authored
      Reviewed By: andriigrynenko
      
      Differential Revision: D25814958
      
      fbshipit-source-id: abc2448bf93c5016411629936a8c7f06bb0033e6
      9e3e7456
    • Yedidya Feldblum's avatar
      add kHasWeakSymbols · add97bf4
      Yedidya Feldblum authored
      Summary: Add `kHasWeakSymbols` to `folly/Portability.h` so that downstream call-sites may detect availability of weak symbols at compile time in normal C++.
      
      Reviewed By: luciang
      
      Differential Revision: D25788659
      
      fbshipit-source-id: 66768486317986396440099adecfc8dc8e553c7c
      add97bf4
    • Mingtao Yang's avatar
      Remove bad CertificateIdentityVerifier test. · ea46f07e
      Mingtao Yang authored
      Summary:
      The certificate identity verifier is meant to verify the end entity certificate
      in a certificate chain. It assumes that OpenSSL has already validated that
      the end entity has a valid signature by an issuer.
      
      The test that I am removing is asserting buggy behavior in OpenSSL prior to
      version OpenSSL 1.1.1i. The test scenario sets up a client *without a certificate
      store* connecting to a server. When the client attempts to validate this
      certificate chain, it will receive two errors:
      
      1. Unable to find issuer locally. Because the test server's certificate is signed
         by an issuer that is not present in the client's (empty) certificate store,
         while trying to determine the issuer during chain building, OpenSSL fails as
         expected. Because the test scenario *intentionally* overrides this error by
         returning `true` in `handshakeVer`, OpenSSL continues its certificate
         validation procedure.
      
      2. Unable to verify leaf signature. In order to validate the signature for a
         certificate, one needs to know the public key of the issuer. However, the
         client does not know about the issuer. Control flow would normally not reach
         here, but the client chose to continue the validation process without knowing
         the issuer in step 1. The test scenario forcefully returns "true" here, telling
         OpenSSL to continue.
      
      Prior to OpenSSL 1.1.1i (specifically commit [2e06150e](https://github.com/openssl/openssl/commit/2e06150e3928daa06d5ff70c32bffad8088ebe58)),
      OpenSSL would stop the verification procedure here. It would never signal the
      completion of the verification procedure (by sending `preverify_ok=1`).
      
      The test was asserting that this was expected. This meant that the test was
      asserting behavior on an incorrect implementation. With OpenSSL 1.1.1i, if
      all previous `handshakeVer` callbacks say that the certificate is fine, then
      OpenSSL will perform the final call with `preverify_ok=1`, which will cause the
      CertificateIdentityVerifier to be invoked.
      
      Differential Revision: D25775428
      
      fbshipit-source-id: 8a5f388ce2eb9a8d5667fd4e840b6b223e618d43
      ea46f07e
    • Mingtao Yang's avatar
      Fix SSL tests due to verifier behavior changes in OpenSSL 1.1.1i · 0ab97552
      Mingtao Yang authored
      Summary:
      Some tests were relying on internal OpenSSL behavior that changed in OpenSSL
      1.1.1i.
      
      OpenSSL commit [2e06150e](https://github.com/openssl/openssl/commit/2e06150e3928daa06d5ff70c32bffad8088ebe58)
      causes additional `handshakeVer` callback invocations. If an UNABLE_TO_VERIFY_LEAF_SIGNATURE handshakeVer
      callback overrides the result to *true*, OpenSSL will now continue to perform certificate
      verifications **as if the overriden cert was the properly found root**. This means:
      
      * It is subject to certificate expiration checks, and,
      * A final `handshakeVer` callback is invoked with `preverifyOk=1` when it passes the expiration checks.
      
      Several of our tests that relied on `handshakeVer` only being called *once* broke. Since the tests
      are testing a different, higher level aspect of verification (i.e. it is not actually trying to
      test how many times `handshakeVer` is being called), I've relaxed some of the expectations to allow
      for multiple invocations.
      
      CertificateVerifier semantics were also affected. Because there is a final
      successful `handshakeVer` callback that is issued, it is not just sufficient
      to check for depth and preverifyOk before invoking the CertificateVerifier.
      
      Reviewed By: pixelb
      
      Differential Revision: D25775429
      
      fbshipit-source-id: 98d35249a623307fb1de366c498b1dbae4fabf82
      0ab97552
    • Mingtao Yang's avatar
      Fix build failure in SSLContextRegressionTest · 6aa911b4
      Mingtao Yang authored
      Differential Revision: D25759768
      
      fbshipit-source-id: c0d38b25ab74bfce82c3d5e1339bd4ceef98af14
      6aa911b4
    • Lucian Grijincu's avatar
      folly: symbolizer: check if findSubProgramDieForAddress found the... · bc7d7abf
      Lucian Grijincu authored
      folly: symbolizer: check if findSubProgramDieForAddress found the DW_TAG_subprogram for address & terminate DFS early
      
      Summary:
      It's legal that a CU has `DW_AT_ranges` listing all addresses, but not have a `DW_TAG_subprogram` child DIE for some of those addresses.
      
      Check for `findSubProgramDieForAddress` success before reading potentially empty `subprogram` attributes in `eachParameterName`.
      
      This is a bugfix. If `DW_TAG_subprogram` is missing, we read attributes for using offsets in the uninitialized DIE `subprogram`.
      
      Initialize all struct members to avoid wasting time debugging uninitialized memory access (had fun with uninitialized `subprogram.abbr.tag` magically picking up `DW_TAG_subprogram` or garbage on the stack from previous calls).
      
       ---
      
      Terminate `findSubProgramDieForAddress` DFS on match.
      
      Before:
      - when the DW_TAG_subprogram DIE was found we stopped scanning its direct siblings (the above "return false" when `pcMatch` or `rangeMatch` are true).
      - but when we returned from recursion in the parent DIE we discarded the fact that we found the DW_TAG_subprogram and continued the DFS scan through all remaining DIEs.
      
      After:
      - after finding the DW_TAG_subprogram that owns that address the scan stops.
      
      As reference when using `-fno-debug-types-section` type info is part of `.debug_info`.
      
      ```
      namespace folly::symbolizer::test {
      void function_A();
      class SomeClass { void some_member_function() {} };
      void function_B();
      } // folly::symbolizer::test
      ```
      
      ```
      0x0000004c:   DW_TAG_namespace [2] *
                      DW_AT_name [DW_FORM_strp]       ( "folly")
      
      0x00000051:     DW_TAG_namespace [2] *
                        DW_AT_name [DW_FORM_strp]     ( "symbolizer")
      
      0x00000056:       DW_TAG_namespace [2] *
                          DW_AT_name [DW_FORM_strp]   ( "test")
      
      0x0000012e:         DW_TAG_subprogram [7] *
                            DW_AT_name [DW_FORM_strp] ( "function_A")
      
      0x0000022d:         DW_TAG_class_type [14] *
                            DW_AT_name [DW_FORM_strp] ( "SomeClass")
      
      0x00000243:           DW_TAG_subprogram [16] *
                              DW_AT_name [DW_FORM_strp]       ( "some_member_function")
      
      0x000002ed:         DW_TAG_subprogram [9] *
                            DW_AT_name [DW_FORM_strp] ( "function_B")
      ```
      
      Before:
      - if `address` corresponds to code inside `SomeClass::some_member_function` we stopped iterating over `SomeClass::some_member_function`'s sibling DIEs, and returned.
      - but we still continued scanning over `SomeClass`'s sibling DIEs and all their children recursively (DFS), and then `SomeClass`'s parents siblings etc until reaching the end of the CU
      
      After:
      - we stop DFS on match
      
      FWIW: trees are somewhat flatter when using `-fdebug-types-section`: member functions are extracted from their classes, but they're still part of namespace subtrees so the code unnecessarily explored siblings of the innermost namespace.
      
      Differential Revision: D25799618
      
      fbshipit-source-id: 9a0267e12a7d496ad00263bf30a12dc548764288
      bc7d7abf
    • Nathan Lanza's avatar
      Convert implicit cast from `long` to `double` to a `static_cast` · 5a9b1bb0
      Nathan Lanza authored
      Summary:
      This code implicitly casts a `long` to `double` but a `double`
      can not accurately represent an integer above `2^53` as
      the mantissa only stores that many digits. At `2^53 + 1`
      `double`s increment by `2`. Thus this cast is lossy. Though,
      casting a single value `LONG_MAX` to a `double` is and
      being off by one doesn't cause any harm here.
      
      Reviewed By: ispeters
      
      Differential Revision: D25654006
      
      fbshipit-source-id: 3d84092f1786d7879dd48d73af8edbbc80bb3585
      5a9b1bb0
  3. 06 Jan, 2021 4 commits
    • Lucian Grijincu's avatar
      folly::symbolizer: drop templated FrameArray from test functions and move test... · 8f2210a5
      Lucian Grijincu authored
      folly::symbolizer: drop templated FrameArray from test functions and move test functions to separate compilation unit with minimal dependencies
      
      Summary:
      Eliminate `#include` dependencies of `SymbolizerTestUtils.cpp` so that the `.o` file with interesting debug info is tiny and easily inspectable.
      - Instead of calling test functions that need to be inlined from the `SymbolizerTest.o` use `call_` trampolines so that the inlined debug info is generated in the minimal/tiny `SymbolizerTestUtils.o`.
      
       ---
      
      Remove the frames template argument so that:
      - removed dependencies from the SymbolizerTestUtils to minimize generated debug info (no longer need to include headers about FrameArray).
      - all functions used in tests can be made regular functions
      - all functions who's debug info is interesting to debug can be easily emitted in a single object file `SymbolizerTestUtils.o`
      
      Reduce some of the copy-pasta that made test noisy by grouping together function name, file and lineno.
      
       ---
      
      Test for either fullName/shortName (`DW_AT_linkage_name`/`DW_AT_name`)
      - fullName: demangled function name with namespace, qualifiers, argument types, etc. and
      - shortName: simple function name to support both cases when either both `DW_AT_linkage_name` and `DW_AT_name` or a single one of them is emitted.
      - When `DW_AT_linkage_name` (full mangled name) and `DW_AT_name` (just the function name) match, DWARF emitters omit `DW_AT_linkage_name` (to save space). With `-fsplit-dwarf-inlining` only `DW_AT_name` is emitted in `.debug_info` and the `DW_AT_linkage_name` is emitted in the `.debug_info.dwo` sections.
      
      Differential Revision: D25712808
      
      fbshipit-source-id: 88d2ac22564e3d607fb3864d37e49892a5eaf002
      8f2210a5
    • Andrew Huang's avatar
      Set default minimum TLS version in SSLContext to TLS 1.2 · 731276a4
      Andrew Huang authored
      Reviewed By: yfeldblum
      
      Differential Revision: D25527140
      
      fbshipit-source-id: 2a2721ca4418e1a4c57f621f41716e5c8f27869c
      731276a4
    • Yair Gottdenker's avatar
      Adding logs to connect error/success · 17468b65
      Yair Gottdenker authored
      Summary:
      Small change - adding  logs to connect error/success and eliminating the unnecessary ones.
      
      (Note: this ignores all push blocking failures!)
      
      Reviewed By: yfeldblum
      
      Differential Revision: D25481273
      
      fbshipit-source-id: 437942803bc895bba2eaa36e5eaf104503012d12
      17468b65
    • Misha Shneerson's avatar
      add priorities support to thread manager executor adapter · f07f33e5
      Misha Shneerson authored
      Summary:
      Adding priorities to `ThreadManagerExecutorAdapter`. The API allows to pass single executor that would be used for all priorities (preserved behavior) but also allows to add custom executors per-priority. In this case, if no executor has been provided for priority, we will spin up default thread manager implementation (which supports upstream queues).
      
      We soon will add upstream queues on top of user-provided executors as well.
      
      Reviewed By: prshreshtha
      
      Differential Revision: D25137444
      
      fbshipit-source-id: db0740a705dd3cca69916f3d1b8c4e32c011aa43
      f07f33e5
  4. 05 Jan, 2021 4 commits
    • Scott Pruett's avatar
      allow callbacks to be set and called on updates · 5398ad14
      Scott Pruett authored
      Summary:
      Allow callbacks to be attached to a SettingCore (via SettingWrapper),
      with lifetime managed by a guard object which automatically unregisters
      the callback at destruction. This provides an API for clients to react
      to changes in settings without polling.
      
      Reviewed By: yfeldblum
      
      Differential Revision: D25592427
      
      fbshipit-source-id: a11a98ed651ef56a0fc86f5f5e4ed235f2289746
      5398ad14
    • Katie Mancini's avatar
      Exend XLOG_EVERY_N use · a7c84c39
      Katie Mancini authored
      Summary:
      the n argument in XLOG_EVERY_N is not captured by it's lambda, so
      expressions using local variables can not be passed as n. EdenFS has
      a use case where we would like to use local variables here. We want to use a
      dynamic config value for n, so that we can easily adjust how often we log
      see: D25505654.
      
      It seems like it should be ok to capture the n here, but I am by no means a
      macro expert, so please let me know if there is a tricky cpp thing here lurking
      that makes capturing n bad.
      
      Reviewed By: simpkins
      
      Differential Revision: D25551033
      
      fbshipit-source-id: e82fa465823d3d2ee2ac26924cc4a93b7b7242dd
      a7c84c39
    • Dan Melnic's avatar
      Fix OSS build - move struct/enums into their own namespace · e127df07
      Dan Melnic authored
      Summary: Fix OSS build - move struct/enums into their own namespace
      
      Reviewed By: danobi, lnicco
      
      Differential Revision: D25769992
      
      fbshipit-source-id: 1e337820edbd986bdd47099cf8af942698e6fc75
      e127df07
    • Evgeny Fiksman's avatar
      Explicitly name hazptr thread pool (#1512) · 0cc9b77f
      Evgeny Fiksman authored
      Summary:
      Pull Request resolved: https://github.com/facebook/folly/pull/1512
      
      Hazptr library creates its own CPU executor which name interfere with default executor name. We want to avoid this.
      Also insure that the thread is permanent, otherwise folly runtime may destroy and recreate it periodically.
      
      Reviewed By: magedm
      
      Differential Revision: D25708252
      
      fbshipit-source-id: 2b41ad4fa28d2ba9c9bd69bc5d4a02b933d79e66
      0cc9b77f
  5. 04 Jan, 2021 1 commit
  6. 01 Jan, 2021 1 commit
  7. 29 Dec, 2020 2 commits
  8. 28 Dec, 2020 3 commits
    • Yedidya Feldblum's avatar
      let AsyncPipe::create return the correct type · a1251f06
      Yedidya Feldblum authored
      Summary: Let `AsyncPipe::create` return the correct pipe type, namely, the type on which it is a member rather than a different instantiation of the template.
      
      Reviewed By: iahs
      
      Differential Revision: D25717180
      
      fbshipit-source-id: 94a5a657e83b5d4cac866277ec5925c0b5b0af28
      a1251f06
    • Orvid King's avatar
      Include <optional> where required · 33df23f4
      Orvid King authored
      Summary: Using std::optional requires including it first.
      
      Reviewed By: yfeldblum
      
      Differential Revision: D25704383
      
      fbshipit-source-id: 755dfd4a6dec9695cb0ed156166d13b550fd8b40
      33df23f4
    • Lewis Baker's avatar
      Add co_current_async_stack_trace awaitable · 184d54bb
      Lewis Baker authored
      Summary:
      Adds a new awaitable that extracs the current async stack-trace as a vector
      of program counters from within the current coroutine.
      
      Usage:
      ```
      std::vector<std::uintptr_t> programCounters =
        co_await folly::coro::co_current_async_stack_trace;
      ```
      
      Reviewed By: andriigrynenko
      
      Differential Revision: D21130683
      
      fbshipit-source-id: bf67a9969f73bdb8b91b4cc2858883b8e87762e2
      184d54bb
  9. 27 Dec, 2020 1 commit
    • Efrat Lewis's avatar
      AsyncSocket facility to read ancillary data · 7a2b83b4
      Efrat Lewis authored
      Summary: Defined new callback - ReadAncillaryDataCallback, which enables getting ancillary data when receive a message using recvmsg API.
      
      Reviewed By: cgrushko
      
      Differential Revision: D24246707
      
      fbshipit-source-id: 3363b5fafe8d370cf5560afe00476fc8ea723e7a
      7a2b83b4
  10. 26 Dec, 2020 1 commit
  11. 25 Dec, 2020 3 commits
  12. 24 Dec, 2020 1 commit
    • Dan Melnic's avatar
      Fix gso typo · d99290f5
      Dan Melnic authored
      Summary:
      Fix gso typo
      
      (Note: this ignores all push blocking failures!)
      
      Reviewed By: kevin-vigor
      
      Differential Revision: D25699054
      
      fbshipit-source-id: bac1a7a5c13efa5a58ecec11edf72c500b0783b5
      d99290f5
  13. 23 Dec, 2020 3 commits
    • Yedidya Feldblum's avatar
      add co_cancelled · 0c47744a
      Yedidya Feldblum authored
      Summary: [folly] Add `co_cancelled`, effectively a shorthand for `co_error(OperationCancelled{})`.
      
      Reviewed By: Mizuchi, lewissbaker
      
      Differential Revision: D25627993
      
      fbshipit-source-id: 91f80772a8b179a4de0fe3b29dfe7eecaafb8e1b
      0c47744a
    • Dan Melnic's avatar
      Fix nullptr dereference · 590d4349
      Dan Melnic authored
      Summary: Fix nullptr dereference
      
      Reviewed By: kevin-vigor
      
      Differential Revision: D25687105
      
      fbshipit-source-id: 59b0f3e4adc810f6e1a89447667cd167c52f7fb5
      590d4349
    • Andrii Grynenko's avatar
      Replace after-fork-use DFATAL with ERROR · 69bbfc4b
      Andrii Grynenko authored
      Differential Revision: D25683616
      
      fbshipit-source-id: 7f199b0e43e0a5a76c4cf16412b22abdc28833ac
      69bbfc4b
  14. 22 Dec, 2020 4 commits
    • Yedidya Feldblum's avatar
      fix Arena bytes-used accounting across merge · e124ab8e
      Yedidya Feldblum authored
      Summary: Fix `Arena` bytes-used accounting across calls to member `merge`.
      
      Reviewed By: luciang
      
      Differential Revision: D25656949
      
      fbshipit-source-id: b230b0cdbf51b146fd566cbf688f49817bdf874d
      e124ab8e
    • Yedidya Feldblum's avatar
      rename coro Error.h to Result.h · 37f3868a
      Yedidya Feldblum authored
      Summary: [folly] Rename coro `Error.h` to `Result.h` since it has multiple result types.
      
      Reviewed By: Mizuchi
      
      Differential Revision: D25625178
      
      fbshipit-source-id: 45f8194922b764429969329563a4695b1c13da6f
      37f3868a
    • Yedidya Feldblum's avatar
      fix Arena bytes-used accounting across clear · 4c2177f5
      Yedidya Feldblum authored
      Summary: Fix `Arena` bytes-used accounting across calls to member `clear` after a sequence of all-large allocations.
      
      Reviewed By: luciang
      
      Differential Revision: D25656875
      
      fbshipit-source-id: e79aca5f58b61bf1bd4790f8badd0dad6063a6ed
      4c2177f5
    • Andrii Grynenko's avatar
      Detect singletons that are created in parent process and used in child process · c55c0192
      Andrii Grynenko authored
      Summary: folly::Singleton is used for singletons that manage resources (thread, fds etc.) and it's generally not safe to use previously created folly::Singletons in child process after fork.
      
      Reviewed By: yfeldblum
      
      Differential Revision: D25292667
      
      fbshipit-source-id: 5343d26c72bb9203429a918a3bb5d458c44e9f3b
      c55c0192