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