feat(debug): add NULL check in arena and vector deinit functions in debug builds
Signed-off-by: Lorenzo Torres <lorenzo@sagittarius-a.org>
This commit is contained in:
parent
97d61eac5a
commit
a56ebaf19c
2 changed files with 21 additions and 4 deletions
15
core/arena.c
15
core/arena.c
|
|
@ -1,11 +1,12 @@
|
||||||
/* SPDX-License-Identifier:BSD-3-Clause */
|
/* SPDX-License-Identifier:BSD-3-Clause */
|
||||||
#include "arena.h"
|
#include "arena.h"
|
||||||
|
#include "log.h"
|
||||||
#include <stdlib.h>
|
#include <stdlib.h>
|
||||||
|
|
||||||
|
|
||||||
struct arena_allocator *arena_init(usize size)
|
struct arena_allocator *arena_init(usize size)
|
||||||
{
|
{
|
||||||
struct arena_allocator *allocator = (struct arena_allocator *)malloc(sizeof(struct arena_allocator));
|
struct arena_allocator *allocator =
|
||||||
|
(struct arena_allocator *)malloc(sizeof(struct arena_allocator));
|
||||||
allocator->size = size;
|
allocator->size = size;
|
||||||
allocator->base = (usize) malloc(size);
|
allocator->base = (usize) malloc(size);
|
||||||
allocator->position = 0;
|
allocator->position = 0;
|
||||||
|
|
@ -15,6 +16,12 @@ struct arena_allocator *arena_init(usize size)
|
||||||
|
|
||||||
void arena_deinit(struct arena_allocator *allocator)
|
void arena_deinit(struct arena_allocator *allocator)
|
||||||
{
|
{
|
||||||
|
#ifdef DEBUG
|
||||||
|
if (!allocator) {
|
||||||
|
log_error("attempt to free NULL arena\n");
|
||||||
|
return;
|
||||||
|
}
|
||||||
|
#endif
|
||||||
free((void *)allocator->base);
|
free((void *)allocator->base);
|
||||||
free((void *)allocator);
|
free((void *)allocator);
|
||||||
}
|
}
|
||||||
|
|
@ -23,7 +30,9 @@ void *arena_alloc(struct arena_allocator *allocator, usize size)
|
||||||
{
|
{
|
||||||
if (allocator->position + size >= allocator->size) {
|
if (allocator->position + size >= allocator->size) {
|
||||||
allocator->size = allocator->position + size;
|
allocator->size = allocator->position + size;
|
||||||
allocator->base = (usize) realloc((void *)allocator->base, allocator->size + allocator->size / 2);
|
allocator->base =
|
||||||
|
(usize) realloc((void *)allocator->base,
|
||||||
|
allocator->size + allocator->size / 2);
|
||||||
}
|
}
|
||||||
void *ptr = (void *)(allocator->base + allocator->position);
|
void *ptr = (void *)(allocator->base + allocator->position);
|
||||||
allocator->position += size;
|
allocator->position += size;
|
||||||
|
|
|
||||||
|
|
@ -22,13 +22,21 @@ void *vector_shrink(struct vector *vector, usize element_size)
|
||||||
vector->length -= 1;
|
vector->length -= 1;
|
||||||
if (vector->length <= vector->size / 3) {
|
if (vector->length <= vector->size / 3) {
|
||||||
vector->size = vector->length + vector->length / 2;
|
vector->size = vector->length + vector->length / 2;
|
||||||
vector->data = realloc(vector->data, vector->size * element_size + 1);
|
vector->data =
|
||||||
|
realloc(vector->data, vector->size * element_size + 1);
|
||||||
}
|
}
|
||||||
return vector->data;
|
return vector->data;
|
||||||
}
|
}
|
||||||
|
|
||||||
void vector_deinit(struct vector *vector)
|
void vector_deinit(struct vector *vector)
|
||||||
{
|
{
|
||||||
|
#ifdef DEBUG
|
||||||
|
if (!vector) {
|
||||||
|
log_error("attempt to free NULL vector");
|
||||||
|
return;
|
||||||
|
}
|
||||||
|
#endif
|
||||||
|
|
||||||
free(vector->data);
|
free(vector->data);
|
||||||
free(vector);
|
free(vector);
|
||||||
}
|
}
|
||||||
|
|
|
||||||
Loading…
Add table
Add a link
Reference in a new issue