| | |
| | | */ |
| | | #include "mm.h" |
| | | #include "sem_util.h" |
| | | #include "hashtable.h" |
| | | #include "key_def.h" |
| | | #include "logger_factory.h" |
| | | #include "bh_api.h" |
| | | #include <sys/sem.h> |
| | |
| | | #define PREV_FBLKP(bp) (*PREDRP(bp)) |
| | | |
| | | /* $end mallocmacros */ |
| | | |
| | | |
| | | |
| | | // #define MAX_HEAP (512*(1<<20)) /* 20 MB */ |
| | | #define MAX_HEAP (512) /* 20 MB */ |
| | |
| | | */ |
| | | void mm_free(void *ptr, int enable) |
| | | { |
| | | if ((ptr == 0) || (*(size_t *)(ptr - SIZE_T_SIZE) == 0x00)) |
| | | return; |
| | | if (ptr == 0) |
| | | return; |
| | | |
| | | if (check_mm_valid(ptr) == false) |
| | | return; |
| | | |
| | | /* |
| | | *if (!is_allocated(ptr) ) { |
| | |
| | | } |
| | | |
| | | *(size_t *)bp = inter_key_get(); |
| | | |
| | | |
| | | return (bp + SIZE_T_SIZE); |
| | | } |
| | | |
| | |
| | | { |
| | | void *bp = heap_listp; |
| | | |
| | | unsigned int diff; |
| | | struct timeval start, end; |
| | | |
| | | gettimeofday(&start, NULL); |
| | | SemUtil::dec(mutex); |
| | | for (bp = heap_listp; GET_SIZE(HDRP(bp)) > 0; bp = NEXT_BLKP(bp)) |
| | | { |
| | |
| | | mm_free(bp + SIZE_T_SIZE, false); |
| | | } |
| | | } |
| | | |
| | | gettimeofday(&end, NULL); |
| | | |
| | | diff = end.tv_sec - start.tv_sec; |
| | | if (diff >= TIME_DUR) |
| | | break; |
| | | } |
| | | SemUtil::inc(mutex); |
| | | |
| | | return; |
| | | } |
| | | |
| | | int check_mm_valid(void *bp) |
| | | { |
| | | int val; |
| | | |
| | | if ((bp >= mem_start_brk) && (bp <= mem_max_addr) && (GET_ALLOC(HDRP(bp - SIZE_T_SIZE)))) { |
| | | |
| | | val = *(size_t *)(bp - SIZE_T_SIZE); |
| | | if (((val >= START_KEY) && (val <= (START_KEY + MAPSIZE))) || (val == SHM_BUS_KEY)) { |
| | | return true; |
| | | } |
| | | |
| | | return false; |
| | | } |
| | | |
| | | return false; |
| | | } |
| | | |
| | | /* |
| | |
| | | static void *find_fit(size_t size) |
| | | { |
| | | void *bp; |
| | | unsigned int diff; |
| | | struct timeval start, end; |
| | | |
| | | gettimeofday(&start, NULL); |
| | | for (bp = NEXT_FBLKP(heap_listp); bp != heap_listp; bp = NEXT_FBLKP(bp)) |
| | | { |
| | | if (!GET_ALLOC(HDRP(bp)) && (size <= GET_SIZE(HDRP(bp)))) |
| | |
| | | { |
| | | break; |
| | | } |
| | | |
| | | gettimeofday(&end, NULL); |
| | | |
| | | diff = end.tv_sec - start.tv_sec; |
| | | if (diff >= TIME_DUR) |
| | | break; |
| | | } |
| | | |
| | | return NULL; /* No fit */ |
| | | } |
| | | |