1. 24 May, 2017 5 commits
    • Nick Terrell's avatar
      Add streaming API · 74560278
      Nick Terrell authored
      Summary:
      Adds a C-style streaming API to `folly/io/Compression.h`, with a zlib-esque interface.
      Stacked diffs will add streaming support to zstd, zlib, gzip, lzma, lz4_frame, and automatic codecs.
      This interface is targeting advanced users who are building higher level interfaces.
      They can use this as a common base so they don't have to reimplement the same code for every codec.
      
      Reviewed By: yfeldblum
      
      Differential Revision: D5026332
      
      fbshipit-source-id: e3abf1767b493c2fef153b895858a3a81b67d989
      74560278
    • Victor Gao's avatar
      apply clang-tidy modernize-use-override · e70058f4
      Victor Gao authored
      Summary:
      This is generated by applying clang-tidy -checks=modernize-use-override to all .cpp files under folly.
      It enforces the use of the keywords virtual, override and final in a way compliant to the style guide.
      
      Reviewed By: yfeldblum
      
      Differential Revision: D5108973
      
      fbshipit-source-id: 61c55aa372feebe3b3be12a2705a04879aae57a4
      e70058f4
    • Giuseppe Ottaviano's avatar
      A core-cached shared_ptr · b1eb5b68
      Giuseppe Ottaviano authored
      Summary:
      This class serves a similar use case to `ReadMostlySharedPtr`, but with two differences:
      
      - It returns actual `shared_ptr`s, so it can be used as a drop-in replacement.
      - Its memory utilization is constant, independent of the number of threads that use it.
      
      Also, the code is much simpler. On the other hand, it is about 4x slower (but it still scales linearly in the number of concurrent threads acquiring the reference).
      
      Reviewed By: djwatson
      
      Differential Revision: D5104730
      
      fbshipit-source-id: 8c18b635e0390394b06417b6df8b790e4bd2d90d
      b1eb5b68
    • Nick Terrell's avatar
      Heterogeneous comparisons · 8bca2fb2
      Nick Terrell authored
      Summary:
      `std::optional` allows heterogeneous comparisons, so `folly::Optional` should as well.
      This allows numerical comparisons between different types, like `size_t` and `uint64_t`.
      
      Fixes https://github.com/facebook/folly/issues/602.
      
      Reviewed By: AsyncDBConnMarkedDownDBException
      
      Differential Revision: D5110651
      
      fbshipit-source-id: 34f3368283953033fbb2423ab30b04e38b5b7974
      8bca2fb2
    • Yedidya Feldblum's avatar
      RFC: Embed exception_wrapper directly into Try · 790b68ac
      Yedidya Feldblum authored
      Summary:
      [Folly] RFC: Embed `exception_wrapper` directly into `Try`.
      
      Rather than storing it elsewhere on the heap. With `exception_wrapper` at 24 bytes on x64, it may now be small enough. However, it will expand the size of `Try<T>` for `sizeof(T) <= 16`, giving `Try` a new minimum size of 32 bytes on x64 instead of 16.
      
      Reviewed By: ericniebler
      
      Differential Revision: D5051436
      
      fbshipit-source-id: 10d59686d64382c88d54340c97567eafb3e2f682
      790b68ac
  2. 23 May, 2017 3 commits
    • Yedidya Feldblum's avatar
      Fix some old license headers · 27249d44
      Yedidya Feldblum authored
      Summary: [Folly] Fix some old license headers.
      
      Reviewed By: meyering
      
      Differential Revision: D5110463
      
      fbshipit-source-id: c7bb57194e0d33fbe1c6ddaa7d94437833b0cb0d
      27249d44
    • Eric Niebler's avatar
      Add FOLLY_NODISCARD for [[nodiscard]] attribute when it exists,... · 576710ca
      Eric Niebler authored
      Add FOLLY_NODISCARD for [[nodiscard]] attribute when it exists, FOLLY_WARN_UNUSED_RESULT uses FOLLY_NODISCARD.
      
      Summary: The `nodiscard` attribute was added to standard C++ in C++17. Prefer the standard formulation when it is available; otherwise, use `__attribute__((__warn_unused_result__))` on compilers that support the GNU extensions, and `_Check_return_` on MSVC. The old `FOLLY_WARN_UNUSED_RESULT` is now expands to `FOLLY_NODISCARD`.
      
      Reviewed By: yfeldblum
      
      Differential Revision: D5105137
      
      fbshipit-source-id: 9aa22e81cd9f0b89f9343433aeae3ba365227ccb
      576710ca
    • Christopher Dykes's avatar
      Make a few implicit truncations either explicit, or not truncate · 3e0ea102
      Christopher Dykes authored
      Summary: This silences a few warnings under MSVC, and gets Folly closer to being able to compile with `-Wconversion` enabled.
      
      Reviewed By: yfeldblum
      
      Differential Revision: D5100686
      
      fbshipit-source-id: e5e04c7aa143597e151a56a4d1f90dda26d0033b
      3e0ea102
  3. 22 May, 2017 3 commits
    • Christopher Dykes's avatar
      Enable -Wimplicit-fallthrough · 523ca7d7
      Christopher Dykes authored
      Summary: Because just having a linter enforce it isn't good enough to catch everything.
      
      Reviewed By: yfeldblum
      
      Differential Revision: D5101828
      
      fbshipit-source-id: a1bc482b37139a1eddeb93bc298596af950aa87d
      523ca7d7
    • Christopher Dykes's avatar
      Shift the job of defining NOMINMAX into source rather than the build system · 887367ca
      Christopher Dykes authored
      Summary:
      This makes it easier to consume Folly from a non-cmake project.
      Note that this also requires making libevent, which was previously categorized as a semi-portable header into a non-portable header, meaning it can't be referenced directly. (libevent includes `Windows.h` in one of its headers -_-....)
      
      Reviewed By: yfeldblum
      
      Differential Revision: D5106051
      
      fbshipit-source-id: 5ce2d4188c9036d6ab206af3036c8fd4b09516a4
      887367ca
    • Kyle Nekritz's avatar
      Add LOCK_SHAREDMUTEX SSLLockType. · c32f067b
      Kyle Nekritz authored
      Summary: To take advantage of read locks.
      
      Reviewed By: siyengar
      
      Differential Revision: D5106090
      
      fbshipit-source-id: a32afd698e9204196aa3d23f21a7d41803b2eb66
      c32f067b
  4. 20 May, 2017 7 commits
  5. 19 May, 2017 3 commits
  6. 17 May, 2017 2 commits
    • Alexey Spiridonov's avatar
      ThreadedRepeatingFunctionRunner: Name all the threads · c75c575b
      Alexey Spiridonov authored
      Summary: Name all repeating function threads for ease of debugging.
      
      Reviewed By: yfeldblum
      
      Differential Revision: D5065281
      
      fbshipit-source-id: e875e654dfa644a265e44416baf5fbf23c9da434
      c75c575b
    • Phil Willoughby's avatar
      Tweak basic_fbstring construction from std types · 6c244d16
      Phil Willoughby authored
      Summary:
      Previously we defined an assignment from std::string on all basic_fbstring
      specialisations, but we don't actually want to do that because it's nonsense to
      construct a basic_fbstring<char16_t> from an std::string. Equally it's not
      nonsense to construct one of those from an std::u16string but the previous code
      didn't allow it.
      
      We now permit basic_fbstring<C, T, A1, S> to be constructed or assigned-to from
      std::basic_string<C, T, A2>. The character type and traits must match but the
      allocator is permitted to vary.
      
      Background on my determination that the allocator type was unimportant and
      could be disregarded: In part this is because C++17 made the same choice for
      basic_string_view. Another factor was C++17's std::pmr::string (it's a
      std::string with a different allocator) which I thought should be convertible
      to fbstring in the same way as std::string.
      
      Reviewed By: Gownta
      
      Differential Revision: D5060569
      
      fbshipit-source-id: f8984c528b76356240970c67916c58995d3f228d
      6c244d16
  7. 16 May, 2017 4 commits
  8. 15 May, 2017 5 commits
    • Yedidya Feldblum's avatar
      Drop support for deprecated associative containers · 7d151d2c
      Yedidya Feldblum authored
      Summary:
      [Folly] Drop support for deprecated associative containers.
      
      Namely, `__gnu_cxx::hash_set` and `__gnu_cxx::hash_map`.
      
      Reviewed By: wqfish
      
      Differential Revision: D5058813
      
      fbshipit-source-id: ebbcf10765f5d06776ee8f697cfb78614a3a566c
      7d151d2c
    • Nathan Bronson's avatar
      StampedPtr · 0da40510
      Nathan Bronson authored
      Summary:
      This diff adds StampedPtr, which packs a pointer and a uint16_t into
      a uint64_t with maximum portability and without adding any additional
      functionality.
      
      Reviewed By: yfeldblum, davidtgoldblatt
      
      Differential Revision: D4804614
      
      fbshipit-source-id: 25fe7aff47d1e126ac8edfff4eb0bbb1d34071aa
      0da40510
    • Maxim Georgiev's avatar
      In AsyncSocket::handleErrMessages() inside the loop check if the callback was not uninstalled · 98ceba40
      Maxim Georgiev authored
      Summary: AsyncSocket::handleErrMessages() should check if the error message callback is still installing before calling it, since the callback could be uninstaled on the previous loop iteration.
      
      Reviewed By: yfeldblum
      
      Differential Revision: D5051001
      
      fbshipit-source-id: fc01932c0d36bd8f72bf1905f12211fb83d28674
      98ceba40
    • Yedidya Feldblum's avatar
      List the new GCC 4.9 and C++14 minimum requirement · 7bdb20f8
      Yedidya Feldblum authored
      Summary:
      [Folly] List the new GCC 4.9 and C++14 minimum requirement.
      
      We no longer support GCC 4.8 or C++11.
      
      Closes #590.
      
      Reviewed By: Orvid, mzlee
      
      Differential Revision: D5058942
      
      fbshipit-source-id: 0545d1bb294494e5ef5f17a40c9cf3ac688bd8d0
      7bdb20f8
    • Arkady Shapkin's avatar
      Fix compilation ChecksumDetail.cpp with MSVC · 1559d510
      Arkady Shapkin authored
      Summary:
      MSVC doesn't support `^` and `&` operator for __m128i type
      Closes https://github.com/facebook/folly/pull/594
      
      Reviewed By: yfeldblum, Orvid
      
      Differential Revision: D5053356
      
      Pulled By: djwatson
      
      fbshipit-source-id: f789824052e0c679c265c83ad704109805c21402
      1559d510
  9. 13 May, 2017 1 commit
    • Koen De Keyser's avatar
      Fix compilation on Linux systems without vDSO support · 55b25ffb
      Koen De Keyser authored
      Summary:
      Problems:
      - The vDSO check code in configure.ac is broken, and will always fail (uses AC_LANG_PROGRAM but with arguments in the AC_LANG_SOURCE style)
      - On Linux, using dlopen/dlsym requires -ldl (libdl) during the link phase. This check was missing and this argument was not added to the linker arguments.
      - On a Linux system without vDSO support, libfolly.so still uses vDSO in ClockGettimeWrappers.cpp
      
      Solution:
      - Switched to AC_LANG_SOURCE
      - Required libdl to exist when build target is Linux. This also adds this dependency to libfolly.la, resulting in fixing a dependency issue for Proxygen (recent Proxygen build would have issues in building examples due to failing linking step due to missing dlopen / dlsym / dlclose symbols)
      - In ClockGettimeWrappers.cpp, checking if `__linux__` is set is not sufficient to determine that the system has vDSO support. The autoconf script already exposes a correct check: FOLLY_HAVE_LINUX_VDSO (this is already used in folly/detail/CacheLocality.cpp), so switched to that one.
      Closes https://github.com/facebook/folly/pull/592
      
      Reviewed By: yfeldblum
      
      Differential Revision: D5049816
      
      Pulled By: Orvid
      
      fbshipit-source-id: 58b2ed4c4101274505c61b4825accf262c0d56ef
      55b25ffb
  10. 12 May, 2017 7 commits
    • Philip Pronin's avatar
      return range from AsyncIO::cancel(), fix test · 7728c4b3
      Philip Pronin authored
      Summary:
      Return not just number of cancelled ops, but all of them as well.
      Test was incorrectly assuming `wait(1)` will return exactly one operation, fix
      that as well.
      
      Reviewed By: ot
      
      Differential Revision: D5054684
      
      fbshipit-source-id: 1c53c3f7ba855d1fcfeac8b1b27f90f0872d2c21
      7728c4b3
    • Yedidya Feldblum's avatar
      exception_wrapper::get_object<> · f0daf647
      Yedidya Feldblum authored
      Summary:
      [Folly] `exception_wrapper::get_object<>`.
      
      Returns a pointer to the stored object, if the template type parameter is of the right sort.
      
      Reviewed By: jsedgwick
      
      Differential Revision: D5000720
      
      fbshipit-source-id: 2869439085e8dfb56e6cb439794b03876b7d715c
      f0daf647
    • Yinghai Lu's avatar
      Fix broken promise error in folly::retrying · 4762a35e
      Yinghai Lu authored
      Summary: This diff shows an issue in `folly::retrying`. When the future generation function throws an exception and `folly::retrying` is nested in another functor that returns Future, it will throw `broken promise` instead of the actual exception message, which can be very generic and confusing. Fix is to capture the exception so that exact error message can be propagated up.
      
      Reviewed By: yfeldblum
      
      Differential Revision: D5050690
      
      fbshipit-source-id: 5b9b24977788f60aa778bb8e9cdf4281ea9a0023
      4762a35e
    • James Sedgwick's avatar
      include folly/portability/Sockets.h instead of netinet/tcp.h · b8fb402e
      James Sedgwick authored
      Summary: To satisfy internal linter
      
      Reviewed By: yfeldblum
      
      Differential Revision: D4957870
      
      fbshipit-source-id: 191ac768790fbd8cc8a4d24036c016644ff1d125
      b8fb402e
    • James Sedgwick's avatar
      add FOLLY_FALLTHROUGH throughout to satisfy internal linter · ce7751a2
      James Sedgwick authored
      Summary: changes as suggested by FB-internal linter
      
      Reviewed By: yfeldblum
      
      Differential Revision: D4957742
      
      fbshipit-source-id: c9d94c477d24f153cab0d25edccfd39ff31fdfdf
      ce7751a2
    • James Sedgwick's avatar
      include folly/portability/OpenSSL.h instead of openssl/*.h · d19f7312
      James Sedgwick authored
      Summary: suggested by internal linter
      
      Reviewed By: Orvid
      
      Differential Revision: D4958232
      
      fbshipit-source-id: 69c67d80be092db17703d672524124ca5ef7ba32
      d19f7312
    • Eric Niebler's avatar
      Copying a non-const FunctionRef lvalue should be a trivial operation · 6435670b
      Eric Niebler authored
      Summary: Before this change, when a non-const FunctionRef lvalue is copied, it is treated as any other callable: it is wrapped with an indirection. That's semantically incorrect and potentially creates lifetime problems. Instead, use the compiler generated copy constructor, which only copies the object and function pointers.
      
      Reviewed By: yfeldblum
      
      Differential Revision: D5040843
      
      fbshipit-source-id: f691060bdced2e287ba22d22b961c02c2b924147
      6435670b