diff --git a/thread/awaiter.h b/thread/awaiter.h index fdf4c234..fb1966fc 100644 --- a/thread/awaiter.h +++ b/thread/awaiter.h @@ -52,10 +52,15 @@ struct Awaiter { std::promise p; void resume() { return p.set_value(); } int suspend(Timeout timeout = {}) { - auto ret = p.get_future().wait_for(timeout.std_duration()); - if (ret == std::future_status::timeout) { - errno = ETIMEDOUT; - return -1; + auto duration = timeout.std_duration(); + if (duration == std::chrono::microseconds().max()) { + p.get_future().wait(); + } else { + auto ret = p.get_future().wait_for(duration); + if (ret == std::future_status::timeout) { + errno = ETIMEDOUT; + return -1; + } } return 0; }