- 15 Jan, 2021 1 commit
-
-
Niles Rogoff authored
Summary: This took a lot of cmake fuckery. I am guessing it will break the current travis-ci.org based build, since it no longer downloads gflags. As I put this diff up, mvfst (a dependency of quic (a dependency of proxygen)) is not building right now due to another diff - a fix is in progress but isn't landed yet. I applied the fix locally for the test plan, but didn't include it in the diff. Reviewed By: snarkmaster Differential Revision: D25651851 fbshipit-source-id: b4f15ac7fa5293123710fe367c20d355c0970c42
-
- 14 Jan, 2021 1 commit
-
-
Pranjal Raihan authored
Summary: `folly::MicroLock` is actually 4 locks, each using 2 bits. In cases we don't need all the slots, we can use the other bits to store some data which is loaded/stored atomically with locking and unlocking. There is no change in existing `MicroLock` usage behavior. Reviewed By: davidtgoldblatt Differential Revision: D25842148 fbshipit-source-id: 5f6ff705c35529d279629ccc256a9c210907ea5c
-
- 13 Jan, 2021 3 commits
-
-
Pranjal Raihan authored
Summary: This was forgotten in a refactor. Reviewed By: Mizuchi Differential Revision: D25903164 fbshipit-source-id: 419131987a886f0d8d057b5b04b012d1162e564d
-
Pedro Eugenio Rocha Pedreira authored
Summary: `extra_cmake_defines` are extra flags that are passed to cmake when compiling each one of the dependencies. For instance: ``` $ ./opensource/fbcode_builder/getdeps.py build f4d --extra-cmake-define='{"CMAKE_CXX_FLAGS": "-mavx2 -mfma -mavx -mf16c -march=native"}' ``` It takes a json map as input, which can take a list of defines (key value pairs). Reviewed By: wez Differential Revision: D25855781 fbshipit-source-id: 7f4fef2c66f4d12f23c8d7086d6a4f24fcc01ff7
-
Michael Park authored
Summary: This patch performs SFINAE-friendly invocation in `FOLLY_CREATE_STATIC_MEMBER_INVOKER` in order for invocability tests to return `false` in the situation where the member is not even available. For example, given: ``` FOLLY_CREATE_STATIC_MEMBER_INVOKER(foo_invoker, foo); ``` With this diff, something like `std::is_invocable_v<foo_invoker, HasNoFoo>` yields `false` rather than a compilation error. This brings `FOLLY_CREATE_STATIC_MEMBER_INVOKER` in line with `FOLLY_CREATE_FREE_INVOKER` and `FOLLY_CREATE_MEMBER_INVOKER`. Reviewed By: yfeldblum Differential Revision: D25878262 fbshipit-source-id: 150ae6b2c71941317bc02de20720fed014639bf5
-
- 12 Jan, 2021 6 commits
-
-
Pranjal Raihan authored
Summary: The lazy initialization logic can now be simplified. Reviewed By: andriigrynenko Differential Revision: D25675031 fbshipit-source-id: 048328220a2b02c13a672bebe47b79521d5f5e7a
-
Pranjal Raihan authored
Summary: `folly::DelayedInit` serves a similar use case to `folly::Lazy` but is suitable for data members and is thread-safe. The summary in `DelayedInit.h` provides a good overview. Reviewed By: andriigrynenko Differential Revision: D25671587 fbshipit-source-id: 1933b15fdc7207a52067658188ca4d5724d9c40b
-
Victor Zverovich authored
Summary: Migrate a couple of uses of Folly Format to fmt. Reviewed By: simpkins Differential Revision: D20152350 fbshipit-source-id: fb9798f5ff458ee03e1c01f839dc1c55796d0eaa
-
Yinan Zhang authored
Summary: This utility is meant for usage cases where - the same `mallctl` command is called many times, and - performance is important. Reviewed By: yfeldblum Differential Revision: D23638723 fbshipit-source-id: 6cab9acb1121ef4f46bf7acbe29d3877005b66b1
-
Alfred Fuller authored
Summary: All changes were automated Reviewed By: Orvid Differential Revision: D25507587 fbshipit-source-id: fe757e6919793e9b8b28d6c1ce6f064d7e2623fb
-
Pranav Thulasiram Bhat authored
Summary: See docblock in new test. If the FiberManager weakref is created after the AsyncioExecutor weakref, then the native FiberManager object may be destroyed without being drained. Unfortunately, there's no way to enforce an ordering between the destructors here (since weakrefs are cleaned up in inverse order of creation). This diff adds a `__dealloc__` method to AsyncioExecutor to drain the native FiberManager Reviewed By: yfeldblum Differential Revision: D25797920 fbshipit-source-id: d1a548ebd67e7d9153eb43b169bf009a6a986e68
-
- 11 Jan, 2021 3 commits
-
-
Shai Szulanski authored
Summary: Update name to match usage of Try as tri-state, since this method also throws if the Try is empty Reviewed By: yfeldblum Differential Revision: D25737810 fbshipit-source-id: a4166153362f07353d212216fbaf7105867eef2a
-
Yedidya Feldblum authored
Summary: Tweak `is_coroutine_handle` detail trait. No need for leading `_` and let it be a trait variable. Reviewed By: iahs Differential Revision: D25864424 fbshipit-source-id: 2f0723fcb3c97c6a0972056999f1d9574695c30b
-
Andrii Grynenko authored
Summary: 1. Patch the test to remove racy behavior 2. Added another test for a case where the timeout is hit. Reviewed By: yfeldblum Differential Revision: D25854609 fbshipit-source-id: c1694e5b46b9645dc3e71a12ddc8ed12e8cf270c
-
- 10 Jan, 2021 2 commits
-
-
Dan Melnic authored
Summary: Fix typo Reviewed By: yfeldblum Differential Revision: D25861463 fbshipit-source-id: c24a521572229cbc5892a4da10999dcff94741c7
-
Andres Suarez authored
Reviewed By: igorsugak Differential Revision: D25849195 fbshipit-source-id: 611df723a38b5c2a7ba5184c63fdeeed1ed27025
-
- 09 Jan, 2021 5 commits
-
-
Chang Kyu Lee authored
Summary: Adds a test for ConcurrentHashMap::reserve(). Reviewed By: magedm Differential Revision: D25853643 fbshipit-source-id: 39404105c88d6dc38cdd0b399c646affad1b26e0
-
Maged Michael authored
Summary: Fixes a bug when a call to reserve leads to calling rehash with a buck_count value that is not a power of two and/or less than the current count. The rehash algorithm depends on the bucket_count being a power of two and that the count does not decrease. The fix: Ensure that reserve calls rehash with a power of two argument and that rehash is skipped if the new count is not greater than the old one. Reviewed By: davidtgoldblatt Differential Revision: D25852794 fbshipit-source-id: ae1ae6cfbcbd0659becc14c703920e9505181109
-
Alfred Fuller authored
Summary: All changes were automated Reviewed By: Orvid Differential Revision: D25507562 fbshipit-source-id: ffed8f0e41d3581242b4e8e00bfd1fa6ee3e299b
-
Alex Guzman authored
Summary: Sets out the foundation of io_uring support into fizz and enables support in the fizz tool Reviewed By: mingtaoy Differential Revision: D23592810 fbshipit-source-id: 6f995c99541bc2aeca3cdfb7d84ebd2d25eb1f5e
-
Andrii Vasylevskyi authored
Summary: Same code as in oneIn() explicit check for arg 0, 1. Reviewed By: yfeldblum Differential Revision: D25838957 fbshipit-source-id: 36ead588e435f116d0870ba45a181979c591c3f2
-
- 08 Jan, 2021 5 commits
-
-
Andrii Grynenko authored
Reviewed By: yfeldblum Differential Revision: D25689803 fbshipit-source-id: 0d5f6093d814c58e2d90f9042b7bad65ff8d8ade
-
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
-
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
-
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
-
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
-
- 07 Jan, 2021 8 commits
-
-
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
-
Misha Shneerson authored
Reviewed By: andriigrynenko Differential Revision: D25814958 fbshipit-source-id: abc2448bf93c5016411629936a8c7f06bb0033e6
-
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
-
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
-
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
-
Mingtao Yang authored
Differential Revision: D25759768 fbshipit-source-id: c0d38b25ab74bfce82c3d5e1339bd4ceef98af14
-
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
-
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
-
- 06 Jan, 2021 4 commits
-
-
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
-
Andrew Huang authored
Reviewed By: yfeldblum Differential Revision: D25527140 fbshipit-source-id: 2a2721ca4418e1a4c57f621f41716e5c8f27869c
-
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
-
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
-
- 05 Jan, 2021 2 commits
-
-
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
-
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
-