From 9f9e59907bc41cf8bb32a4669f8408286521fa92 Mon Sep 17 00:00:00 2001 From: "Zezheng.Li" Date: Mon, 20 Jan 2025 13:42:11 +0800 Subject: [PATCH] fix async-simple no discard when call spinlock::coScopedLock --- include/ylt/thirdparty/async_simple/coro/SpinLock.h | 12 ++++++++---- 1 file changed, 8 insertions(+), 4 deletions(-) diff --git a/include/ylt/thirdparty/async_simple/coro/SpinLock.h b/include/ylt/thirdparty/async_simple/coro/SpinLock.h index 9a0ddeec0..6f319d2ff 100644 --- a/include/ylt/thirdparty/async_simple/coro/SpinLock.h +++ b/include/ylt/thirdparty/async_simple/coro/SpinLock.h @@ -16,6 +16,7 @@ #ifndef ASYNC_SIMPLE_CORO_SPIN_LOCK_H #define ASYNC_SIMPLE_CORO_SPIN_LOCK_H +#include #ifndef ASYNC_SIMPLE_USE_MODULES #include #include @@ -60,11 +61,14 @@ class SpinLock { } } - void unlock() noexcept { _locked.store(false, std::memory_order_release); } + void unlock() noexcept { + assert(_locked.load(std::memory_order_acquire) == true); + _locked.store(false, std::memory_order_release); + } - Lazy> coScopedLock() { - co_await coLock(); - co_return std::unique_lock{*this, std::adopt_lock}; + [[nodiscard]] Lazy> coScopedLock() { + co_await coLock(); + co_return std::unique_lock{*this, std::adopt_lock}; } private: