From f42ddf22907c681d8b08eeceef160d4566dba437 Mon Sep 17 00:00:00 2001 From: wangzhengquan <wangzhengquan85@126.com> Date: 星期二, 07 七月 2020 18:05:06 +0800 Subject: [PATCH] update --- squeue/mm.c | 29 +++++++++++++++++++++++------ 1 files changed, 23 insertions(+), 6 deletions(-) diff --git a/squeue/mm.c b/squeue/mm.c index c48347a..34480ea 100644 --- a/squeue/mm.c +++ b/squeue/mm.c @@ -3,7 +3,7 @@ */ #include "mm.h" #include "sem_util.h" - +#include "logger_factory.h" /* $begin mallocmacros */ /* single word (4) or double word (8) alignment */ @@ -279,12 +279,29 @@ void mm_destroy(void) { - + struct shmid_ds shmid_ds; + //detache if (shmdt(shmp) == -1) - err_exit(errno, "mm_init shmdt"); - if (shmctl(shmid, IPC_RMID, 0) == -1) - err_exit(errno, "mm_init shmctl IPC_RMID"); - SemUtil::remove(mutex); + err_exit(errno, "mm_destroy shmdt"); + + + if(shmctl(shmid, IPC_STAT, &shmid_ds) == -1) { + err_exit(errno, "mm_destroy shmctl IPC_STAT"); + } else { + //LoggerFactory::getLogger().debug("shm_nattch=%d\n", shmid_ds.shm_nattch); + if(shmid_ds.shm_nattch == 0) { + //remove shared memery + if (shmctl(shmid, IPC_RMID, 0) == -1) + err_exit(errno, "mm_destroy shmctl IPC_RMID"); + else + LoggerFactory::getLogger().debug("shared memory destroy\n"); + + SemUtil::remove(mutex); + + } + } + + } /* * extend_heap - Extend heap with free block and return its block pointer -- Gitblit v1.8.0