From: Radoslaw Zarzynski Date: Mon, 5 Dec 2022 19:51:14 +0000 (+0000) Subject: crimson/common: trace management of interrupt_cond in interruptor::async() X-Git-Tag: v18.1.0~260^2~24 X-Git-Url: http://git-server-git.apps.pok.os.sepia.ceph.com/?a=commitdiff_plain;h=dccca6beb9d96cec59bfb305a9e4c7b614a10ef8;p=ceph.git crimson/common: trace management of interrupt_cond in interruptor::async() Signed-off-by: Radoslaw Zarzynski --- diff --git a/src/crimson/common/interruptible_future.h b/src/crimson/common/interruptible_future.h index c7cfcadd4814..6ae8689357be 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() {