|
From: <sv...@op...> - 2026-10-23 12:38:33
|
Author: manx Date: Fri Oct 23 14:38:25 2026 New Revision: 25783 URL: https://source.openmpt.org/browse/openmpt/?op=revision&rev=25783 Log: Merged revision(s) 25772 from trunk/OpenMPT: [Fix] mpt/base/secure.hpp: Use mpt::full_barrier(), just to be extra safe. ........ Modified: branches/OpenMPT-1.32/ (props changed) branches/OpenMPT-1.32/src/mpt/base/secure.hpp Modified: branches/OpenMPT-1.32/src/mpt/base/secure.hpp ============================================================================== --- branches/OpenMPT-1.32/src/mpt/base/secure.hpp Fri Oct 23 14:38:01 2026 (r25782) +++ branches/OpenMPT-1.32/src/mpt/base/secure.hpp Fri Oct 23 14:38:25 2026 (r25783) @@ -8,8 +8,8 @@ #include "mpt/base/integer.hpp" #include "mpt/base/macros.hpp" #include "mpt/base/namespace.hpp" +#include "mpt/base/utility.hpp" -#include <atomic> #include <utility> #include <vector> @@ -24,13 +24,13 @@ // C23 memset_explicit inline MPT_NOINLINE void * memset_explicit(void * const dst, int const value, std::size_t const len) noexcept { - std::atomic_thread_fence(std::memory_order_seq_cst); + mpt::full_barrier(); volatile unsigned char * volatile p = static_cast<volatile unsigned char *>(dst); - std::atomic_thread_fence(std::memory_order_seq_cst); + mpt::full_barrier(); for (volatile std::size_t i = 0; i < len; ++i) { p[i] = static_cast<unsigned char>(value); } - std::atomic_thread_fence(std::memory_order_seq_cst); + mpt::full_barrier(); return dst; } @@ -41,54 +41,54 @@ inline MPT_NOINLINE void memzero(std::byte * const dst, std::size_t const len) noexcept { - std::atomic_thread_fence(std::memory_order_seq_cst); + mpt::full_barrier(); volatile std::byte * volatile p = static_cast<volatile std::byte *>(dst); - std::atomic_thread_fence(std::memory_order_seq_cst); + mpt::full_barrier(); for (volatile std::size_t i = 0; i < len; ++i) { p[i] = std::byte{0}; } - std::atomic_thread_fence(std::memory_order_seq_cst); + mpt::full_barrier(); } inline MPT_NOINLINE void memzero(void * const dst, std::size_t const len) noexcept { - std::atomic_thread_fence(std::memory_order_seq_cst); + mpt::full_barrier(); volatile std::byte * volatile p = static_cast<volatile std::byte *>(dst); - std::atomic_thread_fence(std::memory_order_seq_cst); + mpt::full_barrier(); for (volatile std::size_t i = 0; i < len; ++i) { p[i] = std::byte{0}; } - std::atomic_thread_fence(std::memory_order_seq_cst); + mpt::full_barrier(); } inline MPT_NOINLINE void memzero(char * const dst, std::size_t const len) noexcept { - std::atomic_thread_fence(std::memory_order_seq_cst); + mpt::full_barrier(); volatile std::byte * volatile p = reinterpret_cast<volatile std::byte *>(dst); - std::atomic_thread_fence(std::memory_order_seq_cst); + mpt::full_barrier(); for (volatile std::size_t i = 0; i < len; ++i) { p[i] = std::byte{0}; } - std::atomic_thread_fence(std::memory_order_seq_cst); + mpt::full_barrier(); } inline MPT_NOINLINE void memzero(uint8 * const dst, std::size_t const len) noexcept { - std::atomic_thread_fence(std::memory_order_seq_cst); + mpt::full_barrier(); volatile std::byte * volatile p = reinterpret_cast<volatile std::byte *>(dst); - std::atomic_thread_fence(std::memory_order_seq_cst); + mpt::full_barrier(); for (volatile std::size_t i = 0; i < len; ++i) { p[i] = std::byte{0}; } - std::atomic_thread_fence(std::memory_order_seq_cst); + mpt::full_barrier(); } template <typename T> inline MPT_NOINLINE void clear(T & val) { - std::atomic_signal_fence(std::memory_order_seq_cst); + mpt::full_barrier(); volatile T * volatile v = &val; - std::atomic_thread_fence(std::memory_order_seq_cst); + mpt::full_barrier(); *v = T{}; - std::atomic_signal_fence(std::memory_order_seq_cst); + mpt::full_barrier(); } |