mirror of
https://github.com/Icinga/icinga2.git
synced 2025-07-22 13:14:32 +02:00
Timeout: use a plain callback, not an unnecessary coroutine
This commit is contained in:
parent
92ab913226
commit
faaeb4eb2e
@ -148,8 +148,6 @@ void AsioConditionVariable::Wait(boost::asio::yield_context yc)
|
|||||||
|
|
||||||
void Timeout::Cancel()
|
void Timeout::Cancel()
|
||||||
{
|
{
|
||||||
m_Cancelled.store(true);
|
|
||||||
|
|
||||||
boost::system::error_code ec;
|
boost::system::error_code ec;
|
||||||
m_Timer.cancel(ec);
|
m_Timer.cancel(ec);
|
||||||
}
|
}
|
||||||
|
@ -172,42 +172,19 @@ public:
|
|||||||
|
|
||||||
template<class Executor, class TimeoutFromNow, class OnTimeout>
|
template<class Executor, class TimeoutFromNow, class OnTimeout>
|
||||||
Timeout(boost::asio::io_context& io, Executor& executor, TimeoutFromNow timeoutFromNow, OnTimeout onTimeout)
|
Timeout(boost::asio::io_context& io, Executor& executor, TimeoutFromNow timeoutFromNow, OnTimeout onTimeout)
|
||||||
: m_Timer(io)
|
: m_Timer(io, timeoutFromNow)
|
||||||
{
|
{
|
||||||
Ptr keepAlive (this);
|
m_Timer.async_wait(boost::asio::bind_executor(executor, [onTimeout = std::move(onTimeout)](boost::system::error_code ec) {
|
||||||
|
if (!ec) {
|
||||||
m_Cancelled.store(false);
|
onTimeout();
|
||||||
m_Timer.expires_from_now(std::move(timeoutFromNow));
|
|
||||||
|
|
||||||
IoEngine::SpawnCoroutine(executor, [this, keepAlive, onTimeout](boost::asio::yield_context yc) {
|
|
||||||
if (m_Cancelled.load()) {
|
|
||||||
return;
|
|
||||||
}
|
}
|
||||||
|
}));
|
||||||
{
|
|
||||||
boost::system::error_code ec;
|
|
||||||
|
|
||||||
m_Timer.async_wait(yc[ec]);
|
|
||||||
|
|
||||||
if (ec) {
|
|
||||||
return;
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
if (m_Cancelled.load()) {
|
|
||||||
return;
|
|
||||||
}
|
|
||||||
|
|
||||||
auto f (onTimeout);
|
|
||||||
f();
|
|
||||||
});
|
|
||||||
}
|
}
|
||||||
|
|
||||||
void Cancel();
|
void Cancel();
|
||||||
|
|
||||||
private:
|
private:
|
||||||
boost::asio::deadline_timer m_Timer;
|
boost::asio::deadline_timer m_Timer;
|
||||||
std::atomic<bool> m_Cancelled;
|
|
||||||
};
|
};
|
||||||
|
|
||||||
}
|
}
|
||||||
|
Loading…
x
Reference in New Issue
Block a user