1. 15 Sep, 2020 6 commits
    • Yedidya Feldblum's avatar
      Cache python-import in getExecutor · 841d5087
      Yedidya Feldblum authored
      Summary: [Folly] Cache python-import in `getExecutor` so that it happens only once overall rather than once per call.
      
      Reviewed By: nanshu
      
      Differential Revision: D23657508
      
      fbshipit-source-id: 06d3bd53303cac9c10fff74f4e6daaeccdc59471
      841d5087
    • Luca Niccolini's avatar
      googletest 1.8.0 · 3fdcf359
      Luca Niccolini authored
      Summary: required. not installed with CMake ExternalProject anymore
      
      Reviewed By: xttjsn
      
      Differential Revision: D23700095
      
      fbshipit-source-id: 807105a1e3d4bd837a35e39c6dced53744edd8de
      3fdcf359
    • Luca Niccolini's avatar
      enable tests in getdeps · 9f72af22
      Luca Niccolini authored
      Summary:
      in getdeps we currently don't build and run the tests
      There are a few issues:
        1. we need to also build tests for fizz, wangle, mvfst since proxygen tests include headers only exported if building tests in dependencies
        2. we use `ExternalProject_add` for gtest/gmock. but doesn't seem to be playing nicely with getdeps
      
      Reviewed By: dddmello, mjoras
      
      Differential Revision: D16934955
      
      fbshipit-source-id: fb1c52237f9f0c71da86643409972c94d16e6a71
      9f72af22
    • Luca Niccolini's avatar
      enable tests in getdeps · 7bb0963b
      Luca Niccolini authored
      Summary: properly find the required GMock version (1.8.0) and allow building tests in getdeps
      
      Reviewed By: mjoras
      
      Differential Revision: D16935741
      
      fbshipit-source-id: 46f62511e2feaf553d028e286a862aa5b30393c6
      7bb0963b
    • Luca Niccolini's avatar
      enable tests in getdeps · 35cb6568
      Luca Niccolini authored
      Summary: also always install fizz test headers for mvfst and proxygen tests to consume without needing to build fizz tests
      
      Reviewed By: yfeldblum
      
      Differential Revision: D23676344
      
      fbshipit-source-id: 7ae78c81c2d67bb8da135fcd69d4be119b50a27e
      35cb6568
    • Luca Niccolini's avatar
      fizz, mvfst, wangle, proxygen: add gmock as fbcode_build dependency · 0e50cd03
      Luca Niccolini authored
      Summary: they were all transitively pulling it from folly
      
      Reviewed By: mjoras
      
      Differential Revision: D23683292
      
      fbshipit-source-id: 2085a580584891b3fd0960c14505c0f675a11bd5
      0e50cd03
  2. 14 Sep, 2020 5 commits
    • Sotirios Delimanolis's avatar
      Add a CertificateIdentityVerifier to AsyncSSLSocket · 25e3fd32
      Sotirios Delimanolis authored
      Summary:
      This diff introduces a callback, `CertificateIdentityVerifier` that can probe peer end-entity certificates during a TLS handshake in `AsyncSSLSocket`.
      
      The verifier gets called only if regular chain verification (OpenSSL's and a `HandshakeCB`'s) succeeds and can return a `Try` with a `CertificateIdentityVerifierException` to indicate that a failure occurred. `AsyncSSLSocket` will then fail the TLS handshake.
      
      The diff also adds a new `AsyncSSLSocket` constructor with a new `Options` parameter that groups together some optional properties, including the verifier. We can eventually refactor the other constructors to use it too.
      
      Reviewed By: mingtaoy
      
      Differential Revision: D22821714
      
      fbshipit-source-id: b63b141862b5703eb5274fb6ef8aa98934a55df0
      25e3fd32
    • Chad Austin's avatar
      fix exception_tracer build on macOS · 0666e8d5
      Chad Austin authored
      Summary:
      exception_tracer is currently gated on FOLLY_USE_SYMBOLIZER, and when
      I enabled it, I didn't notice the CMake build of Folly on macOS
      stopped working.
      
      Fix it by adding correct conditionals, and removing the removed
      std::unexpected_handler.
      
      Reviewed By: yfeldblum, lnicco
      
      Differential Revision: D23690777
      
      fbshipit-source-id: 76ada7911ac33de3b1e8b0a73cebf3c2d04a58ef
      0666e8d5
    • Songqiao Su's avatar
      release write buffer before calling write callback · cd60da45
      Songqiao Su authored
      Summary: As the main purpose of write callback is to signal the buffer is on longer needed and may be released (https://fburl.com/diffusion/ahbbb6oy). Release the buffer then calling the write callback seems more reasonable
      
      Differential Revision: D23411380
      
      fbshipit-source-id: c9b421716368253eafb4ecb8b72f48c8b47c2f9f
      cd60da45
    • Stepan Palamarchuk's avatar
      Introduce EventBase::Options · 3d5e5974
      Stepan Palamarchuk authored
      Summary:
      This API allows for an easier way to configure EventBase without a need to introduce yet another constructor with variable amount of arguments.
      
      In particular, we have an ad-hoc constructor for overriding just the wheel timer interval, but it's not possible to override it in other constructors.
      
      Reviewed By: yfeldblum
      
      Differential Revision: D23511659
      
      fbshipit-source-id: 2f8de3a527ee07dbf2dc19f2e369014793d906c1
      3d5e5974
    • Luca Niccolini's avatar
      add gtest version 1.8 · 8f60f633
      Luca Niccolini authored
      Summary:
      needed by a few projects [wangle, mvfst, proxygen]
      
      it's already in lfs
      https://www.internalfb.com/intern/diffusion/FBS/browse/master/fbcode/tools/lfs/.lfs-pointers?lines=41
      
      Reviewed By: mzlee
      
      Differential Revision: D23676343
      
      fbshipit-source-id: 0fa04d4224f27e756f683924af0c21ea63a90647
      8f60f633
  3. 13 Sep, 2020 3 commits
    • Lee Howes's avatar
      Enforce r-value use of Future::getVia · 72a5d49c
      Lee Howes authored
      Summary:
      Fixes across the codebase to allow for r-value qualified getVia.
      
      Change is behaviour neutral - getVia is already destructive internally.
      
      Reviewed By: yfeldblum
      
      Differential Revision: D23605722
      
      fbshipit-source-id: 75dfe6faca1c888eae9b262552372dd557eb6933
      72a5d49c
    • Mohammed Das's avatar
      Add CoReturn and CoThrow to GmockHelpers. · 1d62441f
      Mohammed Das authored
      Summary: Moving CoReturn and CoThrow helpers for use with GTest. CoReturn() and CoThrow() work similar to Return() and Throw() provided in GTest framework.
      
      Reviewed By: yfeldblum
      
      Differential Revision: D23502840
      
      fbshipit-source-id: 3e5f35135d8291543b91d3615e86398d794a7ba9
      1d62441f
    • Chad Austin's avatar
      enable FOLLY_USE_SYMBOLIZER on macOS · b404e159
      Chad Austin authored
      Summary:
      Enable FOLLY_USE_SYMBOLIZER on macOS and teach SafeStackTracePrinter
      to use `backtrace_symbols_fd` on non-ELF platforms.
      
      Reviewed By: luciang
      
      Differential Revision: D23017169
      
      fbshipit-source-id: 1ad6cbf6d9ad11276d95b821095e37a86c8bb862
      b404e159
  4. 12 Sep, 2020 2 commits
    • Michael Lee (Engineering)'s avatar
      Add `constexpr` to Portability for Apple OS targets · 40eff3a7
      Michael Lee (Engineering) authored
      Summary:
      Before: While the Xcode constants are pretty well standardized, discoverability and use within folly is non-trivial.
      We have constants for various other attributes about the OS and target platform, so add a sane mapping for Apple targets as well.
      
      Reviewed By: yfeldblum
      
      Differential Revision: D23605949
      
      fbshipit-source-id: cd4212dd30d9ec6a3c48a6d7a787a67fdeb9dd1f
      40eff3a7
    • Yedidya Feldblum's avatar
      Some static-asserts in Executor::KeepAlive · 5f813e67
      Yedidya Feldblum authored
      Summary: [Folly] Some static-asserts in `Executor::KeepAlive`: standard-layout, pointer-size, pointer-align.
      
      Reviewed By: LeeHowes
      
      Differential Revision: D23656740
      
      fbshipit-source-id: ff6c5aa3de01a37144fe8ef0961f06d13938654a
      5f813e67
  5. 11 Sep, 2020 4 commits
    • Lee Howes's avatar
      Modify Future::getTryVia to be r-value qualified and destructive · f5744f58
      Lee Howes authored
      Summary: For consistency with get() make getTryVia r-value qualified and move the result out. This has the benefit of removing surprise copies in code that already operated on a temporary future but ended up with an l-value reference to copy from as a result of this operation.
      
      Reviewed By: ispeters
      
      Differential Revision: D23610051
      
      fbshipit-source-id: a11344b9c8680f9498abc307ba1c7c793e3403e1
      f5744f58
    • Yedidya Feldblum's avatar
      Cut main from gen tests · ba3db8b9
      Yedidya Feldblum authored
      Summary: [Folly] Cut explicit `main` from test programs in `folly/gen/test/` and prefer the linked-in version.
      
      Reviewed By: simpkins
      
      Differential Revision: D23643891
      
      fbshipit-source-id: 20152ae4feeeccd43038580043d45759c39c075c
      ba3db8b9
    • Ivan Egorov's avatar
      Allow symbolizer to fall back to getStackTraceSafe · 61a00871
      Ivan Egorov authored
      Summary: This makes sense on systems without `backtrace` and with LLVM libunwind implementations.
      
      Reviewed By: yfeldblum
      
      Differential Revision: D23625739
      
      fbshipit-source-id: 6ec50c94c73bda227118ffc36d6856bcd8dd0d8b
      61a00871
    • Nathan Bronson's avatar
      optimized helper for constructing aliasing std::weak_ptr · 90607a25
      Nathan Bronson authored
      Summary:
      `std::shared_ptr` has an aliasing constructor, but `std::weak_ptr`
      has none.  This diff implements a helper function that implements the
      functionality.  For libstdc++ it uses ABI-specific hacks to avoid the
      need to construct a temporary `std::shared_ptr`.
      
      Reviewed By: yfeldblum
      
      Differential Revision: D23580416
      
      fbshipit-source-id: 71712270519b0e7522d8019a5c356679c7dc5397
      90607a25
  6. 10 Sep, 2020 8 commits
    • Yedidya Feldblum's avatar
      Decay char-array and trivial args to throw_exception · 704c7ec4
      Yedidya Feldblum authored
      Summary:
      [Folly] Decay char-array and trivial args to `throw_exception` and `terminate_with`.
      
      The motivation is to ensure smaller call-site code size in the common cases, where the solitary argument is a string literal. Extend to cases where arguments are numbers and the like as well, since that is simple enough and is something that `Function` already does.
      
      Reviewed By: aary
      
      Differential Revision: D23550096
      
      fbshipit-source-id: d3a2066dc28dc4cfac6b65e2b8972613ce55d06c
      704c7ec4
    • Yedidya Feldblum's avatar
      byte · ad37aadb
      Yedidya Feldblum authored
      Summary: [Folly] `byte`, backported from `std::byte` in C++17.
      
      Reviewed By: Alfus, vitaut
      
      Differential Revision: D23535105
      
      fbshipit-source-id: 056c634362b2ca226306a97ae9994a4631d07ee5
      ad37aadb
    • Orvid King's avatar
      Include process.h in portability/Unistd.h · 10ee4469
      Orvid King authored
      Summary: In newer versions of the windows STL, this gets included in <thread>, so explicitly include it in Unistd.h and remove the definition of getpid.
      
      Reviewed By: yfeldblum
      
      Differential Revision: D23498073
      
      fbshipit-source-id: 5fe07dbbaa9fb1bf5c904286bd15beccbf1d1615
      10ee4469
    • Yedidya Feldblum's avatar
      Revise invoke and invocability traits · 4bf029a2
      Yedidya Feldblum authored
      Summary:
      [Folly] Revise invoke to be an invoker rather than a function, and therefore insusceptible to ADL, and revise invocability traits for compile-time perf.
      
      Do the same for apply and applicability traits.
      
      Reviewed By: Mizuchi
      
      Differential Revision: D23334895
      
      fbshipit-source-id: 4d3241a3f34a7bede44f8ab54a30a3074d9fd3ed
      4bf029a2
    • Yedidya Feldblum's avatar
      Tweaks to hash primitives · 533d54f5
      Yedidya Feldblum authored
      Summary: [Folly] Tweaks to hash primitives: twang, jenkins_rev, fnv
      
      Reviewed By: ot, luciang
      
      Differential Revision: D23290185
      
      fbshipit-source-id: 080dfa8a5f357065473f3973654c91d01c683c3c
      533d54f5
    • Robin Cheng's avatar
      Fix an unnecessary racy access in SingleWriterFixedHashMap on empty iterator · bfde457b
      Robin Cheng authored
      Summary:
      When grabbing an iterator when the map is empty, size is zero but we
      still create a copy of the elem_ pointer which is invalid to do when the size
      is zero (since the writer could overwrite the pointer upon first insertion).
      This diff checks whether the iterator would be empty and if so avoid grabbing
      that pointer.
      
      Reviewed By: yfeldblum
      
      Differential Revision: D23520616
      
      fbshipit-source-id: 5b3f2bc3a9b935920e7fd616e64fadafd7775a75
      bfde457b
    • Robin Cheng's avatar
      Fix an atomic memory ordering in DefaultKeepAliveExecutor. · b172ccdf
      Robin Cheng authored
      Summary: Honestly I haven't spent time to understand why this order needs to be acq_rel, but (1) it's the same as the one used in the other keepAliveRelease in this file (2) this ordering is free for read-modify-write operations (3) TSAN said this works :)
      
      Reviewed By: yfeldblum
      
      Differential Revision: D23495784
      
      fbshipit-source-id: 8bdcafb14b27e6c0f8838ed478364821cd39f9a9
      b172ccdf
    • Yedidya Feldblum's avatar
      Fix the reentrant_allocator loop · c26af9db
      Yedidya Feldblum authored
      Summary:
      [Folly] Fix the `reentrant_allocator` internal loop, which when finding a new head node would incorrectly preserve the free `offset` corresponding to the previous head.
      
      Hat tip to hpmv for the report.
      
      Differential Revision: D23593517
      
      fbshipit-source-id: b4fc701f08056184225e7feac32d60aabf7ea6cc
      c26af9db
  7. 09 Sep, 2020 10 commits
    • Adam Simpkins's avatar
      remove older fbcode_builder_config.py file · d5d33bcf
      Adam Simpkins authored
      Summary:
      Remove the old `fbcode_builder_config.py` file used by the previous
      incarnation of fbcode_builder.  This file hasn't been used in a while now.
      Folly instead builds with `build/fbcode_builder/getdeps.py`, which uses the
      configuration file at `build/fbcode_builder/manifests/folly`
      
      Reviewed By: wez
      
      Differential Revision: D23591355
      
      fbshipit-source-id: b2e193c7dc54dcf481557984b5833fa92ff4049c
      d5d33bcf
    • Adam Simpkins's avatar
      add a top-level build.sh to build folly via getdeps.py · 0fa80a4d
      Adam Simpkins authored
      Summary:
      Add a small top-level build.sh script that invokes
      build/fbcode_builder/getdeps.py to perform the build.  This primarily helps
      make the getdeps build process more discoverable to users.
      
      Also document this script in README.md
      
      Reviewed By: yfeldblum
      
      Differential Revision: D23484822
      
      fbshipit-source-id: 6013ace6d80d7d3d80aa87d4c6269ac106814cf0
      0fa80a4d
    • Adam Simpkins's avatar
      update fbcode_builder README to document getdeps.py · b3521215
      Adam Simpkins authored
      Summary:
      Update the `README.md` file in the fbcode_builder subdirectory to document the
      current getdeps.py build system rather than the older fbcode_builder scripts
      that required each project to keep their own python-based build files in their
      project directory.
      
      Reviewed By: chadaustin, wez
      
      Differential Revision: D23591356
      
      fbshipit-source-id: 75a099a10793e68a2b59696682010c4dff47ec69
      b3521215
    • Sim Sun's avatar
      Revert D23489967: Modify Future::getTryVia to be r-value qualified and destructive · c9993790
      Sim Sun authored
      Differential Revision:
      D23489967 (https://github.com/facebook/folly/commit/65bb1505d3f64d9248bc1f7a04abc212db518676)
      
      Original commit changeset: db11c9c5946e
      
      fbshipit-source-id: 4970fc7de479a51d4acf91b2871ff0c15712130e
      c9993790
    • Adam Simpkins's avatar
      fix FindDoubleConversion.cmake to work properly · 7187a3af
      Adam Simpkins authored
      Summary:
      The code in `FindDoubleConversion.cmake` called
      `FIND_PACKAGE_HANDLE_STANDARD_ARGS()` with the wrong arguments.  The first
      argument must match the package name: since this file is called
      `FindDoubleConversion` the first argument must be `DoubleConversion`.
      
      Previously this code was passing in `DOUBLE_CONVERSION`, causing it to set
      `DOUBLE_CONVERSION_FOUND` instead of `DoubleConversion_FOUND`.  Since this
      module did not set `DoubleConversion_FOUND` the `find_package()` call assumed
      it always succeeded, even when the double-conversion library was not found.
      
      Also remove the extra status message.  `FIND_PACKAGE_HANDLE_STANDARD_ARGS()`
      already prints out a status message as long as `find_package()` was called
      without the `QUIET` argument.
      
      Reviewed By: yfeldblum
      
      Differential Revision: D23588980
      
      fbshipit-source-id: 8c088930b1b01c027403c3e425f1924f6149f72a
      7187a3af
    • Adam Simpkins's avatar
      update FindGflags.cmake to work on CentOS 8.x (#1409) · 41b44bcf
      Adam Simpkins authored
      Summary:
      Update FindGflags.cmake to work on recent CentOS and RedHat distributions.
      
      On these distributions the CMake package configuration installed by the
      gflags-devel RPM is slightly broken, and sets `gflags_INCLUDE_DIR` to a
      directory that does not exist.  This happens because `/lib64` is symlinked to
      `/usr/lib64`, and CMake ends up searching `/lib64` before `/usr/lib64` by
      default when searching for packages.  Therefore it finds `gflags-config.cmake`
      via the `/lib64` symlink.  However, `gflags-config.cmake` computes the include
      directory relative to where its config file was found, and this relative path
      computation only works when using the actual `/usr/lib64` path where it was
      installed.  When found via `/lib64` it returns a bogus `//include` path that
      does not exist.
      
      This updates `FindGflags.cmake` to verify if the `gflags_INCLUDE_DIR` path
      actually exists, and set it to a sane location instead.
      
      This also updates the code to use the `gflags-shared` target that is exported
      by the default gflags package configuration if it was only built as a shared
      library.
      
      Pull Request resolved: https://github.com/facebook/folly/pull/1409
      
      Reviewed By: yfeldblum
      
      Differential Revision: D23588288
      
      fbshipit-source-id: b68a717953ae0521f568d7bcfd05ca33cd6dc578
      41b44bcf
    • Chad Austin's avatar
      use FOLLY_HAVE_BACKTRACE to guard execinfo.h and usage of backtrace(3) · 2a41679b
      Chad Austin authored
      Summary:
      FOLLY_USE_SYMBOLIZER is a poor guard for the existence of execinfo.h
      and backtrace(3), which is widely available on unix platforms, but not
      available on Android NDK. Instead, introduce FOLLY_HAVE_BACKTRACE and
      have CMake detect its availability.
      
      Reviewed By: yfeldblum, luciang
      
      Differential Revision: D23361495
      
      fbshipit-source-id: 4409363f3eaa754977a93e1f006c5911d8e32020
      2a41679b
    • Chad Austin's avatar
      fix macOS build · 6e269d82
      Chad Austin authored
      Summary: Darwin libc doesn't implement quick_exit, so use std::_Exit instead.
      
      Reviewed By: yfeldblum
      
      Differential Revision: D23592838
      
      fbshipit-source-id: bda318216239965e14b4c97ca184a2303353ed73
      6e269d82
    • Lee Howes's avatar
      Modify Future::getTryVia to be r-value qualified and destructive · 65bb1505
      Lee Howes authored
      Summary: For consistency with get() make getTryVia r-value qualified and move the result out. This has the benefit of removing surprise copies in code that already operated on a temporary future but ended up with an l-value reference to copy from as a result of this operation.
      
      Reviewed By: yfeldblum
      
      Differential Revision: D23489967
      
      fbshipit-source-id: db11c9c5946edd402103b3aa4140c0a1db5aae5e
      65bb1505
    • Raul Tambre's avatar
      CMake: Fix version comparison for target argument (#1439) · fdc44f51
      Raul Tambre authored
      Summary:
      VERSION_GREATER 3.18 also matches 3.18.2, which is wrong as the target argument was only added in 3.19.
      After noticing that folly requires an ancient CMake version I converted over from VERSION_GREATER_EQUAL and introduced the comparison error.
      
      Issue reported [here](https://github.com/facebook/folly/pull/1433#discussion_r484278801).
      
      Pull Request resolved: https://github.com/facebook/folly/pull/1439
      
      Reviewed By: yfeldblum
      
      Differential Revision: D23564812
      
      Pulled By: Orvid
      
      fbshipit-source-id: 19881876147ec73ad70610cf97c408740f998340
      fdc44f51
  8. 08 Sep, 2020 2 commits
    • Matt Ma's avatar
      Use compilation unit as base address when no base address exists for range. · 046adb70
      Matt Ma authored
      Summary:
      From Dwarf4 standard
      
      http://dwarfstd.org/doc/DWARF4.pdf#page=53
      
      ```name=2.17.3 Non-Contiguous Address Ranges
      The applicable base address of a range list entry is determined by the closest preceding base
      address selection entry (see below) in the same range list. If there is no such selection entry, then
      the applicable base address defaults to the base address of the compilation unit (see Section
      3.1.1).
      
      In the case of a compilation unit where all of the machine code is contained in a single
      contiguous section, no base address selection entry is needed.
      ```
      
      http://dwarfstd.org/doc/DWARF4.pdf#page=58
      
      ```name=3.1.1 Normal and Partial Compilation Unit Entries
      Compilation unit entries may have the following attributes:
      
      1. Either a DW_AT_low_pc and DW_AT_high_pc pair of attributes or a DW_AT_ranges
      attribute whose values encode the contiguous or non-contiguous address ranges, respectively,
      of the machine instructions generated for the compilation unit (see Section 2.17).
      A DW_AT_low_pc attribute may also be specified in combination with DW_AT_ranges to
      specify the default base address for use in location lists (see Section 2.6.2) and range lists
      (see Section 2.17.3).
      ```
      
      http://dwarfstd.org/doc/DWARF4.pdf#page=61
      
      ```name=3.1.1 Normal and Partial Compilation Unit Entries
      The base address of a compilation unit is defined as the value of the DW_AT_low_pc attribute,
      if present; otherwise, it is undefined. If the base address is undefined, then any DWARF entry or
      structure defined in terms of the base address of that compilation unit is not valid.
      ```
      
      http://dwarfstd.org/doc/DWARF4.pdf#page=52
      ```name=2.17 Code Addresses and Ranges  - 2.17.1 Single Address
      When there is a single address associated with an entity, such as a label or alternate entry point
      of a subprogram, the entry has a DW_AT_low_pc attribute whose value is the relocated address
      for the entity.
      
      While the DW_AT_entry_pc attribute might also seem appropriate for this purpose, historically
      the DW_AT_low_pc attribute was used before the DW_AT_entry_pc was introduced (in DWARF
      Version 3). There is insufficient reason to change this.
      ```
      
      Reviewed By: luciang
      
      Differential Revision: D23422082
      
      fbshipit-source-id: 4de79fa81e6c323095bb7c79faf87369998138c6
      046adb70
    • Giuseppe Ottaviano's avatar
      Use AccessSpreader::cachedCurrent() in CoreCachedSharedPtr · dcbe5421
      Giuseppe Ottaviano authored
      Summary: Avoid an expensive `__vdso_getcpu` on every `get()`.
      
      Reviewed By: terrelln
      
      Differential Revision: D23469601
      
      fbshipit-source-id: 6c7e62a136b7cd80baab6dcfb10cba13a2e472c0
      dcbe5421