Thanks to visit codestin.com
Credit goes to github.com

Skip to content

Tags: gyang/folly

Tags

v2020.11.02.00

Toggle v2020.11.02.00's commit message
Disable an exception-throw stress test for DistributedMutex under TSAN

Summary:
This test inexplicably aborts when ran under TSAN.  TSAN reports a read-write
race where the exception is freed by the lock-holder / combiner thread and read
concurrently by the thread that requested the combine operation.

TSAN reports a similar read-write race for this code as well
https://gist.github.com/aary/a14ae8d008e1d48a0f2d61582209f217 (copied below).
Which is easier to verify as being correct.  Though this does not conclusively
prove that this test and implementation are race-free, the above repro combined
with error-free stress runs of this test under other modes (optimized builds
with and without both ASAN and UBSAN) give us a high signal at TSAN's error
being a false-negative.

So disabling it for now until some point in the future where TSAN stops
reporting this as a false-negative

```
namespace {
struct Storage {
  std::atomic<std::uint64_t> futex_{0};
  std::atomic<std::uint64_t> next_;
  std::aligned_storage_t<48, 8> storage_;
};

template <typename Waiter>
void transferCurrentException(Waiter* waiter) {
  assert(std::current_exception());
  new (&waiter->storage_) std::exception_ptr{std::current_exception()};
  waiter->futex_.store(1, std::memory_order_release);
}

template <template <typename> class Atom = std::atomic>
void concurrentExceptionPropagationStress(
    int,
    std::chrono::milliseconds) {
  auto exceptions = std::vector<std::unique_ptr<Storage>>{};
  exceptions.resize(1000000);
  for (auto i = std::size_t{0}; i < exceptions.size(); ++i) {
    exceptions[i] = std::make_unique<Storage>();
  }
  auto throwing = std::function<void(std::uint64_t)>{[&](auto counter) {
    if (counter % 2) {
      throw std::runtime_error{folly::to<std::string>(counter)};
    }
  }};

  std::cout << "Started test" << std::endl;
  auto writer = std::thread{[&]() {
    for (auto i = std::size_t{0}; i < exceptions.size(); ++i) {
      try {
        std::this_thread::yield();
        throwing(i);
      } catch (...) {
        transferCurrentException(exceptions.at(i).get());
        continue;
      }

      exceptions.at(i)->futex_.store(2, std::memory_order_release);
    }
  }};

  auto reader = std::thread{[&]() {
    for (auto i = std::size_t{0}; i < exceptions.size(); ++i) {
      auto value = std::uint64_t{};
      while (!(value = exceptions.at(i)->futex_.load(std::memory_order_acquire))) {}

      if (value == 1) {
        try {
          auto buf = reinterpret_cast<std::exception_ptr*>(&exceptions.at(i)->storage_);
          auto ex = folly::launder(buf);
          auto copy = std::move(*ex);
          ex->exception_ptr::~exception_ptr();
          std::rethrow_exception(std::move(copy));
        } catch (std::exception& exc) {
          assert(folly::to<std::uint64_t>(exc.what()) == i);
        }
      }
    }
  }};

  reader.join();
  writer.join();
}
} // namespace
```

Reviewed By: yfeldblum

Differential Revision: D24653383

fbshipit-source-id: 3ce166766eb42b22ec7b8cfaf8d31ca53580ff9e

v2020.10.26.00

Toggle v2020.10.26.00's commit message
Use static_cast instead of function-style cast in ConstexprMath.h

Summary:
Some llvm toolsets mis-parse the function-like C-style casts in ConstexprMath.h as function declarations, resulting in strange compiler errors. Prefer `static_cast` to eliminate the ambiguity.

Note: We cannot use brace-initialization syntax, because that would error on narrowing conversions.

Reviewed By: ispeters, Mizuchi

Differential Revision: D24463342

fbshipit-source-id: 5d5aabb08cd20e91a1a5f5460cc4505cafb3cdfc

v2020.10.19.00

Toggle v2020.10.19.00's commit message
Add `midpoint()` calculation to folly

Summary:
A number of libraries at Facebook include interval midpoint calculations; however, doing these in a mathematically precise way (without over/underflow) can be tricky. Doing them wrong can break binary searches over large datasets and give imprecise floating-point calculations.

This function provides an early opportunity to fix binary searches and other calculations which can later be updated to `std::midpoint()` when C++20 becomes available.

Reviewed By: yfeldblum

Differential Revision: D23997097

fbshipit-source-id: 373e0dc1d1ff071f697ee782be46fb0d49a2f8f7

v2020.10.12.00

Toggle v2020.10.12.00's commit message
Add support for UDP RX timestamps

Summary: Add support for UDP RX timestamps

Reviewed By: mjoras

Differential Revision: D24146914

fbshipit-source-id: 381839fc5402f13e428364c47c5752473acda6af

v2020.10.05.00

Toggle v2020.10.05.00's commit message
Remove --skip-project-specific flag

Summary: This doesn't do anything anymore and is going to be removed in D23993306, let's remove it here first.

Reviewed By: yns88

Differential Revision: D23993954

fbshipit-source-id: 4d7dd5f992e34be7a0da16ce7cf59810407649c4

v2020.09.28.00

Toggle v2020.09.28.00's commit message
Make SymbolizerTest pass if compiled as PIE.

Summary:
The symbolizer takes mapped addresses (address listed in ELF, offset by the binary offset (which is zero for non-PIE)) and symbolizes it into non-mapped addresses. In a couple of places in SymbolizerTest, we took the non-mapped addresses and symbolized them again, which wouldn't work if the binary was compiled with PIE. In another place in SymbolizerTest, the mapped address was used to look up DWARF information, whereas we needed the non-mapped address. This diff addresses these issues.

Additionally, I discovered that r_debug::r_map->l_addr is the "right" way to get the PIE offset, so this diff pulls that common functionality to symbolizer/detail/Debug.h and use it for Symbolizer and the three tests so far that need PIE relocation adjustments.

Reviewed By: yfeldblum

Differential Revision: D23492850

fbshipit-source-id: 62353e576c50b44070b323b5477fea9bb4c0b500

v2020.09.21.00

Toggle v2020.09.21.00's commit message
fix overflow in EF::UpperBitsReader::reposition

Reviewed By: ot

Differential Revision: D23802800

fbshipit-source-id: 993060123790058b44d13c0b38eb4a04a28462a2

v2020.09.14.00

Toggle v2020.09.14.00's commit message
Enforce r-value use of Future::getVia

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

v2020.09.07.00

Toggle v2020.09.07.00's commit message
Fix StaticSingletonManager::create_<true>

Summary: [Folly] Fix `StaticSingletonManager::create_<true>` which is missing the `noexcept` specification.

Reviewed By: Mizuchi, xavierd

Differential Revision: D23552042

fbshipit-source-id: 629ad215602125a3e6322b36948df78c62fbef15

v2020.08.31.00

Toggle v2020.08.31.00's commit message
Creating tag v2020.08.31.00

fbshipit-source-id-base: 385eb2ff26139f26c77191793abaaf3dfbac5309