44get_memory_list_count (MemoryPool * mp , mem_size_t * mlist_len ) {
55 MP_LOCK (mp -> thread_safe , mp );
66 mem_size_t mlist_l = 0 ;
7- _Memory * mm = mp -> mlist ;
7+ _MP_Memory * mm = mp -> mlist ;
88 while (mm ) {
99 mlist_l ++ ;
1010 mm = mm -> next ;
@@ -14,10 +14,10 @@ get_memory_list_count(MemoryPool *mp, mem_size_t *mlist_len) {
1414}
1515
1616void
17- get_memory_info (MemoryPool * mp , _Memory * mm , mem_size_t * free_list_len , mem_size_t * alloc_list_len ) {
17+ get_memory_info (MemoryPool * mp , _MP_Memory * mm , mem_size_t * free_list_len , mem_size_t * alloc_list_len ) {
1818 MP_LOCK (mp -> thread_safe , mp );
1919 mem_size_t free_l = 0 , alloc_l = 0 ;
20- _Chunk * p = mm -> free_list ;
20+ _MP_Chunk * p = mm -> free_list ;
2121 while (p ) {
2222 free_l ++ ;
2323 p = p -> next ;
@@ -34,19 +34,19 @@ get_memory_info(MemoryPool *mp, _Memory *mm, mem_size_t *free_list_len, mem_size
3434}
3535
3636int
37- get_memory_id (_Memory * mm ) {
37+ get_memory_id (_MP_Memory * mm ) {
3838 return mm -> id ;
3939}
4040
4141
42- static _Memory *
42+ static _MP_Memory *
4343extend_memory_list (MemoryPool * mp , mem_size_t new_mem_sz ) {
44- char * s = (char * )malloc (sizeof (_Memory )
44+ char * s = (char * )malloc (sizeof (_MP_Memory )
4545 + new_mem_sz * sizeof (char ));
4646 if (!s ) return NULL ;
4747
48- _Memory * mm = (_Memory * )s ;
49- mm -> start = s + sizeof (_Memory );
48+ _MP_Memory * mm = (_MP_Memory * )s ;
49+ mm -> start = s + sizeof (_MP_Memory );
5050
5151 MP_INIT_MEMORY_STRUCT (mm , new_mem_sz );
5252 mm -> id = mp -> last_id ++ ;
@@ -56,9 +56,9 @@ extend_memory_list(MemoryPool *mp, mem_size_t new_mem_sz) {
5656 return mm ;
5757}
5858
59- static _Memory *
59+ static _MP_Memory *
6060find_memory_list (MemoryPool * mp , void * p ) {
61- _Memory * tmp = mp -> mlist ;
61+ _MP_Memory * tmp = mp -> mlist ;
6262 while (tmp ) {
6363 if (tmp -> start <= (char * )p
6464 && tmp -> start + mp -> mem_pool_size > (char * )p )
@@ -70,26 +70,26 @@ find_memory_list(MemoryPool *mp, void *p) {
7070}
7171
7272static int
73- merge_free_chunk (MemoryPool * mp , _Memory * mm , _Chunk * c ) {
73+ merge_free_chunk (MemoryPool * mp , _MP_Memory * mm , _MP_Chunk * c ) {
7474 if (mp == NULL || mm == NULL || c == NULL || !c -> is_free )
7575 return 1 ;
7676
77- _Chunk * p0 = c , * p1 = c ;
77+ _MP_Chunk * p0 = c , * p1 = c ;
7878 while (p0 -> is_free ) {
7979 p1 = p0 ;
8080 if ((char * )p0 - MP_CHUNKEND - MP_CHUNKHEADER <= mm -> start )
8181 break ;
82- p0 = * (_Chunk * * )((char * )p0 - MP_CHUNKEND );
82+ p0 = * (_MP_Chunk * * )((char * )p0 - MP_CHUNKEND );
8383 }
8484
85- p0 = (_Chunk * )((char * )p1 + p1 -> alloc_mem );
85+ p0 = (_MP_Chunk * )((char * )p1 + p1 -> alloc_mem );
8686 while ((char * )p0 < mm -> start + mp -> mem_pool_size && p0 -> is_free ) {
8787 MP_DLINKLIST_DEL (mm -> free_list , p0 );
8888 p1 -> alloc_mem += p0 -> alloc_mem ;
89- p0 = (_Chunk * )((char * )p0 + p0 -> alloc_mem );
89+ p0 = (_MP_Chunk * )((char * )p0 + p0 -> alloc_mem );
9090 }
9191
92- * (_Chunk * * )((char * )p1 + p1 -> alloc_mem - MP_CHUNKEND ) = p1 ;
92+ * (_MP_Chunk * * )((char * )p1 + p1 -> alloc_mem - MP_CHUNKEND ) = p1 ;
9393 MP_UNLOCK (mp -> thread_safe , mp );
9494 return 0 ;
9595}
@@ -112,12 +112,12 @@ MemoryPool_Init(mem_size_t maxmempoolsize, mem_size_t mempoolsize, int thread_sa
112112 mp -> total_mem_pool_size = mp -> mem_pool_size = mempoolsize ;
113113 pthread_mutex_init (& mp -> lock , NULL );
114114
115- char * s = (char * )malloc (sizeof (_Memory )
115+ char * s = (char * )malloc (sizeof (_MP_Memory )
116116 + sizeof (char ) * mp -> mem_pool_size );
117117 if (!s ) return NULL ;
118118
119- mp -> mlist = (_Memory * )s ;
120- mp -> mlist -> start = s + sizeof (_Memory );
119+ mp -> mlist = (_MP_Memory * )s ;
120+ mp -> mlist -> start = s + sizeof (_MP_Memory );
121121 MP_INIT_MEMORY_STRUCT (mp -> mlist , mp -> mem_pool_size );
122122 mp -> mlist -> next = NULL ;
123123 mp -> mlist -> id = mp -> last_id ++ ;
@@ -132,8 +132,8 @@ MemoryPool_Alloc(MemoryPool *mp, mem_size_t wantsize)
132132 mem_size_t total_needed_size = MP_ALIGN_SIZE (wantsize + MP_CHUNKHEADER + MP_CHUNKEND );
133133 if (total_needed_size > mp -> mem_pool_size ) return NULL ;
134134
135- _Memory * mm = NULL , * mm1 = NULL ;
136- _Chunk * _free = NULL , * _not_free = NULL ;
135+ _MP_Memory * mm = NULL , * mm1 = NULL ;
136+ _MP_Chunk * _free = NULL , * _not_free = NULL ;
137137
138138 MP_LOCK (mp -> thread_safe , mp );
139139FIND_FREE_CHUNK :
@@ -154,10 +154,10 @@ MemoryPool_Alloc(MemoryPool *mp, mem_size_t wantsize)
154154 // 从free块头开始分割出alloc块
155155 _not_free = _free ;
156156
157- _free = (_Chunk * )((char * )_not_free + total_needed_size );
157+ _free = (_MP_Chunk * )((char * )_not_free + total_needed_size );
158158 * _free = * _not_free ;
159159 _free -> alloc_mem -= total_needed_size ;
160- * (_Chunk * * )((char * )_free + _free -> alloc_mem - MP_CHUNKEND ) = _free ;
160+ * (_MP_Chunk * * )((char * )_free + _free -> alloc_mem - MP_CHUNKEND ) = _free ;
161161
162162 // update free_list
163163 if (!_free -> prev ) {
@@ -171,7 +171,7 @@ MemoryPool_Alloc(MemoryPool *mp, mem_size_t wantsize)
171171 _not_free -> is_free = 0 ;
172172 _not_free -> alloc_mem = total_needed_size ;
173173
174- * (_Chunk * * )((char * )_not_free + total_needed_size - MP_CHUNKEND ) = _not_free ;
174+ * (_MP_Chunk * * )((char * )_not_free + total_needed_size - MP_CHUNKEND ) = _not_free ;
175175 }
176176 // 不够 则整块分配为alloc
177177 else {
@@ -217,11 +217,11 @@ MemoryPool_Free(MemoryPool *mp, void *p)
217217 if (p == NULL || mp == NULL )
218218 return 1 ;
219219 MP_LOCK (mp -> thread_safe , mp );
220- _Memory * mm = mp -> mlist ;
220+ _MP_Memory * mm = mp -> mlist ;
221221 if (mp -> auto_extend )
222222 mm = find_memory_list (mp , p );
223223
224- _Chunk * ck = (_Chunk * )((char * )p - MP_CHUNKHEADER );
224+ _MP_Chunk * ck = (_MP_Chunk * )((char * )p - MP_CHUNKHEADER );
225225
226226 MP_DLINKLIST_DEL (mm -> alloc_list , ck );
227227 MP_DLINKLIST_INS_FRT (mm -> free_list , ck );
@@ -237,7 +237,7 @@ MemoryPool *
237237MemoryPool_Clear (MemoryPool * mp ) {
238238 if (!mp ) return NULL ;
239239 MP_LOCK (mp -> thread_safe , mp );
240- _Memory * mm = mp -> mlist ;
240+ _MP_Memory * mm = mp -> mlist ;
241241 while (mm ) {
242242 MP_INIT_MEMORY_STRUCT (mm , mm -> mem_pool_size );
243243 mm = mm -> next ;
250250MemoryPool_Destroy (MemoryPool * mp ) {
251251 if (mp == NULL ) return 1 ;
252252 MP_LOCK (mp -> thread_safe , mp );
253- _Memory * mm = mp -> mlist , * mm1 = NULL ;
253+ _MP_Memory * mm = mp -> mlist , * mm1 = NULL ;
254254 while (mm ) {
255255 mm1 = mm ;
256256 mm = mm -> next ;
@@ -264,11 +264,23 @@ MemoryPool_Destroy(MemoryPool *mp) {
264264 return 0 ;
265265}
266266
267+ int
268+ MemoryPool_SetThreadSafe (MemoryPool * mp , int thread_safe ) {
269+ MP_LOCK (mp -> thread_safe , mp );
270+ if (mp -> thread_safe ) {
271+ mp -> thread_safe = thread_safe ;
272+ MP_UNLOCK (1 , mp );
273+ } else {
274+ mp -> thread_safe = thread_safe ;
275+ }
276+ return 0 ;
277+ }
278+
267279mem_size_t
268280get_used_memory (MemoryPool * mp ) {
269281 MP_LOCK (mp -> thread_safe , mp );
270282 mem_size_t total_alloc = 0 ;
271- _Memory * mm = mp -> mlist ;
283+ _MP_Memory * mm = mp -> mlist ;
272284 while (mm ) {
273285 total_alloc += mm -> alloc_mem ;
274286 mm = mm -> next ;
@@ -281,7 +293,7 @@ mem_size_t
281293get_prog_memory (MemoryPool * mp ) {
282294 MP_LOCK (mp -> thread_safe , mp );
283295 mem_size_t total_alloc_prog = 0 ;
284- _Memory * mm = mp -> mlist ;
296+ _MP_Memory * mm = mp -> mlist ;
285297 while (mm ) {
286298 total_alloc_prog += mm -> alloc_prog_mem ;
287299 mm = mm -> next ;
0 commit comments