diff options
author | Jakub Zawadzki <darkjames-ws@darkjames.pl> | 2011-05-09 12:52:55 +0000 |
---|---|---|
committer | Jakub Zawadzki <darkjames-ws@darkjames.pl> | 2011-05-09 12:52:55 +0000 |
commit | 17f6352c2e220fdfd23de2712cdd02154b3bd4cb (patch) | |
tree | 6468c238f2cd42d8dfa5c8c4b222f405c53dce41 /epan/emem.c | |
parent | 0edf3eafa9aaf3ed67336c150423403c56c6cf5c (diff) |
Convert SLAB_-s, to sl_-API.
svn path=/trunk/; revision=37030
Diffstat (limited to 'epan/emem.c')
-rw-r--r-- | epan/emem.c | 21 |
1 files changed, 12 insertions, 9 deletions
diff --git a/epan/emem.c b/epan/emem.c index 7ce8c64017..cf622714c4 100644 --- a/epan/emem.c +++ b/epan/emem.c @@ -661,7 +661,7 @@ emem_create_chunk(size_t size) total_no_chunks++; #endif - npc->amount_free = npc->amount_free_init = size; + npc->amount_free = npc->amount_free_init = (unsigned int) size; npc->free_offset = npc->free_offset_init = 0; return npc; } @@ -883,17 +883,21 @@ sl_alloc(struct ws_memory_slab *mem_chunk) /* XXX, debug_use_slices -> fallback to g_slice_alloc0 */ - if (G_UNLIKELY(mem_chunk->freed != NULL)) { + if ((mem_chunk->freed != NULL)) { ptr = mem_chunk->freed; memcpy(&mem_chunk->freed, ptr, sizeof(void *)); return ptr; } if (!(chunk = mem_chunk->chunk_list) || chunk->amount_free < (guint) mem_chunk->item_size) { - chunk = emem_create_chunk(mem_chunk->item_size * mem_chunk->count); /* NOTE: using version without guard pages! */ - - /* XXX, align size for emem_create_chunk to pagesize, and/or posix_memalign (?) */ + size_t alloc_size = mem_chunk->item_size * mem_chunk->count; + + /* align to page-size */ +#if defined (_WIN32) || defined(USE_GUARD_PAGES) + alloc_size = (alloc_size + (pagesize - 1)) & ~(pagesize - 1); +#endif + chunk = emem_create_chunk(alloc_size); /* NOTE: using version without guard pages! */ chunk->next = mem_chunk->chunk_list; mem_chunk->chunk_list = chunk; } @@ -911,11 +915,9 @@ sl_free(struct ws_memory_slab *mem_chunk, gpointer ptr) /* XXX, debug_use_slices -> fallback to g_slice_free1 */ /* XXX, abort if ptr not found in emem_verify_pointer_list()? */ - if (ptr != NULL && emem_verify_pointer_list(mem_chunk->chunk_list, ptr)) { - void *tmp = mem_chunk->freed; - + if (ptr != NULL /* && emem_verify_pointer_list(mem_chunk->chunk_list, ptr) */) { + memcpy(ptr, &(mem_chunk->freed), sizeof(void *)); mem_chunk->freed = ptr; - memcpy(ptr, &tmp, sizeof(void *)); } } @@ -1258,6 +1260,7 @@ sl_free_all(struct ws_memory_slab *mem_chunk) emem_chunk_t *chunk_list = mem_chunk->chunk_list; mem_chunk->chunk_list = NULL; + mem_chunk->freed = NULL; while (chunk_list) { emem_chunk_t *chunk = chunk_list; |