From dccca6beb9d96cec59bfb305a9e4c7b614a10ef8 Mon Sep 17 00:00:00 2001 From: Radoslaw Zarzynski Date: Mon, 5 Dec 2022 19:51:14 +0000 Subject: [PATCH] crimson/common: trace management of interrupt_cond in interruptor::async() Signed-off-by: Radoslaw Zarzynski --- src/crimson/common/interruptible_future.h | 25 +++++++++++++++++++---- 1 file changed, 21 insertions(+), 4 deletions(-) diff --git a/src/crimson/common/interruptible_future.h b/src/crimson/common/interruptible_future.h index c7cfcadd48149..6ae8689357be1 100644 --- a/src/crimson/common/interruptible_future.h +++ b/src/crimson/common/interruptible_future.h @@ -96,6 +96,11 @@ struct interrupt_cond_t { uint64_t ref_count = 0; void set( InterruptCondRef& ic) { + INTR_FUT_DEBUG( + "{}: going to set interrupt_cond: {}, ic: {}", + __func__, + (void*)interrupt_cond.get(), + (void*)ic.get()); if (!interrupt_cond) { interrupt_cond = ic; } @@ -1388,12 +1393,24 @@ public: template >> static inline Result async(Func&& func) { - return seastar::async([func=std::forward(func), - interrupt_condition=interrupt_cond.interrupt_cond] - () mutable { + auto interruption_condition = interrupt_cond.interrupt_cond; + INTR_FUT_DEBUG( + "interruptible_future_detail::async() yielding out, " + "interrupt_cond {},{} cleared", + (void*)interruption_condition.get(), + typeid(InterruptCond).name()); + interrupt_cond.reset(); + auto ret = seastar::async([func=std::forward(func), + interruption_condition] () mutable { return non_futurized_call_with_interruption( - interrupt_condition, std::forward(func)); + interruption_condition, std::forward(func)); }); + interrupt_cond.set(interruption_condition); + INTR_FUT_DEBUG( + "interruptible_future_detail::async() yield back, interrupt_cond: {},{}", + (void*)interrupt_cond.interrupt_cond.get(), + typeid(InterruptCond).name()); + return ret; } static void yield() { -- 2.39.5