From 98206dbdb9756f3aafe42ef2c51b1335e8b385d1 Mon Sep 17 00:00:00 2001 From: Martin Kroeker Date: Tue, 4 Mar 2025 20:04:22 +0100 Subject: [PATCH] Tighten memory orders for C11 atomic operations --- driver/others/blas_server.c | 6 ++++-- 1 file changed, 4 insertions(+), 2 deletions(-) diff --git a/driver/others/blas_server.c b/driver/others/blas_server.c index 7306a3ecd..a00a57f3d 100644 --- a/driver/others/blas_server.c +++ b/driver/others/blas_server.c @@ -146,8 +146,8 @@ typedef struct { } thread_status_t; #ifdef HAVE_C11 -#define atomic_load_queue(p) __atomic_load_n(p, __ATOMIC_RELAXED) -#define atomic_store_queue(p, v) __atomic_store_n(p, v, __ATOMIC_RELAXED) +#define atomic_load_queue(p) __atomic_load_n(p, __ATOMIC_RELEASE) +#define atomic_store_queue(p, v) __atomic_store_n(p, v, __ATOMIC_ACQUIRE) #else #define atomic_load_queue(p) (blas_queue_t*)(*(volatile blas_queue_t**)(p)) #define atomic_store_queue(p, v) (*(volatile blas_queue_t* volatile*)(p) = (v)) @@ -637,7 +637,9 @@ int exec_blas_async(BLASLONG pos, blas_queue_t *queue){ #ifdef SMP_SERVER // Handle lazy re-init of the thread-pool after a POSIX fork + LOCK_COMMAND(&server_lock); if (unlikely(blas_server_avail == 0)) blas_thread_init(); + UNLOCK_COMMAND(&server_lock); #endif BLASLONG i = 0; blas_queue_t *current = queue;