mirror of
https://git.code.sf.net/p/quake/quakeforge
synced 2024-11-10 15:22:04 +00:00
Rename memblock_s's size to block_size.
In order to improve the pointer checking, I plan on adding a size field to represent the requested size.
This commit is contained in:
parent
49ad301d3d
commit
8ee98e1ef5
1 changed files with 20 additions and 20 deletions
|
@ -71,7 +71,7 @@ static qboolean Cache_FreeLRU (void);
|
|||
|
||||
typedef struct memblock_s
|
||||
{
|
||||
int size; // including the header and possibly tiny fragments
|
||||
int block_size; // including the header and possibly tiny fragments
|
||||
int tag; // a tag of 0 is a free block
|
||||
struct memblock_s *next, *prev;
|
||||
int id; // should be ZONEID
|
||||
|
@ -94,7 +94,7 @@ struct memzone_s
|
|||
static int
|
||||
z_block_size (memblock_t *block)
|
||||
{
|
||||
return block->size - sizeof (memblock_t) - 4;
|
||||
return block->block_size - sizeof (memblock_t) - 4;
|
||||
}
|
||||
|
||||
static int
|
||||
|
@ -117,7 +117,7 @@ Z_ClearZone (memzone_t *zone, int size, int zone_offset, int ele_size)
|
|||
zone->blocklist.prev = block;
|
||||
zone->blocklist.tag = 1; // in use block
|
||||
zone->blocklist.id = 0;
|
||||
zone->blocklist.size = 0;
|
||||
zone->blocklist.block_size = 0;
|
||||
zone->offset = zone_offset;
|
||||
zone->ele_size = ele_size;
|
||||
zone->rover = block;
|
||||
|
@ -130,7 +130,7 @@ Z_ClearZone (memzone_t *zone, int size, int zone_offset, int ele_size)
|
|||
block->tag = 0; // free block
|
||||
block->id = ZONEID;
|
||||
block->id2 = ZONEID;
|
||||
block->size = size - sizeof (memzone_t);
|
||||
block->block_size = size - sizeof (memzone_t);
|
||||
}
|
||||
|
||||
VISIBLE void
|
||||
|
@ -171,12 +171,12 @@ Z_Free (memzone_t *zone, void *ptr)
|
|||
}
|
||||
|
||||
block->tag = 0; // mark as free
|
||||
zone->used -= block->size;
|
||||
zone->used -= block->block_size;
|
||||
|
||||
other = block->prev;
|
||||
if (!other->tag) {
|
||||
// merge with previous free block
|
||||
other->size += block->size;
|
||||
other->block_size += block->block_size;
|
||||
other->next = block->next;
|
||||
other->next->prev = other;
|
||||
if (block == zone->rover)
|
||||
|
@ -187,7 +187,7 @@ Z_Free (memzone_t *zone, void *ptr)
|
|||
other = block->next;
|
||||
if (!other->tag) {
|
||||
// merge the next free block onto the end
|
||||
block->size += other->size;
|
||||
block->block_size += other->block_size;
|
||||
block->next = other->next;
|
||||
block->next->prev = block;
|
||||
if (other == zone->rover)
|
||||
|
@ -243,14 +243,14 @@ Z_TagMalloc (memzone_t *zone, int size, int tag)
|
|||
base = rover = rover->next;
|
||||
else
|
||||
rover = rover->next;
|
||||
} while (base->tag || base->size < size);
|
||||
} while (base->tag || base->block_size < size);
|
||||
|
||||
// found a block big enough
|
||||
extra = base->size - size;
|
||||
extra = base->block_size - size;
|
||||
if (extra > MINFRAGMENT) {
|
||||
// there will be a free fragment after the allocated block
|
||||
new = (memblock_t *) ((byte *) base + size);
|
||||
new->size = extra;
|
||||
new->block_size = extra;
|
||||
new->tag = 0; // free block
|
||||
new->prev = base;
|
||||
new->id = ZONEID;
|
||||
|
@ -258,7 +258,7 @@ Z_TagMalloc (memzone_t *zone, int size, int tag)
|
|||
new->next = base->next;
|
||||
new->next->prev = new;
|
||||
base->next = new;
|
||||
base->size = size;
|
||||
base->block_size = size;
|
||||
}
|
||||
|
||||
base->tag = tag; // no longer a free block
|
||||
|
@ -268,10 +268,10 @@ Z_TagMalloc (memzone_t *zone, int size, int tag)
|
|||
base->id = ZONEID;
|
||||
base->id2 = ZONEID;
|
||||
|
||||
zone->used += base->size;
|
||||
zone->used += base->block_size;
|
||||
|
||||
// marker for memory trash testing
|
||||
*(int *) ((byte *) base + base->size - 4) = ZONEID;
|
||||
*(int *) ((byte *) base + base->block_size - 4) = ZONEID;
|
||||
|
||||
return (void *) (base + 1);
|
||||
}
|
||||
|
@ -299,7 +299,7 @@ Z_Realloc (memzone_t *zone, void *ptr, int size)
|
|||
Sys_Error ("Z_Realloc: realloced a freed pointer");
|
||||
}
|
||||
|
||||
old_size = block->size;
|
||||
old_size = block->block_size;
|
||||
old_size -= sizeof (memblock_t); // account for size of block header
|
||||
old_size -= 4; // space for memory trash tester
|
||||
old_ptr = ptr;
|
||||
|
@ -339,14 +339,14 @@ Z_Print (memzone_t *zone)
|
|||
break; // all blocks have been hit
|
||||
if (block->id != ZONEID || block->id2 != ZONEID)
|
||||
Sys_Printf ("ERROR: block ids incorrect\n");
|
||||
if ( (byte *)block + block->size != (byte *)block->next)
|
||||
if ((byte *) block + block->block_size != (byte *) block->next)
|
||||
Sys_Printf ("ERROR: block size does not touch the next block\n");
|
||||
if ( block->next->prev != block)
|
||||
if (block->next->prev != block)
|
||||
Sys_Printf ("ERROR: next block doesn't have proper back link\n");
|
||||
if (!block->tag && !block->next->tag)
|
||||
Sys_Printf ("ERROR: two consecutive free blocks\n");
|
||||
if (block->tag
|
||||
&& (*(int *) ((byte *) block + block->size - 4) != ZONEID))
|
||||
&& (*(int *) ((byte *) block + block->block_size - 4) != ZONEID))
|
||||
Sys_Printf ("ERROR: memory trashed in block\n");
|
||||
fflush (stdout);
|
||||
}
|
||||
|
@ -360,7 +360,7 @@ Z_CheckHeap (memzone_t *zone)
|
|||
for (block = zone->blocklist.next ; ; block = block->next) {
|
||||
if (block->next == &zone->blocklist)
|
||||
break; // all blocks have been hit
|
||||
if ( (byte *)block + block->size != (byte *)block->next)
|
||||
if ((byte *) block + block->block_size != (byte *) block->next)
|
||||
Sys_Error ("Z_CheckHeap: block size does not touch the next "
|
||||
"block\n");
|
||||
if (block->next->prev != block)
|
||||
|
@ -389,14 +389,14 @@ Z_CheckPointer (const memzone_t *zone, const void *ptr, int size)
|
|||
if (block->next == &zone->blocklist)
|
||||
break; // all blocks have been hit
|
||||
if (check < (const char *) block
|
||||
|| check >= (const char *) block + block->size)
|
||||
|| check >= (const char *) block + block->block_size)
|
||||
continue;
|
||||
// a block that overlaps with the memory region has been found
|
||||
if (!block->tag)
|
||||
zone->error (zone->data, "invalid access to unallocated memory");
|
||||
block_mem = (char *) &block[1];
|
||||
if (check < block_mem
|
||||
|| check + size > block_mem + block->size - sizeof (*block))
|
||||
|| check + size > block_mem + block->block_size - sizeof (*block))
|
||||
zone->error (zone->data, "invalid access to allocated memory");
|
||||
return; // access ok
|
||||
}
|
||||
|
|
Loading…
Reference in a new issue