Skip to content

Commit 06b730e

Browse files
author
lexeyo
committed
feat core: futures support in deadlock detector
commit_hash:b13a48f49ffb2e4fd20f6c1b46e8fde6f31f059f
1 parent d2212ee commit 06b730e

File tree

2 files changed

+11
-2
lines changed

2 files changed

+11
-2
lines changed

core/include/userver/engine/impl/future_state.hpp

Lines changed: 4 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -5,6 +5,7 @@
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

1415
namespace engine::impl {
1516

16-
class FutureStateBase : private ContextAccessor {
17+
class FutureStateBase : private ContextAccessor, public deadlock_detector::Actor {
1718
public:
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+
2831
protected:
2932
FutureStateBase() noexcept;
3033
~FutureStateBase();

core/src/engine/impl/future_state.cpp

Lines changed: 7 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -2,6 +2,7 @@
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
}

0 commit comments

Comments
 (0)