15 using std::chrono::milliseconds;
40 assert(timeoutSet_ ==
nullptr);
41 assert(prev_ ==
nullptr);
42 assert(next_ ==
nullptr);
45 timeoutSet_ = timeoutSet;
49 timeoutSet_->getInterval();
53 if (next_ ==
nullptr) {
54 assert(timeoutSet_->tail_ ==
this);
55 timeoutSet_->tail_ = prev_;
57 assert(timeoutSet_->tail_ !=
this);
61 if (prev_ ==
nullptr) {
62 assert(timeoutSet_->head_ ==
this);
63 timeoutSet_->head_ = next_;
64 timeoutSet_->headChanged();
66 assert(timeoutSet_->head_ !=
this);
70 timeoutSet_ =
nullptr;
77 milliseconds intervalMS,
78 milliseconds atMostEveryN,
84 interval_(intervalMS),
85 atMostEveryN_(atMostEveryN) {
90 milliseconds intervalMS,
91 milliseconds atMostEveryN)
96 interval_(intervalMS),
97 atMostEveryN_(atMostEveryN) {
103 assert(!inTimeoutExpired_);
108 assert(head_ ==
nullptr);
109 assert(tail_ ==
nullptr);
121 while (tail_ !=
nullptr) {
122 tail_->cancelTimeout();
131 assert(callback->
prev_ ==
nullptr);
132 assert(callback->
next_ ==
nullptr);
137 if (head_ ==
nullptr) {
140 assert(tail_ ==
nullptr);
141 assert(!isScheduled());
142 if (!inTimeoutExpired_) {
148 assert(inTimeoutExpired_ || isScheduled());
149 assert(tail_->next_ ==
nullptr);
150 tail_->next_ = callback;
159 if (inTimeoutExpired_) {
170 head_->getTimeRemaining(timeoutClock_.millisecondsSinceEpoch());
188 assert(!inTimeoutExpired_);
189 inTimeoutExpired_ =
true;
204 auto now = timeoutClock_.millisecondsSinceEpoch();
206 while (head_ !=
nullptr) {
207 milliseconds delta = head_->getTimeRemaining(
now);
208 if (delta > milliseconds(0)) {
209 if (delta < atMostEveryN_) {
210 delta = atMostEveryN_;
static std::shared_ptr< RequestContext > setContext(std::shared_ptr< RequestContext > ctx)
void scheduleTimeout(Callback *callback)
AsyncTimeoutSet::TimeoutClock & getTimeoutClock()
std::chrono::steady_clock::time_point now()
std::shared_ptr< folly::RequestContext > context_
void timeoutExpired() noexceptoverride
virtual void timeoutExpired() noexcept=0
requires E e noexcept(noexcept(s.error(std::move(e))))
virtual std::chrono::milliseconds millisecondsSinceEpoch()=0
static std::shared_ptr< RequestContext > saveContext()
std::chrono::milliseconds millisecondsSinceEpoch() override
bool scheduleTimeout(uint32_t milliseconds)
void setScheduled(AsyncTimeoutSet *timeoutSet, Callback *prev)
~AsyncTimeoutSet() override
AsyncTimeoutSet(folly::TimeoutManager *timeoutManager, std::chrono::milliseconds intervalMS, std::chrono::milliseconds atMostEveryN=std::chrono::milliseconds(0), TimeoutClock *timeoutClock=nullptr)
std::chrono::milliseconds millisecondsSinceEpoch()
TimeoutClock & timeoutClock_
bool timePointInitialized(const T &time)