From daef211388a512229c85261b27ed629a0eb0a630 Mon Sep 17 00:00:00 2001 From: Lorenz Stechauner Date: Sun, 14 Jun 2026 17:11:17 +0200 Subject: [PATCH] mpmc: Use volatile modifier on buffer differently --- src/lib/mpmc.c | 8 ++++---- src/lib/mpmc.h | 2 +- 2 files changed, 5 insertions(+), 5 deletions(-) diff --git a/src/lib/mpmc.c b/src/lib/mpmc.c index 91b9062..5e35243 100644 --- a/src/lib/mpmc.c +++ b/src/lib/mpmc.c @@ -35,8 +35,8 @@ int mpmc_init(mpmc_t *ctx, const int n_workers, const int buf_size, void (*consu return -1; } - memset(ctx->buffer, 0, ctx->size * sizeof(void *)); - memset(ctx->workers, -1, ctx->n_workers * sizeof(pthread_t)); + memset((void *)ctx->buffer, 0, ctx->size * sizeof(void *)); + memset(ctx->workers, -1, ctx->n_workers * sizeof(pthread_t)); for (int i = 0; i < ctx->n_workers; i++) { int ret; @@ -128,7 +128,7 @@ static void *mpmc_worker(void *arg) { sem_post(&ctx->lck_rd); // consume object - ctx->consumer((void *)ctx->buffer[p]); + ctx->consumer(ctx->buffer[p]); logger_set_prefix(""); // unlock slot in buffer @@ -158,7 +158,7 @@ void mpmc_destroy(mpmc_t *ctx) { sem_destroy(&ctx->used); sem_destroy(&ctx->lck_rd); sem_destroy(&ctx->lck_wr); - free(ctx->buffer); + free((void *)ctx->buffer); free(ctx->workers); // reset errno diff --git a/src/lib/mpmc.h b/src/lib/mpmc.h index 901c7c3..035d54d 100644 --- a/src/lib/mpmc.h +++ b/src/lib/mpmc.h @@ -10,7 +10,7 @@ typedef struct { volatile int rd, wr; sem_t free, used, lck_rd, lck_wr; int size, max_size; - volatile void **buffer; + void *volatile *buffer; pthread_t *workers; void (*consumer)(void *obj); const char* name;