From e661de9ad7d487191b57b50491a3d18c4a38da54 Mon Sep 17 00:00:00 2001 From: DH Date: Mon, 5 Jan 2026 06:27:08 +0300 Subject: [PATCH] rx/SharedMutex: replace std::abort with rx::die --- rx/src/SharedMutex.cpp | 16 +++++++++------- 1 file changed, 9 insertions(+), 7 deletions(-) diff --git a/rx/src/SharedMutex.cpp b/rx/src/SharedMutex.cpp index 45c899925..7b51f3aad 100644 --- a/rx/src/SharedMutex.cpp +++ b/rx/src/SharedMutex.cpp @@ -1,10 +1,11 @@ #include "SharedMutex.hpp" #include "asm.hpp" +#include "die.hpp" namespace rx { void shared_mutex::impl_lock_shared(unsigned val) { if (val >= c_err) - std::abort(); // "shared_mutex underflow" + rx::die("shared_mutex underflow"); // Try to steal the notification bit unsigned _old = val; @@ -35,7 +36,7 @@ void shared_mutex::impl_lock_shared(unsigned val) { } if ((old % c_sig) + c_one >= c_sig) - std::abort(); // "shared_mutex overflow" + rx::die("shared_mutex overflow"); while (impl_wait() != std::errc{}) { } @@ -43,7 +44,7 @@ void shared_mutex::impl_lock_shared(unsigned val) { } void shared_mutex::impl_unlock_shared(unsigned old) { if (old - 1 >= c_err) - std::abort(); // "shared_mutex underflow" + rx::die("shared_mutex underflow"); // Check reader count, notify the writer if necessary if ((old - 1) % c_one == 0) { @@ -79,7 +80,7 @@ void shared_mutex::impl_signal() { } void shared_mutex::impl_lock(unsigned val) { if (val >= c_err) - std::abort(); // "shared_mutex underflow" + rx::die("shared_mutex underflow"); // Try to steal the notification bit unsigned _old = val; @@ -110,13 +111,14 @@ void shared_mutex::impl_lock(unsigned val) { } if ((old % c_sig) + c_one >= c_sig) - std::abort(); // "shared_mutex overflow" + rx::die("shared_mutex overflow"); + while (impl_wait() != std::errc{}) { } } void shared_mutex::impl_unlock(unsigned old) { if (old - c_one >= c_err) - std::abort(); // "shared_mutex underflow" + rx::die("shared_mutex underflow"); // 1) Notify the next writer if necessary // 2) Notify all readers otherwise if necessary (currently indistinguishable @@ -138,7 +140,7 @@ void shared_mutex::impl_lock_upgrade() { const unsigned old = m_value.fetch_add(c_one - 1); if ((old % c_sig) + c_one - 1 >= c_sig) - std::abort(); // "shared_mutex overflow" + rx::die("shared_mutex overflow"); if (old % c_one == 1) { return;