| | |
| | | |
| | | /* |
| | | * mm_init - Initialize the memory manager, M unit |
| | | * @return 是否第一次创建 |
| | | */ |
| | | bool mm_init(size_t heap_size) |
| | | { |
| | |
| | | return first; |
| | | } |
| | | |
| | | |
| | | /** |
| | | * @return 是否真正销毁成功 |
| | | */ |
| | | bool mm_destroy(void) { |
| | | struct shmid_ds shmid_ds; |
| | | |
| | | |
| | | SemUtil::dec(mutex); |
| | | |
| | | if(shmctl(shmid, IPC_STAT, &shmid_ds) == 0) { |
| | | //LoggerFactory::getLogger()->debug("shm_nattch=%d\n", shmid_ds.shm_nattch); |
| | | // 只有当前一个进程attach到共享内存上 |
| | | // 多个进程attach在共享内存上 |
| | | if (shmid_ds.shm_nattch > 1) { |
| | | //detache |
| | | if (shmdt(shmp) == -1) { |
| | |
| | | SemUtil::inc(mutex); |
| | | return false; |
| | | } else { |
| | | |
| | | // 只有当前一个进程attach到共享内存上 |
| | | hashtable_destroy(hashtable); |
| | | //detache |
| | | if (shmdt(shmp) == -1) { |