From 876b2f8e699c1b24ae5e4f98a4affe9fa1a8650f Mon Sep 17 00:00:00 2001 From: Christian Krinitsin Date: Sun, 23 Mar 2025 20:34:26 +0100 Subject: add a request status, so that multiple clients cannot overwrite requests from other clients --- src/server/shared_memory_server.h | 5 ++--- 1 file changed, 2 insertions(+), 3 deletions(-) (limited to 'src/server') diff --git a/src/server/shared_memory_server.h b/src/server/shared_memory_server.h index d4be69f..e8e5c38 100644 --- a/src/server/shared_memory_server.h +++ b/src/server/shared_memory_server.h @@ -34,7 +34,6 @@ public: mmap(0, sizeof(SharedMemory), PROT_READ | PROT_WRITE, MAP_SHARED, shm_fd, 0); shared_memory->tail = shared_memory->head = 0; - shared_memory->full = false; pthread_mutexattr_t mutex_attr; pthread_condattr_t cond_attr; @@ -74,7 +73,7 @@ public: while (true) { pthread_mutex_lock(&shared_memory->mutex); - if (shared_memory->tail == shared_memory->head && !shared_memory->full) { + if (shared_memory->request[shared_memory->head].status != SENT) { pthread_cond_wait(&shared_memory->cond_var, &shared_memory->mutex); } @@ -140,8 +139,8 @@ public: default: break; } + shared_memory->request[shared_memory->head].status = PROCESSED; shared_memory->head = (1 + shared_memory->head) % QUEUE_SIZE; - shared_memory->full = false; pthread_cond_signal(&shared_memory->cond_var); pthread_mutex_unlock(&shared_memory->mutex); } -- cgit 1.4.1