custom_free.c 1.0 KB

1234567891011121314151617181920212223242526272829303132333435363738394041
  1. #include "custom_free.h"
  2. #include "other.h"
  3. #include "posix_lock.h"
  4. void custom_free(heap_t* heap, void *ptr) {
  5. size_t size;
  6. int fixed_list_id, i;
  7. MAPTABLE_NODE *current_maptable_node;
  8. leaHdr *test;
  9. size = getSize((char *) ptr);
  10. fixed_list_id = map_size_to_list(heap, size);
  11. posix_lock(heap);
  12. if(fixed_list_id != -1) {
  13. current_maptable_node = heap->maptable_head;
  14. if(fixed_list_id == 0) {
  15. test = getHeader(ptr);
  16. test->next = current_maptable_node->fixed_list_head;
  17. //getHeader((char *) ptr)->next = current_maptable_node->fixed_list_head;
  18. current_maptable_node->fixed_list_head = ptr;
  19. } else {
  20. for(i = 1; i < fixed_list_id; i++) {
  21. current_maptable_node = current_maptable_node->next;
  22. }
  23. getHeader(ptr)->next = current_maptable_node->fixed_list_head;
  24. current_maptable_node->fixed_list_head = ptr;
  25. }
  26. } else { // put it in the free list
  27. getHeader(ptr)->next = heap->free_list_head;
  28. heap->free_list_head = getHeader(ptr);
  29. }
  30. markFree((char *) ptr);
  31. posix_unlock(heap);
  32. }