1. 28 May, 2017 2 commits
    • Maxim Georgiev's avatar
      Moving DestructorCheck from proxygen library to folly. · c1a1a5e6
      Maxim Georgiev authored
      Summary:
      allow-large-files
      Moving DestructorCheck from proxygen library to folly.
      
      Reviewed By: djwatson
      
      Differential Revision: D5110897
      
      fbshipit-source-id: 02a6cf6336000e8c36484e75d2da820588baf2df
      c1a1a5e6
    • Christopher Dykes's avatar
      Clarify in the docs what belongs in portability/ · 314c43c4
      Christopher Dykes authored
      Summary: This has always been the design rule for what belongs in `folly/portability/`, but was never written down anywhere except in my head, so put it somewhere people can actually find it so I can free that space in my head for other things.
      
      Reviewed By: yfeldblum
      
      Differential Revision: D5140587
      
      fbshipit-source-id: 1f09c17b7ccfff780e1825670a7ffaa75cd1b1d5
      314c43c4
  2. 27 May, 2017 1 commit
    • Philipp Unterbrunner's avatar
      Added folly::hint_emplace_iterator to folly/Iterator.h · 719b2df9
      Philipp Unterbrunner authored
      Summary:
      In contrast to Container::insert(), for any STL container class, Container::emplace() does not have an overload that takes a Container::iterator as its first parameter. (The reason is to prevent ambiguity with respect to target class constructor parameters.) Instead, container classes have a separate emplace_hint() function.
      Because of this separation, folly::emplace_iterator would fail to perform hinted emplacement in constructs where std::insert_iterator would perform hinted insertion.
      This diff adds a new class, folly::hint_emplace_iterator(), and corresponding convenience function, folly::hint_emplacer(), which calls Container::emplace_hint() rather than Container::emplace().
      It would have been trivial to copy&paste the existing folly::emplace_iterator class and simply replace the emplace() call with emplace_hint(), but I did not like the large amount of code repetition. So I decided to do some refactoring and move the emplace()/emplace_hint()/emplace_front()/emplace_back() calls into separate trait classes, and replace emplace_iterator()/hint_emplace_iterator()/front_emplace_iterator()/back_emplace_iterator() with suitable type aliases.
      
      Reviewed By: yfeldblum
      
      Differential Revision: D5097860
      
      fbshipit-source-id: c0b733131a0d0d21fc0a8b08ad655142c6a41c19
      719b2df9
  3. 26 May, 2017 1 commit
    • Christopher Dykes's avatar
      Fix build with Ninja generator · a7001e5c
      Christopher Dykes authored
      Summary:
      We were hitting a bug in CMake's Ninja generator that was causing it to incorrectly attempt to escape the closing quote on `_HAS_AUTO_PTR_ETC=1`, so remove the quotes, as they aren't actually needed.
      This also makes a few quality-of-life changes to make building Folly with Ninja slightly easier.
      
      Closes: https://github.com/facebook/folly/issues/604
      
      Reviewed By: yfeldblum
      
      Differential Revision: D5134585
      
      fbshipit-source-id: 3816e53774f7963b9b4fd8ddf68b83ff7afdefe1
      a7001e5c
  4. 25 May, 2017 2 commits
    • Christopher Dykes's avatar
      Fix reliance on the sign of char in fnv32 and fnv64 · 22d531a8
      Christopher Dykes authored
      Summary:
      Clearly someone noticed this was an issue before and fixed the other 2 overloads, but never fixed these :(
      
      Specifically, ARM has unsigned chars, so this would be producing the wrong values there.
      
      Reviewed By: yfeldblum, mzlee
      
      Differential Revision: D5122992
      
      fbshipit-source-id: eb71dea82c187c09c2c4496f1f7c99bd01db6dd0
      22d531a8
    • Eric Niebler's avatar
      Replace FOLLY_WARN_UNUSED_RESULT with FOLLY_NODISCARD everywhere · 713e4298
      Eric Niebler authored
      Summary: `[[nodiscard]]` is the future. Let's start now.
      
      Reviewed By: yfeldblum
      
      Differential Revision: D5108297
      
      fbshipit-source-id: c98f44af9e282616af92f9171516b6ea18e68c6d
      713e4298
  5. 24 May, 2017 6 commits
    • Nick Terrell's avatar
      Add zstd streaming interface · e1d2ddd5
      Nick Terrell authored
      Summary:
      * Add streaming interface to the `ZstdCodec`
      * Implement `ZstdCodec::doCompress()` and `ZstdCodec::doUncompress()` using the streaming interface.
        [fbgs CodecType::ZSTD](https://fburl.com/pr8chg64) and check that no caller requires thread-safety.
      
      Reviewed By: yfeldblum
      
      Differential Revision: D5026558
      
      fbshipit-source-id: 61faa25c71f5aef06ca2d7e0700f43214353c650
      e1d2ddd5
    • 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
  6. 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
  7. 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
  8. 20 May, 2017 7 commits
  9. 19 May, 2017 3 commits
  10. 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
  11. 16 May, 2017 4 commits
  12. 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
  13. 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