diff --git a/inc/MESA_shm_ring_queue.h b/inc/MESA_shm_ring_queue.h index 27b1e3e..ed9d712 100644 --- a/inc/MESA_shm_ring_queue.h +++ b/inc/MESA_shm_ring_queue.h @@ -16,7 +16,6 @@ #define MESA_SHM_RING_QUEUE_HALF_IDLE 2 #define MESA_SHM_RING_QUEUE_USED 3 -#define MESA_SEM_KEY 35719 #define MESA_CONSUMER_RUNNING 1 #define MESA_CONSUMER_NOT_RUNNING 0 diff --git a/src/MESA_shm_ring_queue.c b/src/MESA_shm_ring_queue.c index ce02b17..44c9ee6 100644 --- a/src/MESA_shm_ring_queue.c +++ b/src/MESA_shm_ring_queue.c @@ -14,6 +14,8 @@ struct MESA_shm_overview *MESA_shm_ovw = NULL; int *MESA_consumer_status = NULL; +struct MESA_shm_queue_head *MESA_ring_queue_head[MESA_SHM_RING_QUEUE_NUM] = {NULL}; + void MESA_shm_init_ring_queue_mutex(struct MESA_shm_overview *ovw) { @@ -131,15 +133,21 @@ struct MESA_shm_queue_head *MESA_shm_alloc_new_ring_queue(struct MESA_shm_overvi } MESA_shm_init_new_ring_queue(head, ovw); ovw->shmid = shmid; + MESA_ring_queue_head[ovw->idx] = head; return head; } struct MESA_shm_queue_head *MESA_shm_try_reuse_ring_queue(struct MESA_shm_overview *ovw) { struct MESA_shm_queue_head *head = NULL; - head = (struct MESA_shm_queue_head *)shmat(ovw->shmid, NULL, 0); - if(head == (struct MESA_shm_queue_head *)-1){ - return NULL; + if(MESA_ring_queue_head[ovw->idx] != NULL){ + head = MESA_ring_queue_head[ovw->idx]; + }else{ + head = (struct MESA_shm_queue_head *)shmat(ovw->shmid, NULL, 0); + if(head == (struct MESA_shm_queue_head *)-1){ + return NULL; + } + MESA_ring_queue_head[ovw->idx] = head; } return head; }