File tree Expand file tree Collapse file tree 2 files changed +11
-2
lines changed
include/userver/engine/impl Expand file tree Collapse file tree 2 files changed +11
-2
lines changed Original file line number Diff line number Diff line change 55
66#include < userver/engine/deadline.hpp>
77#include < userver/engine/future_status.hpp>
8+ #include < userver/engine/impl/actor.hpp>
89#include < userver/engine/impl/context_accessor.hpp>
910#include < userver/engine/impl/wait_list_fwd.hpp>
1011#include < userver/utils/result_store.hpp>
@@ -13,7 +14,7 @@ USERVER_NAMESPACE_BEGIN
1314
1415namespace engine ::impl {
1516
16- class FutureStateBase : private ContextAccessor {
17+ class FutureStateBase : private ContextAccessor , public deadlock_detector ::Actor {
1718public:
1819 bool IsReady () const noexcept final ;
1920
@@ -25,6 +26,8 @@ class FutureStateBase : private ContextAccessor {
2526 // Internal helper for WaitAny/WaitAll
2627 ContextAccessor* TryGetContextAccessor () noexcept { return this ; }
2728
29+ utils::StringLiteral GetActorType () const override { return " Future" ; }
30+
2831protected:
2932 FutureStateBase () noexcept ;
3033 ~FutureStateBase ();
Original file line number Diff line number Diff line change 22
33#include < future>
44
5+ #include < engine/deadlock_detector.hpp>
56#include < engine/impl/future_utils.hpp>
67#include < engine/impl/wait_list_light.hpp>
78#include < engine/task/task_context.hpp>
@@ -24,8 +25,13 @@ FutureStatus FutureStateBase::WaitUntil(Deadline deadline) {
2425 }
2526
2627 auto & context = current_task::GetCurrentTaskContext ();
27-
2828 FutureWaitStrategy wait_strategy{*this , context};
29+
30+ std::optional<engine::deadlock_detector::WaitScope> scope;
31+ if (!deadline.IsReachable ()) {
32+ scope.emplace (*this );
33+ }
34+
2935 const auto wakeup_source = context.Sleep (wait_strategy, deadline);
3036 return ToFutureStatus (wakeup_source);
3137}
You can’t perform that action at this time.
0 commit comments