From 45644759fe8868ead9a798f0be6be262e7e0c1de Mon Sep 17 00:00:00 2001 From: Max Kellermann Date: Tue, 4 Feb 2025 10:10:06 +0100 Subject: [PATCH] io/uring/CancellableOperation: invoke OnUringCompletion() in destructor This is important for operations that have complex cancellation procedures (e.g. if they need to free buffers). They might leave an Operation instance in the queue. --- src/io/uring/CancellableOperation.hxx | 5 ++++- 1 file changed, 4 insertions(+), 1 deletion(-) diff --git a/src/io/uring/CancellableOperation.hxx b/src/io/uring/CancellableOperation.hxx index 9c6b81813..f82f9a896 100644 --- a/src/io/uring/CancellableOperation.hxx +++ b/src/io/uring/CancellableOperation.hxx @@ -10,6 +10,8 @@ #include #include +#include // for ECANCELED + namespace Uring { class CancellableOperation @@ -26,7 +28,8 @@ public: } ~CancellableOperation() noexcept { - assert(operation == nullptr); + if (operation != nullptr) + operation->OnUringCompletion(-ECANCELED); } void Cancel(Operation &_operation) noexcept {