From f85c9b875b060681b51f57b15074ba1c7c9f5636 Mon Sep 17 00:00:00 2001
From: wangzhengquan <wangzhengquan85@126.com>
Date: 星期一, 20 七月 2020 11:10:02 +0800
Subject: [PATCH] update
---
queue/include/mem_pool.h | 51 +++++++++++++++++++++++++++++++++++++++++++++------
1 files changed, 45 insertions(+), 6 deletions(-)
diff --git a/queue/include/mem_pool.h b/queue/include/mem_pool.h
index 045e972..17a7c5c 100644
--- a/queue/include/mem_pool.h
+++ b/queue/include/mem_pool.h
@@ -1,15 +1,54 @@
#ifndef _MEM_POOL_H_
#define _MEM_POOL_H_
#include "mm.h"
+#include "sem_util.h"
+#define MEM_POOL_COND_KEY 0x8801
+static int mem_pool_cond = SemUtil::get(MEM_POOL_COND_KEY, 0);
-extern void mem_pool_init(size_t heap_size);
-extern void mem_pool_destroy(void);
+// static int mem_pool_mutex = SemUtil::get(MEM_POOL_COND_KEY, 1);
-extern void *mem_pool_malloc (size_t size);
-extern void mem_pool_free (void *ptr);
-extern void *mem_pool_realloc(void *ptr, size_t size);
-extern hashtable_t * mem_pool_get_hashtable();
+static inline void mem_pool_init(size_t heap_size) {
+ if(mm_init(heap_size)) {
+
+ }
+}
+
+static inline void mem_pool_destroy(void) {
+ if(mm_destroy()) {
+ SemUtil::remove(mem_pool_cond);
+ }
+
+}
+
+static inline void *mem_pool_malloc (size_t size) {
+ void *ptr;
+ while( (ptr = mm_malloc(size)) == NULL ) {
+ err_msg(0, "There is not enough memery to allocate, waiting someone else to free.");
+ SemUtil::set(mem_pool_cond, 0);
+ // wait for someone else to free space
+ SemUtil::dec(mem_pool_cond);
+
+ }
+
+ return ptr;
+}
+
+static inline void mem_pool_free (void *ptr) {
+ mm_free(ptr);
+ // notify malloc
+ SemUtil::set(mem_pool_cond, 1);
+
+}
+
+static inline void *mem_pool_realloc (void *ptr, size_t size) {
+ return mm_realloc(ptr, size);
+}
+
+static inline hashtable_t * mem_pool_get_hashtable() {
+ return mm_get_hashtable();
+
+}
// extern int mm_checkheap(int verbose);
--
Gitblit v1.8.0