/*
- * Copyright 2016 Facebook, Inc.
+ * Copyright 2017-present Facebook, Inc.
*
* Licensed under the Apache License, Version 2.0 (the "License");
* you may not use this file except in compliance with the License.
#include <chrono>
#include <folly/detail/MemoryIdler.h>
-#include <folly/fibers/FiberManager.h>
+#include <folly/fibers/FiberManagerInternal.h>
#include <folly/portability/Asm.h>
namespace folly {
timeoutHandler.cancelTimeout();
}
-bool Baton::timed_wait(TimeoutController::Duration timeout) {
- return timed_wait(timeout, []() {});
-}
-
void Baton::waitThread() {
if (spinWaitForEarlyPost()) {
assert(waitingFiber_.load(std::memory_order_acquire) == POSTED);
fiber == NO_WAITER &&
waitingFiber_.compare_exchange_strong(fiber, THREAD_WAITING))) {
do {
- folly::detail::MemoryIdler::futexWait(futex_.futex, THREAD_WAITING);
- fiber = waitingFiber_.load(std::memory_order_relaxed);
+ folly::detail::MemoryIdler::futexWait(
+ futex_.futex, uint32_t(THREAD_WAITING));
+ fiber = waitingFiber_.load(std::memory_order_acquire);
} while (fiber == THREAD_WAITING);
}
auto deadline = TimeoutController::Clock::now() + timeout;
do {
const auto wait_rv =
- futex_.futex.futexWaitUntil(THREAD_WAITING, deadline);
+ futex_.futex.futexWaitUntil(uint32_t(THREAD_WAITING), deadline);
if (wait_rv == folly::detail::FutexResult::TIMEDOUT) {
return false;
}
} while (!waitingFiber_.compare_exchange_weak(fiber, new_value));
if (fiber != NO_WAITER) {
- reinterpret_cast<Fiber*>(fiber)->setData(0);
+ reinterpret_cast<Fiber*>(fiber)->resume();
}
}
bool Baton::try_wait() {
- auto state = waitingFiber_.load();
- return state == POSTED;
+ return ready();
}
void Baton::postThread() {
fiberManager_->timeoutManager_->cancel(timeoutPtr_);
}
}
-}
-}
+} // namespace fibers
+} // namespace folly