Kaynağa Gözat

fix previous size settings in freelist-organised raw blocks

Ioannis Koutras 12 yıl önce
ebeveyn
işleme
aef58c8e96
1 değiştirilmiş dosya ile 8 ekleme ve 8 silme
  1. 8 8
      src/freelist/block_header_funcs.c

+ 8 - 8
src/freelist/block_header_funcs.c

@@ -44,8 +44,8 @@ void set_size_and_free(freelist_rb_t *raw_block, block_header_t *ptr, size_t siz
 
     ptr->size = size << 1;
 
-    if(raw_block->border_ptr != ptr) {
-        next_block_header = (block_header_t *) ((char *) ptr + size);
+    next_block_header = get_dlnext(raw_block, ptr);
+    if(next_block_header != NULL) {
         next_block_header->previous_size = size << 1;
     }
 }
@@ -56,8 +56,8 @@ void set_size_and_used(freelist_rb_t *raw_block, block_header_t *ptr, size_t siz
     ptr->size = size << 1;
     ptr->size |= 1;
 
-    if(raw_block->border_ptr != ptr) {
-        next_block_header = (block_header_t *) ((char *) ptr + size);
+    next_block_header = get_dlnext(raw_block, ptr);
+    if(next_block_header != NULL) {
         next_block_header->previous_size = ptr->size;
     }
 }
@@ -67,8 +67,8 @@ void mark_used(freelist_rb_t *raw_block, block_header_t *ptr) {
 
     ptr->size |= 1;
 
-    if(raw_block->border_ptr != ptr) {
-        next_block_header = (block_header_t *) ((char *) ptr + get_size(ptr));
+    next_block_header = get_dlnext(raw_block, ptr);
+    if(next_block_header != NULL) {
         next_block_header->previous_size |= 1;
     }
 }
@@ -78,8 +78,8 @@ void mark_free(freelist_rb_t *raw_block, block_header_t *ptr) {
     
     ptr->size &= (~ ((size_t) 0x1));
 
-    if(raw_block->border_ptr != ptr) {
-        next_block_header = (block_header_t *) ((char *) ptr + get_size(ptr));
+    next_block_header = get_dlnext(raw_block, ptr);
+    if(next_block_header != NULL) {
         next_block_header->previous_size &= (~ ((size_t) 0x1));
     }    
 }