aboutsummaryrefslogtreecommitdiff
path: root/src/regions.c
diff options
context:
space:
mode:
authorKimplul <kimi.h.kuparinen@gmail.com>2024-08-30 18:54:12 +0300
committerKimplul <kimi.h.kuparinen@gmail.com>2024-08-30 18:54:12 +0300
commitec30538a81c0e900797f4d88c1ee059afa7d9617 (patch)
treef434909b7c0fa6d41b3550141823fd016ad8fff5 /src/regions.c
parent5cc76c436fa1234323bad51d72d1291d95991da6 (diff)
downloadkmi-ec30538a81c0e900797f4d88c1ee059afa7d9617.tar.gz
kmi-ec30538a81c0e900797f4d88c1ee059afa7d9617.zip
fix a couple memory issues
+ get_mem_node() clears out the memory so we don't accidentally read stale flags + Thread creation simplified a bit, each thread references itself and data freeing is based on when the reference count reaches zero.
Diffstat (limited to 'src/regions.c')
-rw-r--r--src/regions.c5
1 files changed, 4 insertions, 1 deletions
diff --git a/src/regions.c b/src/regions.c
index adc0271..d5f431d 100644
--- a/src/regions.c
+++ b/src/regions.c
@@ -34,7 +34,9 @@ void destroy_mem_nodes()
*/
static struct mem_region *get_mem_node()
{
- return (struct mem_region *)get_node(&root);
+ struct mem_region *r = get_node(&root);
+ memset(r, 0, sizeof(struct mem_region));
+ return r;
}
/**
@@ -178,6 +180,7 @@ stat_t init_region(struct mem_region_root *r, vm_t start, size_t arena_size,
struct mem_region *m = get_mem_node();
m->start = start;
m->end = start + arena_size;
+ m->flags = 0;
r->reserved = __page(reserved);
r->start = m->start;