1. 26 Jul, 2017 5 commits
    • Yedidya Feldblum's avatar
      Add FOLLY_HAS_BUILTIN and use it · ccb206fc
      Yedidya Feldblum authored
      Summary:
      [Folly] Add `FOLLY_HAS_BUILTIN` and use it.
      
      Use it in the definition of `folly::launder`. Of course, since GCC does not have `__has_builtin`, we still have to check its version.
      
      Reviewed By: WillerZ
      
      Differential Revision: D5496748
      
      fbshipit-source-id: 3bd6e89424dfd2c9cb9795ee4d88f66c4294cc4c
      ccb206fc
    • Yedidya Feldblum's avatar
      Cut throwOnFail · c815830f
      Yedidya Feldblum authored
      Summary:
      [Folly] Cut `throwOnFail`.
      
      It is not necessary, and `CHECK_THROW`, its reason for existing, can be implemented without it.
      
      It can also easily be a pessimization because there is no way to delay computation of the arguments to the exception ctor until after the check. So if there is, say, a computation using `sformat` to compute a string argument to the exception ctor, that will always be performed rather than being performed only should the check fail.
      
      Reviewed By: Orvid
      
      Differential Revision: D5478804
      
      fbshipit-source-id: 71a125c126eae76c6e95ef1bd23ee883b1db39a5
      c815830f
    • Yangqing Jia's avatar
      folly: changes to make nvcc happy · 5a40209a
      Yangqing Jia authored
      Summary:
      (1) small_vector.h line 1099: wrap the default return in an else statement to
      avoid compiler warning of "unreachable statement".
      (2) Constexpr.h: need to treat cudacc similarly to msvc.
      
      (Note: this ignores all push blocking failures!)
      
      Reviewed By: dzhulgakov
      
      Differential Revision: D5387061
      
      fbshipit-source-id: f002ab5ec00d4dcd85d86386f87a0327023afa1b
      5a40209a
    • Yedidya Feldblum's avatar
      Move __CLANG_PREREQ to folly/CPortabiilty.h · f634a701
      Yedidya Feldblum authored
      Summary: [Folly] Move `__CLANG_PREREQ` to `folly/CPortabiilty.h`.
      
      Reviewed By: Orvid
      
      Differential Revision: D5496372
      
      fbshipit-source-id: 710af3d30aa8bd0e5f645beede354e3463f1bb25
      f634a701
    • Yedidya Feldblum's avatar
      There is no HAVE_SHADOW_LOCAL_WARNINGS · 20408f9a
      Yedidya Feldblum authored
      Summary:
      [Folly] There is no `HAVE_SHADOW_LOCAL_WARNINGS`
      
      It is `FOLLY_HAVE_SHADOW_LOCAL_WARNINGS`.
      
      Reviewed By: Orvid
      
      Differential Revision: D5496247
      
      fbshipit-source-id: 689f40180180465bdc44593059e44fb64cf3e415
      20408f9a
  2. 25 Jul, 2017 5 commits
    • Mingtao Yang's avatar
      Fix include typo · 489ee579
      Mingtao Yang authored
      Reviewed By: anirudhvr
      
      Differential Revision: D5492790
      
      fbshipit-source-id: 10e868976a7ea42673d5b5c906a53c6c9495a288
      489ee579
    • nicksbyman's avatar
      add import to main in logging example · 9fc87c83
      nicksbyman authored
      Summary: Closes https://github.com/facebook/folly/pull/642
      
      Reviewed By: Orvid
      
      Differential Revision: D5471368
      
      Pulled By: yfeldblum
      
      fbshipit-source-id: 3bbafd04b93828121ba829027959b6b3e0e55888
      9fc87c83
    • Mingtao Yang's avatar
      Move OpenSSL locking code out of SSLContext · 40966706
      Mingtao Yang authored
      Summary:
      OpenSSL 1.1.0 deprecates the callback based locking setup in favor
      for platform native mutexes.
      
      Added `OPENSSL_init_ssl` in the OpenSSL portability module for OpenSSL API < 1.1.0. This implements
      the standard OpenSSL library initialization routines (taken from SSLContext::initializeOpenSSL).
      
      Added `OPENSSL_cleanup` in the OpenSSL portability module for OpenSSL API < 1.1.0. This implements
      the cleanup routine from SSLContext::cleanupOpenSSL.
      
      Removed `SSLContext::SSLLockType`. Replaced with `folly::ssl::LockType`.
      
      Reviewed By: mzlee, ngoyal
      
      Differential Revision: D5404777
      
      fbshipit-source-id: 7e5d9bf4a6683afb5560ada0a5b73cac3ff2662b
      40966706
    • Nicholas Ormrod's avatar
      Fix double-free in DynamicConverter · d1ddabb0
      Nicholas Ormrod authored
      Summary:
      If an exception is thrown during the construction of value in a container, then the Transformer iterator will not successfully reconstruct a cache_ object after explicitly calling its destructor (due to the exception being thrown), which results in a double-free when cache_ is destroyed as part of Transformer's destructor.
      
      Conveniently, there exists a piece of code designed to solve just this problem: folly::Optional. Replace cache_ and valid_ with folly::Optional.
      
      This also fixes the unnecessary requirement that container value types have default constructors, since cache_ is no longer default constructed inside of Transformer.
      
      Reviewed By: markisaa
      
      Differential Revision: D5472342
      
      fbshipit-source-id: eade1f7ce260b9b3406d92af8255b5ffa4e4a51c
      d1ddabb0
    • Phil Willoughby's avatar
      Replaceable · fbfd3029
      Phil Willoughby authored
      Summary:
      An instance of `Replaceable<T>` wraps an instance of `T`.
      
      You access the inner `T` instance with `operator*` and `operator->` (as if
      it were a smart pointer).
      
      `Replaceable<T>` adds no indirection cost and performs no allocations.
      
      `Replaceable<T>` has the same size and alignment as `T`.
      
      You can replace the `T` within a `Replaceable<T>` using the `emplace` method
      (presuming that it is constructible and destructible without throwing
      exceptions). If the destructor or constructor you're using could throw an
      exception you should use `Optional<T>` instead, as it's not a logic error for
      that to be empty.
      
      Reviewed By: yfeldblum
      
      Differential Revision: D5346528
      
      fbshipit-source-id: c7d72e73ea04e371325327a7ff0b345315d6e5ac
      fbfd3029
  3. 24 Jul, 2017 2 commits
    • Yedidya Feldblum's avatar
      Move the SpookyHash libraries into folly/hash · ebff31e4
      Yedidya Feldblum authored
      Summary:
      [Folly] Move the SpookyHash libraries into `folly/hash`.
      
      And propagate the changes to `#include` lines, etc.
      
      Reviewed By: Orvid
      
      Differential Revision: D5477735
      
      fbshipit-source-id: 94fe95ece05b52bde1466ab5f9fb8b53a4c59bed
      ebff31e4
    • Yedidya Feldblum's avatar
      Outline the throw statements in Try · 1d7c30b2
      Yedidya Feldblum authored
      Summary:
      [Folly] Outline the `throw` statements in `Try`.
      
      They are by definition cold and so we gain nothing from inlining them.
      
      Reviewed By: Orvid
      
      Differential Revision: D5478237
      
      fbshipit-source-id: f413251a56ca4cbddcf3baea6679a552ae5bb19e
      1d7c30b2
  4. 23 Jul, 2017 1 commit
    • Subodh Iyengar's avatar
      Add fnv1-a hash to Hash · b3698ed4
      Subodh Iyengar authored
      Summary:
      Add fnv1-a 64 bit hash to Hash.h.
      fnv1-a is supposed to be preferred over
      fnv1.
      
      Reviewed By: yfeldblum
      
      Differential Revision: D5453401
      
      fbshipit-source-id: c13f12ef11eb6745c95f3901b14ceafce90ea0ea
      b3698ed4
  5. 22 Jul, 2017 2 commits
  6. 21 Jul, 2017 6 commits
    • Stephen Chen's avatar
      crc32c: add missing header for std::runtime_error · f90eaa17
      Stephen Chen authored
      Summary: On the non sse42 path, we throw std::runtime_error, but Crc32cDetail.cpp is missing the header for it so it fails to compile on aarch64.
      
      Reviewed By: yfeldblum
      
      Differential Revision: D5468906
      
      fbshipit-source-id: 2d5408621cb2b6758d3501407ed3d2a40d79f1b0
      f90eaa17
    • Yedidya Feldblum's avatar
      Apply clang-format to folly/experimental/symbolizer/ · 04458d15
      Yedidya Feldblum authored
      Summary: [Folly] Apply `clang-format` to `folly/experimental/symbolizer/`.
      
      Reviewed By: Orvid
      
      Differential Revision: D5468832
      
      fbshipit-source-id: 94a0f82312769be0e8be724c11f97e14425ead10
      04458d15
    • Yedidya Feldblum's avatar
      Apply clang-format to folly/experimental/io/ · f7920221
      Yedidya Feldblum authored
      Summary: [Folly] Apply `clang-format` to `folly/experimental/io/`.
      
      Reviewed By: Orvid
      
      Differential Revision: D5460571
      
      fbshipit-source-id: d19aff829316dd277e65620196e12db8cad46787
      f7920221
    • Yedidya Feldblum's avatar
      Style tweaks to max_align_v calculation · 1804caee
      Yedidya Feldblum authored
      Summary:
      [Folly] Style tweaks to `max_align_v` calculation.
      
      * Change ns from `folly::detail` since that can be crowded and many other folly libraries may include this header.
      * Extract a 2-param `max` alias.
      * Fix an incorrectly hardcoded `size_t`.
      
      Reviewed By: WillerZ
      
      Differential Revision: D5468758
      
      fbshipit-source-id: 14a3f67323020a3cfce2b3b46f5f64f3e6125027
      1804caee
    • Yedidya Feldblum's avatar
      Apply clang-format to folly/tracing/ · efce8553
      Yedidya Feldblum authored
      Summary: [Folly] Apply `clang-format` to `folly/tracing/`.
      
      Reviewed By: Orvid
      
      Differential Revision: D5460511
      
      fbshipit-source-id: c7a7d34211044a1b76934f184a8552a96d0bad91
      efce8553
    • Yedidya Feldblum's avatar
      Parse suffixes without switch-fallthrough in huge-pages · af8f1710
      Yedidya Feldblum authored
      Summary: [Folly] Parse suffixes without switch-fallthrough in huge-pages. It is clever, but weird. We can use an immediately-executed lambda expression to make it convenient.
      
      Reviewed By: Orvid
      
      Differential Revision: D5467585
      
      fbshipit-source-id: 02ddb97641db97e38e3f40388ecc522eccd436cb
      af8f1710
  7. 20 Jul, 2017 8 commits
    • Yedidya Feldblum's avatar
      Apply clang-format to folly/experimental/bser/ · 060471a0
      Yedidya Feldblum authored
      Summary: [Folly] Apply `clang-format` to `folly/experimental/bser/`.
      
      Reviewed By: Orvid
      
      Differential Revision: D5460552
      
      fbshipit-source-id: e103f8920eb29b7c14688f5bbb3e28129ef35e96
      060471a0
    • Yedidya Feldblum's avatar
      Drop a remnant of gcc48 support in futures · 93dc9876
      Yedidya Feldblum authored
      Summary: [Folly] Drop a remnant of gcc48 support in futures. Because gcc48 is no longer supported.
      
      Reviewed By: Orvid, meyering
      
      Differential Revision: D5460788
      
      fbshipit-source-id: 86e2985a0980357641d18f59fd25b9667ec30ab0
      93dc9876
    • Jeff Cai's avatar
      fix ExceptionWrapper comment · 663e27f9
      Jeff Cai authored
      Summary:
      Fix comment for exception_wrapper's `operator bool()`.
      It reads "return `true` if `*this` is not holding an exception"
      but the actual behavior is to return `true` if `*this` *is* holding
      an exception.
      
      Reviewed By: yfeldblum
      
      Differential Revision: D5456386
      
      fbshipit-source-id: ec3a472ea441476d835881e94036a3957bb2ab32
      663e27f9
    • Phil Willoughby's avatar
      Introduce folly::max_align_t and folly::max_align_v · 2177f05a
      Phil Willoughby authored
      Summary:
      `folly::max_align_t` is a portable replacement for `std::max_align_t`.
      
      `folly::max_align_v` is a `constexpr size_t` with the same value as `alignof(folly::max_align_t)`
      
      32-bit iOS environments have `alignof(std::max_align_t) == 4`, which is not correct. This is more
      correct in that I have not yet found a more-aligned basic type.
      
      Reviewed By: yfeldblum
      
      Differential Revision: D5442333
      
      fbshipit-source-id: 0a93e48a730d65ef76e04f132b5976c93587b14c
      2177f05a
    • Subodh Iyengar's avatar
      Add folly non null · 339c14d3
      Subodh Iyengar authored
      Summary:
      Add non null annotation to
      folly to help with linters
      complaining when a pointer could
      be null, however it never is.
      
      Reviewed By: yfeldblum
      
      Differential Revision: D5453255
      
      fbshipit-source-id: cf7ccbcc86d171ef4f6d373b6f751f709e4587b1
      339c14d3
    • Yedidya Feldblum's avatar
      Move futures helper types into folly::futures::detail · 5a81b5df
      Yedidya Feldblum authored
      Summary:
      [Folly] Move futures helper types into `folly::futures::detail`.
      
      From `folly::detail`, where it would be easier to collide. Especially for names like `Core`.
      
      Reviewed By: WillerZ
      
      Differential Revision: D5460766
      
      fbshipit-source-id: 3f7bff784bbb89c7c86d2f1824323d71321c7ad6
      5a81b5df
    • Benjamin Reesman's avatar
      do not crash process by default when ExceptionTracer fails to reflect over cxxabi · 05a686a7
      Benjamin Reesman authored
      Summary: It is possible in certain cirucmstances for the cxxabi reflection code in `ExceptionTracer` to fail to cope with exceptions that we've seen in production and it currently aborts the process in that case. This diff switches this to `DFATAL`/`DCHECK`.
      
      Reviewed By: yfeldblum
      
      Differential Revision: D5431445
      
      fbshipit-source-id: c3d68372c2fadbb518f78fe99e817db611953d22
      05a686a7
    • Tom Jackson's avatar
      Visit, for monitoring or mutating pipelines · e1fb97e7
      Tom Jackson authored
      Summary: The pattern `mapped([](auto&& i) { ...; return std::move(i); }` is quite common. Evidently people need some good mechanism to just observe or possibly mutate items in pipelines. Note that this is still lazy, it is only called when the pipeline is run.
      
      Reviewed By: yfeldblum
      
      Differential Revision: D5457196
      
      fbshipit-source-id: 3a892b8895e02dd8fcd6a7fd4d3b27063d1b071f
      e1fb97e7
  8. 19 Jul, 2017 5 commits
    • Victor Gao's avatar
      change the definition of FOLLY_MAYBE_UNUSED · 4b807f9e
      Victor Gao authored
      Summary:
      Currently gcc does not support attributes declared using square brackets well and some builds might break because of this.
      
      Since `__attribute__((...))` works for both clang and gcc, we should switch to it for now.
      
      Reviewed By: yfeldblum
      
      Differential Revision: D5456734
      
      fbshipit-source-id: d7a8bf1389afc5d60604f22d37c93611dc46259c
      4b807f9e
    • Dave Watson's avatar
      3-way crc32c · 74102328
      Dave Watson authored
      Summary: Current folly version uses a single crc32c.  crc32c has a latency of 3, so pipelining three in a row makes it nearly 3x faster (for data all in cache).
      
      Reviewed By: yfeldblum
      
      Differential Revision: D5418228
      
      fbshipit-source-id: d3a250e1b4fe1f0bc99b44c660df94cf233aebd6
      74102328
    • Xiangyu Bu's avatar
      Add SSLOptions to Makefile.am. · 98df5db5
      Xiangyu Bu authored
      Summary: Add paths of SSLOptions.{cpp, h} to folly/Makefile.am.
      
      Reviewed By: Orvid
      
      Differential Revision: D5453343
      
      fbshipit-source-id: ba0b8b065ed964dfff1757533db17e31aa672e83
      98df5db5
    • Eli Lindsey's avatar
      append the interface index instead of throwing an exception when the scope id lookup fails · 8114790f
      Eli Lindsey authored
      Summary: As written, this str() method depends on the current state of the host - if an interface disappears (as is commong with eg. mobile, ipsec, etc.) then attempting to generate a string representation of this v6 address will currently throw an exception. Instead, we're going toignore the lookup failure and append the index i; this form is interchangeable, though slightly less legible.
      
      Reviewed By: yfeldblum
      
      Differential Revision: D5443618
      
      fbshipit-source-id: bbd3b4edaee8098671140af7400377d5e2b1937b
      8114790f
    • Dave Watson's avatar
      AtomicCoreCachedSharedPtr · 3d63fc96
      Dave Watson authored
      Summary: A folly::atomic_shared_ptr version of CoreCachedSharedPtr.
      
      Reviewed By: yfeldblum
      
      Differential Revision: D5389603
      
      fbshipit-source-id: 942700cd66f5f5219418f4c6112146dc40351aa0
      3d63fc96
  9. 18 Jul, 2017 6 commits
    • Christopher Dykes's avatar
      Support if_indextoname in the socket portability header · e6fa347e
      Christopher Dykes authored
      Summary: Windows doesn't have `net/if.h` and instead needs `iphlpapi.h` included, and `ntddndis.h` is ultimately needed to get the definition of `IF_NAMESIZE`.
      
      Reviewed By: yfeldblum
      
      Differential Revision: D5438188
      
      fbshipit-source-id: 48a786f7d10ca4b8479bb20b257ed1e857431654
      e6fa347e
    • Victor Gao's avatar
      add FOLLY_MAYBE_UNUSED · b10cedce
      Victor Gao authored
      Summary: This adds a macro `FOLLY_MAYBE_UNUSED` in `folly/CppAttributes.h` that can be used to suppress `-Wunused` warnings.
      
      Reviewed By: yfeldblum
      
      Differential Revision: D5444742
      
      fbshipit-source-id: b16e8efefd76282498ad6114bac9548064cf38d5
      b10cedce
    • Xiangyu Bu's avatar
      Functions to set common ciphers and sig algs for SSLContext. · 99b781df
      Xiangyu Bu authored
      Summary:
      This diff contains some helper functions that set a `SSLContext` object with recommended
      lists of ciphers and signature algorithms for given scenarios. In addition, DES and CHACHA are removed from the cipher list.
      
      Reviewed By: yfeldblum
      
      Differential Revision: D5373599
      
      fbshipit-source-id: 04de11fe90cac734caa12a80e56f70532803f94e
      99b781df
    • Christopher Dykes's avatar
      Ensure the allocator types in the string keyed tests have value_types matching... · 4fb9440e
      Christopher Dykes authored
      Ensure the allocator types in the string keyed tests have value_types matching the value type of the collection
      
      Summary:
      Because MSVC's standard library implementation is now checking that this is actually the case:
      ```
      error C2338: set<T, Compare, Allocator> requires that Allocator's value_type match T (See N4659 26.2.1 [container.requirements.general]/16 allocator_type) Either fix the allocator value_type or define _ENFORCE_MATCHING_ALLOCATORS=0 to suppress this diagnostic.
      ```
      
      I've gone with the "Fix the `value_type`" approach.
      
      Reviewed By: yfeldblum
      
      Differential Revision: D5441017
      
      fbshipit-source-id: b30403d2e48f815177cac29c4e6eec4e79583660
      4fb9440e
    • Phil Willoughby's avatar
      Relax alignment restriction in CachelinePadded · d8c4d15e
      Phil Willoughby authored
      Summary: 32-bit iOS environments were triggering the previous condition with LifoSem.
      
      Reviewed By: yfeldblum
      
      Differential Revision: D5442057
      
      fbshipit-source-id: 64ee32b4ad35150c7f295a2a30bbede8fa13e79e
      d8c4d15e
    • Christopher Dykes's avatar
      Add support for tagging a test as BROKEN in the CMake build · 05e06a97
      Christopher Dykes authored
      Summary: Also use it to disable function_test and indexed_mem_pool_test for now while the source of their breakage is being investigated.
      
      Reviewed By: yfeldblum
      
      Differential Revision: D5440415
      
      fbshipit-source-id: 630c884ccd2db660bfc3e4529a2d35941d3bd0d3
      05e06a97