From 89899d2d0abaae9b84a6aad8551011be86afa146 Mon Sep 17 00:00:00 2001 From: guo_peixu Date: Thu, 30 Jun 2022 11:19:40 +0800 Subject: [PATCH] =?UTF-8?q?=E4=BF=AE=E6=94=B9=E5=A4=9A=E7=BA=BF=E7=A8=8B?= =?UTF-8?q?=E9=87=8D=E5=A4=8D=E6=98=A0=E5=B0=84=E5=90=8C=E4=B8=80=E5=9D=97?= =?UTF-8?q?=E5=85=B1=E4=BA=AB=E5=86=85=E5=AD=98=EF=BC=8C=E5=8F=AF=E8=83=BD?= =?UTF-8?q?=E5=AF=BC=E8=87=B4=E8=BF=9B=E7=A8=8B=E7=9A=84=E7=BA=BF=E6=80=A7?= =?UTF-8?q?=E5=9C=B0=E5=9D=80=E8=80=97=E5=B0=BD=E9=97=AE=E9=A2=98=E3=80=82?= =?UTF-8?q?=20=E4=B8=80=E4=B8=AA=E7=BA=BF=E7=A8=8B=E6=98=A0=E5=B0=84?= =?UTF-8?q?=E5=85=B1=E4=BA=AB=E5=86=85=E5=AD=98=E5=90=8E=EF=BC=8C=E5=B0=86?= =?UTF-8?q?=E5=9C=B0=E5=9D=80=E5=AD=98=E5=82=A8=EF=BC=8C=E5=85=B6=E5=AE=83?= =?UTF-8?q?=E7=BA=BF=E7=A8=8B=E5=8F=AF=E7=9B=B4=E6=8E=A5=E4=BD=BF=E7=94=A8?= =?UTF-8?q?=EF=BC=8C=E4=B8=8D=E7=94=A8=E9=87=8D=E5=A4=8D=E6=98=A0=E5=B0=84?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- inc/MESA_shm_ring_queue.h | 1 - src/MESA_shm_ring_queue.c | 14 +++++++++++--- 2 files changed, 11 insertions(+), 4 deletions(-) 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; }