1. 19 Jun, 2019 8 commits
    • Dylan Yudaken's avatar
      add a comment to explain non-obvious semantics · 6fe1af4a
      Dylan Yudaken authored
      Summary: It might not be obvious that the parent in Subprocess::Options refers to the parent thread (see man PRCTL(2)).
      
      Reviewed By: yfeldblum
      
      Differential Revision: D15873239
      
      fbshipit-source-id: 2a1cc840281d25030708e4d10e633c7d8a9158ed
      6fe1af4a
    • Orvid King's avatar
      Prevent AtomicHashArray being contstructed with 0 elements · 0a310d52
      Orvid King authored
      Summary: An atomic hash array with zero elements isn't useful in any way, not even as an empty set (due to it not being comparable), and there are multiple places that simply crash if you try to use, so just prevent it from being constructed in the first place.
      
      Reviewed By: yfeldblum
      
      Differential Revision: D15789540
      
      fbshipit-source-id: a811f70fb0e9e21a83dc9aea79ec017ae2d7e0a5
      0a310d52
    • Scott Pruett's avatar
      clarify documentation for IOBuf::length() · 6f3d4da9
      Scott Pruett authored
      Summary:
      The documentation on length() is somewhat ambiguous
      when dealing with chains of IOBufs -- it is only clear after
      reading implementations that "data" refers to "the data in
      this single IOBuf, potentially only part of a chain".
      
      Reviewed By: yfeldblum
      
      Differential Revision: D15830189
      
      fbshipit-source-id: d3319abd2d53a76665442d1b93b78a7d1a77dcc0
      6f3d4da9
    • Andrii Grynenko's avatar
      Fix waitImpl to detach the future after calling setCallback_ · 5947ad63
      Andrii Grynenko authored
      Summary: It's not safe to access the core after setCallback_ was called, while SemiFuture::operator= may check core_.executor_
      
      Reviewed By: yfeldblum
      
      Differential Revision: D15871436
      
      fbshipit-source-id: 1fe0a6b3fe1638cd8f5bab49572203f7b252c0dd
      5947ad63
    • Prabhakaran Ganesan's avatar
      Perform TOS reflection only if the TOS value in SYN is non-zero · 9074a5ba
      Prabhakaran Ganesan authored
      Summary:
      TOS reflected is implemented in the AsyncServerSocket layer. The way it works is by extracting the TOS value from cached SYN packet and applying a setsockopt() on the accepted socket. But if the TOS value in the cached SYN packet is ZERO, this results in TOS=0 for the accepted socket, resulting in problems.
      
      Made changes to limit TOS reflection only if SYN carries non-zero TOS.
      
      Reviewed By: yfeldblum
      
      Differential Revision: D15633518
      
      fbshipit-source-id: 856ba2059145e37fdab580b094349632677a40ba
      9074a5ba
    • Aaryaman Sagar's avatar
      Make DistributedMutex build on mobile ARM · 6829ab70
      Aaryaman Sagar authored
      Summary:
      std::max() is not constexpr for the platform we build with on android for some
      reason
      
      Reviewed By: yfeldblum
      
      Differential Revision: D15848911
      
      fbshipit-source-id: aa8b62514b0b1b23f9a179736c2e79885ddf8689
      6829ab70
    • Orvid King's avatar
      Use checked math when allocating in folly/memory/Arena.h · da41b65e
      Orvid King authored
      Summary: To prevent ultra large allocations from causing out of bounds read & writes.
      
      Reviewed By: yfeldblum
      
      Differential Revision: D15610028
      
      fbshipit-source-id: 5adaec121c1fc8a0f0d3d0e56b85fabb2ec89d4c
      da41b65e
    • Nathan Bronson's avatar
      add pmr aliases · b9807709
      Nathan Bronson authored
      Summary:
      Adds folly::pmr::* aliases for all of the F14 map and set types.
      The only missing piece for full pmr support was to tolerate a deleted
      operator= for allocators that are never actually assigned (based on the
      propagate_... properties).
      
      Reviewed By: yfeldblum
      
      Differential Revision: D15572220
      
      fbshipit-source-id: fd9687a73bf67e5e9c7962cc788fae658ccf7d36
      b9807709
  2. 17 Jun, 2019 1 commit
    • Yedidya Feldblum's avatar
      A semaphore for testing · d12df6e9
      Yedidya Feldblum authored
      Summary:
      [Folly] A semaphore type for testing scenarios which need a basic portable semaphore. Supports FIFO and LIFO wake policies.
      
      May be used when testing other, more sophisticated, semaphore types.
      
      Reviewed By: strager
      
      Differential Revision: D15843438
      
      fbshipit-source-id: 9136e8e19ea79fce4191e69795d5fe848a482f03
      d12df6e9
  3. 15 Jun, 2019 4 commits
    • Yedidya Feldblum's avatar
      Fix a DistributedMutex build failure under MSVC · 50b82b1a
      Yedidya Feldblum authored
      Summary:
      [Folly] Fix a `DistributedMutex` build failure under MSVC, which does not have great support for whatever is happening here, which in this case is a case of variable templates with SFINAE.
      
      Not much information to go on, so this is a best guess:
      ```
      folly/synchronization/DistributedMutex-inl.h(563): fatal error C1001: An internal error has occurred in the compiler.
      ```
      
      Reviewed By: aary
      
      Differential Revision: D15837884
      
      fbshipit-source-id: 8da993cc27373f86728963d2112812c15a4f34ea
      50b82b1a
    • Yedidya Feldblum's avatar
      Let FutureSplitter hold a KeepAlive · 81798e75
      Yedidya Feldblum authored
      Summary: [Folly] Let `FutureSplitter` hold a `Executor::KeepAlive<>` rather than a raw `Executor*`.
      
      Reviewed By: andriigrynenko
      
      Differential Revision: D15835712
      
      fbshipit-source-id: c0d5b4271212708657f550d5df51d4272e33fc44
      81798e75
    • Yedidya Feldblum's avatar
      Add Executor::KeepAlive copy-assignment operator · 9db7434a
      Yedidya Feldblum authored
      Summary:
      [Folly] Add `Executor::KeepAlive` copy-assignment operator. Before this change, the copy-assignment operator is implicitly defined as deleted because it is not explicitly defined and `Executor::KeepAlive` has any of a user-declared move constructor or a user-declared move-assignment operator. This is true even though it has converting assignment operators that look like copy-assignment, because the copy-assignment operator is defined as deleted and it is more specific than the converting assignment operators so it is the best candidate overload at overload resolution time.
      
      See: https://en.cppreference.com/w/cpp/language/copy_assignment.
      
      Reviewed By: andriigrynenko
      
      Differential Revision: D15836577
      
      fbshipit-source-id: 4f0887875db2e0233d48d71f2f05d925300d3dc3
      9db7434a
    • Yedidya Feldblum's avatar
      Explicitly use correct flags type in Executor::makeKeepAlive · 67561821
      Yedidya Feldblum authored
      Summary: [Folly] Explicitly use correct flags type in `Executor::makeKeepAlive` rather than relying on implicit conversion from `bool` after {D15683241}.
      
      Reviewed By: andriigrynenko
      
      Differential Revision: D15835078
      
      fbshipit-source-id: 49d7895bc909996b646c19c6a2fa0690a58cbe13
      67561821
  4. 14 Jun, 2019 4 commits
    • Ying Hu's avatar
      add emplace to folly sorted_vector_map · b4c51441
      Ying Hu authored
      Summary: add emplace for folly::sorted_vector_map
      
      Reviewed By: yfeldblum
      
      Differential Revision: D15789529
      
      fbshipit-source-id: 2afccd4553cc53afd0e92729841120722f72b1ae
      b4c51441
    • Nick Terrell's avatar
      Use annotate_object_leaked() in LeakySingleton · ad1889b2
      Nick Terrell authored
      Summary:
      Use `folly::annotate_object_leaked()` in `folly::LeakySingleton`
      instead of its own custom suppression. Additionally, this removes
      the overhead of the `std::list<>` in opt-mode, but this is minor.
      
      Reviewed By: yfeldblum
      
      Differential Revision: D15755787
      
      fbshipit-source-id: 053b8789c58941176977e6adbc4863d33d6ebed9
      ad1889b2
    • Nick Terrell's avatar
      Add leak sanitize annotations · eb02c609
      Nick Terrell authored
      Summary:
      Add a function `folly::annotate_object_leaked(void const*)`
      that suppresses LSAN warnings for the passed pointer. It does so
      by keeping a static map of all the pointers passed to the function.
      Objects can later be unsuppressed with
      `annotate_object_collected(void const*)`.
      
      When ASAN is disabled the function is an inlinable no-op.
      
      This function is useful when you want to intentionally leak
      memory, and LSAN isn't smart enough to detect the pointer
      stored in memory. For example at the time of writing LSAN
      cannot follow the pointer in `folly::atomic_shared_ptr`.
      
      Reviewed By: yfeldblum
      
      Differential Revision: D15755788
      
      fbshipit-source-id: d9be0cfb253f1b89d691892eb085c0b2349c4438
      eb02c609
    • Yedidya Feldblum's avatar
      Fix DistributedMutex build failure under MSVC · cbca4ccd
      Yedidya Feldblum authored
      Summary:
      [Folly] Fix `DistributedMutex` build failure under MSVC, which fails to understand conversion from `std::integral_constant<T, ...>` to `T` in variable template parameter-list contexts.
      
      Fixes #1164.
      
      Reviewed By: aary
      
      Differential Revision: D15819859
      
      fbshipit-source-id: 1a2647e908fd9ad3362c4bea15d64db75a79f95d
      cbca4ccd
  5. 13 Jun, 2019 10 commits
    • Yedidya Feldblum's avatar
      Lift the accept4 check · 3027a430
      Yedidya Feldblum authored
      Summary: [Folly] Lift the `accept4` check to an explicit preprocessor symbol set at configure time.
      
      Reviewed By: gkmhub
      
      Differential Revision: D15802038
      
      fbshipit-source-id: e85a258bb6650af42ab149b0bff4854196c3157d
      3027a430
    • Joe Loser's avatar
      Avoid C++-only attribute in CPortability.h (#1152) · e170172b
      Joe Loser authored
      Summary:
      - In defining `FOLLY_EXPORT`, we define it differently based on the GCC
        version. In the case of using GCC or Clang 5+, it will rely on
        `[[gnu::visibility("default")]]` which is a C++-specific attribute.
      - Since `CPortability.h` is intended to be made to be included for C
        projects, remove `[[gnu::visibility("default")]]` and always define
        `FOLLY_EXPORT` using `__attribute__` syntax which works in C.
      Pull Request resolved: https://github.com/facebook/folly/pull/1152
      
      Reviewed By: yfeldblum
      
      Differential Revision: D15618549
      
      Pulled By: Orvid
      
      fbshipit-source-id: fdc72d73f7b38b8a4196cc5677d814544968fb37
      e170172b
    • Nathan Bronson's avatar
      support for memory_resource · 23677ce0
      Nathan Bronson authored
      Summary:
      This diff adds folly/memory/MemoryResource.h, which includes
      <experimental/memory_resource> or <memory_resource> if they are available.
      
      Reviewed By: yfeldblum
      
      Differential Revision: D15789182
      
      fbshipit-source-id: ff8410b59354af7124a50ca6000c072372397cda
      23677ce0
    • Joe Loser's avatar
      Simplify _fs UDL in FixedString.h (#1149) · 49b2552a
      Joe Loser authored
      Summary:
      - Simplify `_fs` user defined literal by removing the preprocessor branch.
      - Since Folly only supports C++14 now, `#if __cplusplus >= 201402L` will always
        evaluate to true.
      Pull Request resolved: https://github.com/facebook/folly/pull/1149
      
      Reviewed By: ericniebler
      
      Differential Revision: D15638288
      
      Pulled By: yfeldblum
      
      fbshipit-source-id: b690e51cbe8ba57baeb8704722e9f126f15e9d4a
      49b2552a
    • Yedidya Feldblum's avatar
      Split kIsSanitizeAddress and kIsLibrarySanitizeAddress · 5a68ed6f
      Yedidya Feldblum authored
      Summary: [Folly] Split `kIsSanitizeAddress` and `kIsLibrarySanitizeAddress`, letting them follow the corresponding preprocessor symbols.
      
      Reviewed By: simpkins
      
      Differential Revision: D15773943
      
      fbshipit-source-id: 938ae9d4106a18c3115df5bdbf8560531da3ccbe
      5a68ed6f
    • Michael Park's avatar
      Named an unnamed thread in ObserverManager · 03ef648d
      Michael Park authored
      Summary: This patch names the thread inside `ObserverManager::NextQueue`, similar to the vector of threads in `ObserverManager::CurrentQueue`.
      
      Reviewed By: yfeldblum
      
      Differential Revision: D15746165
      
      fbshipit-source-id: 02df5616dcc2af27f318088c051a49d14df9a4df
      03ef648d
    • Aaryaman Sagar's avatar
      Optimizations, support for exceptions and big return values for lock_combine · 886a70d9
      Aaryaman Sagar authored
      Summary:
      Some optimizations and changes to make mutex migrations easier:
      - Add exception handling support, this allows using lock_combine pretty much
        anywhere a unique_lock would be used and makes transitioning between lock
        methods easier and more efficient as users aren't required to maintain their
        own unions anywhere (eg. with folly::Try)
      - Add support for big return values so people can return anything from the
        critical section.  Without this, users would have to use code of the following
        form, which is prone to false sharing with metadata for the waiting thread
      ```
      auto value = ReturnValue{};
      mutex.lock_combine([&]() {
        value = critical_section();
      });
      ```
      - Add some optimizations like inlining the combine codepath and an optimistic
        load to elide a branch.  This gets us a ~8% throughput improvement from
        before.  More importantly, This prevents compilers from messing up the
        generated code to dereference the waiter node whenever they feel like.
      - Defer time publishing for combinable threads until a preemption.  This gets us
        to the same level of efficiency as std::atomic even on broadwell, takes us to
        7x of the baseline (std::mutex) on the NUMA-less machines and almost perfectly
        parallel in the moderate concurrency levels.  I suspect we can do better with
        NUMA-awareness, but that's for another diff
      
      Reviewed By: yfeldblum
      
      Differential Revision: D15522658
      
      fbshipit-source-id: 420f4202503305d57b6bd59a9a4ecb67d4dd3c2e
      886a70d9
    • Yedidya Feldblum's avatar
      Rename to_underlying_type to to_underlying · 92c4c7e2
      Yedidya Feldblum authored
      Summary:
      [Folly] Rename `to_underlying_type` to `to_underlying`, following the pattern of `to_unsigned` and `to_signed`.
      
      (Note: this ignores all push blocking failures!)
      
      Reviewed By: mzlee
      
      Differential Revision: D15776448
      
      fbshipit-source-id: d1f87e917c22a1aa47fb5e37a3ecf7032cec0d48
      92c4c7e2
    • Alexey Spiridonov's avatar
      Use GTEST_SKIP for SKIP · 9b9aadfc
      Alexey Spiridonov authored
      Summary:
      The anticipated (and desired) effect of this change is to make it so that `SKIP` in `SetUp` will actually always skip the test. Right now, test behavior depends on the setting `FOLLY_SKIP_AS_FAILURE` — when this is false, the test will get **executed** despite being "skipped".
      
      I believe it's unlikely that tests rely on the current behavior of doing `SKIP` from `SetUp` and running the test anyway. So, I expect this to be a relatively safe change.
      
      Reviewed By: simpkins
      
      Differential Revision: D15703771
      
      fbshipit-source-id: d32e1d9c4cb8cb99c667882b81946154c6ca906b
      9b9aadfc
    • Aaryaman Sagar's avatar
      Use folly::ThreadLocal in DeterministicSchedule · 9fc5d328
      Aaryaman Sagar authored
      Summary:
      DeterministicSchedule does not work on mobile because __thread or thread_local
      support is not present.  folly::ThreadLocal helps because it uses
      pthread_getspecific for mobile and platforms where support for this is not there
      
      This does mean that we can't add DSched tests for folly::ThreadLocal, but that
      does not have DSched tests anyway.  When we add DSched tests for that, we can
      move to using a lock + map keyed by std::this_thread::get_id
      
      Reviewed By: yfeldblum
      
      Differential Revision: D15770455
      
      fbshipit-source-id: 2a3cc6b3b1c116469cce6295a641d784e5bdfd50
      9fc5d328
  6. 12 Jun, 2019 4 commits
  7. 11 Jun, 2019 5 commits
    • Adam Simpkins's avatar
      update the watchman manifest to include all Eden thrift files · 348f8727
      Adam Simpkins authored
      Summary:
      This is a hack for now to allow fbsource-based watchman getdeps builds to
      succeed.  In the long run we need to update Watchman's CMakeLists.txt to
      depend on a proper EdenFS build, rather than copying Eden's thrift files into
      Watchman's source tree.
      
      Reviewed By: wez
      
      Differential Revision: D15753320
      
      fbshipit-source-id: 2dea483c2053c4ea1cf64021c4bbc3239fce645d
      348f8727
    • Yedidya Feldblum's avatar
      Support various operations on empty IPAddress and SocketAddress · a34214c4
      Yedidya Feldblum authored
      Summary: [Folly] Support various operations on empty `IPAddress` and `SocketAddress`, i.e. default-constructed instances, such as `operator==` and `hash`. V.s. throwing exceptions.
      
      Reviewed By: simpkins
      
      Differential Revision: D15750100
      
      fbshipit-source-id: 89853635f6aab3c295f6fca4e66e6435b0839357
      a34214c4
    • Shrikrishna Khare's avatar
      fbcode_builder: getdeps: fboss: add FBOSS fetcher · 3fe63e48
      Shrikrishna Khare authored
      Summary:
      The previous diffs in the stack add fbcode_builder manifests for FBOSS
      dependencies iproute2 and OpenNSL. The other FBOSS dependencies already have
      fbcode_builder support. Thus, add FBOSS manifest.
      
      Additionally, this patch also modifies fboss CMakeLists.txt to get FBOSS to
      build using fbcode_builder.
      
      Reviewed By: wez
      
      Differential Revision: D15626298
      
      fbshipit-source-id: 31802ef695ae69b08f526bbeb299c59f3b9d44be
      3fe63e48
    • Shrikrishna Khare's avatar
      fbcode_builder: getdeps: fboss: update libcurl manifest to disable lldp · fc8b6513
      Shrikrishna Khare authored
      Summary:
      D15683387 introduced manifest for libcurl and used cmake instead of autoconf
      (rationale: having cmake build curl would make it easy as we want curl to build
      on windows and macos).
      
      if libcurl finds ldap.h, then it builds with ldap enabled.
      On my devserver, ldap library is not installed, and thus libcurl builds without
      it, and links with FBOSS binaries fine.
      
      In sandbox, ldap seems to be installed, thus libcurl builds with ldap. However,
      linking fails for FBOSS binaries as those don't link against ldap - FBOSS does
      not depend on ldap.
      
      Thus, we need a way to configure libcurl with ldap disabled. [cmake.defines]
      CURL_DISABLE_LDAP=OFF, does not quite do it. Thus, am going with autoconf, with
      args --disable-ldap for now for Linux and cmake for non-Linux environments.
      
      Reviewed By: wez
      
      Differential Revision: D15730947
      
      fbshipit-source-id: 2ce48976ee785401d550720cbdccb22f9d416675
      fc8b6513
    • Shrikrishna Khare's avatar
      fbcode_builder: getdeps: fboss: extend iproute2 builder to copy lib/* · c9e0baad
      Shrikrishna Khare authored
      Summary:
      D15588809 introduced manifest and customer builder for iproute2. While the
      Iproute2Builder copies include/* from build to install directory, it does not
      copy lib/* which contains the libnetlink.a
      
      As a result, the build system looks up libnetlink.a on local machine (which it
      may not find).
      
      Fix it by explicitly coping lib/* as well.
      
      Reviewed By: wez
      
      Differential Revision: D15708835
      
      fbshipit-source-id: 3f5906eb48ce982b6e887cca0d3c11314425beab
      c9e0baad
  8. 10 Jun, 2019 1 commit
    • Jingyi Yang's avatar
      add fiber support · 9bded589
      Jingyi Yang authored
      Summary: This diff allows zmq socket to run on folly::fibers
      
      Reviewed By: saifhhasan
      
      Differential Revision: D15113447
      
      fbshipit-source-id: 8a0e1f91d719a9deda48837d4ff1065408280b72
      9bded589
  9. 09 Jun, 2019 2 commits
  10. 08 Jun, 2019 1 commit
    • Yedidya Feldblum's avatar
      Fixed constexpr append in FixedString tests · 336bfca0
      Yedidya Feldblum authored
      Summary:
      [Folly] Fixed constexpr append in `FixedString` tests after {D15618465}.
      
      ```
      folly/test/FixedStringTest.cpp: In member function 'virtual void FixedStringAssignTest_ConstexprAppendLiteral_Test::TestBody()':
      folly/test/FixedStringTest.cpp:360:3: error: non-constant condition for static assertion
         static_assert(constexpr_append_literal_test() == "hello world!", "");
         ^~~~~~~~~~~~~
      In file included from folly/Range.h:25:0,
                       from folly/FixedString.h:33,
                       from folly/test/FixedStringTest.cpp:20:
      folly/test/FixedStringTest.cpp:360:47:   in constexpr expansion of 'constexpr_append_literal_test()'
      folly/test/FixedStringTest.cpp:355:18:   in constexpr expansion of '#'result_decl' not supported by dump_expr#<expression error>.folly::BasicFixedString<char, 20>::append((& s[7]))'
      folly/FixedString.h:1277:48:   in constexpr expansion of 'folly::constexpr_strlen<char>(that)'
      folly/portability/Constexpr.h:68:21: error: 'strlen((& s[7]))' is not a constant expression
         return std::strlen(s);
                ~~~~~~~~~~~^~~
      ```
      
      Reviewed By: simpkins
      
      Differential Revision: D15643402
      
      fbshipit-source-id: c7e26a0c37c956300364c566f211c866985d9dc2
      336bfca0