Advertisement
Guest User

Untitled

a guest
Feb 12th, 2016
58
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
text 2.57 KB | None | 0 0
  1. t_block *checkMergeTop(t_block *currentBlock)
  2. {
  3. t_block *previousBlock;
  4. int previousBlockSize;
  5.  
  6. if ((void *)currentBlock > firstAddress + sizeof(t_block))
  7. {
  8. previousBlockSize = *(int *)((void *)(currentBlock) - (int)sizeof(int));
  9. if (previousBlockSize <= 0)
  10. return (NULL);
  11. previousBlock = (void *)(currentBlock) - previousBlockSize;
  12. previousBlock->size += currentBlock->size;
  13. previousBlock->footerSize = (void *)(previousBlock) + previousBlock->size - (int)sizeof(int);
  14. *previousBlock->footerSize = previousBlock->size;
  15. currentBlock->magicNumber = 0;
  16. return (previousBlock);
  17. }
  18. return (NULL);
  19. }
  20.  
  21. int checkMergeBot(t_block *currentBlock)
  22. {
  23. t_block *nextBlock;
  24.  
  25. if ((void *)currentBlock + currentBlock->size + sizeof(t_block) < sbrk(0))
  26. {
  27. printf("currentBlock %pnsize %dn", (void *)currentBlock, currentBlock->size);
  28. nextBlock = (void *)currentBlock + currentBlock->size;
  29. printf("nextblock %p nextblocksize%dn", nextBlock->back, currentBlock->size);
  30. if ((nextBlock->magicNumber == ALLOCATED_MAGIC_NUMBER || nextBlock->magicNumber == FREE_MAGIC_NUMBER)
  31. && (*nextBlock->footerSize <= 0))
  32. return (0);
  33. // printf("header : %d footer : %dn", nextBlock->size, *nextBlock->footerSize);
  34. currentBlock->size += nextBlock->size;
  35. printf("mergeTop %dn", currentBlock->size);
  36. nextBlock->magicNumber = 0;
  37. nextBlock->back->next = nextBlock->next;
  38. printf("sbrk 0 %p nextblock %pn", sbrk(0), nextBlock->next);
  39. nextBlock->next->back = nextBlock->back;
  40. printf("endn");
  41. return (1);
  42. }
  43. return (0);
  44. }
  45.  
  46. currentBlock 0x5568618517a8
  47. size 136
  48. nextblock 0x7fe05cd9af48 nextblocksize136
  49. mergeTop 136
  50. sbrk 0 0x55686188d090 nextblock 0x3c1
  51. Segmentation fault (core dumped)
  52.  
  53. previousBlock = checkMergeTop(freeBlock);
  54. if (previousBlock != NULL)
  55. {
  56. // checkMergeBot(previousBlock);
  57. // previousBlock->footerSize = (void *)(previousBlock) + previousBlock->size - (int)sizeof(int);
  58. // *previousBlock->footerSize = previousBlock->size;
  59. // if (previousBlock->size > getpagesize() && (void *)previousBlock + previousBlock->size == sbrk(0))
  60. // {
  61. // // printf("decrease sizen");
  62. // sbrk((int)previousBlock->size * -1);
  63. // }
  64. }
  65. else
  66. {
  67. checkMergeBot(freeBlock);
  68. // printf("add to free list %dn", freeBlock->size);
  69. hashedSize = hashSize(freeBlock->size) - 1;
  70. if (hashedSize < 0)
  71. hashedSize = 0;
  72. addToFreeList(freeBlock, hashedSize);
  73. }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement