aboutsummaryrefslogtreecommitdiff
path: root/src/kernel/core/kmalloc.c
diff options
context:
space:
mode:
authorAlex Auvolat <alex@adnab.me>2015-03-11 16:50:13 +0100
committerAlex Auvolat <alex@adnab.me>2015-03-11 16:50:13 +0100
commit64b9108a58d3483e9b63511c4cf74b12dceeb0f6 (patch)
tree7a3352828a318bcf0126f50ac3d31c8b16540703 /src/kernel/core/kmalloc.c
parent9b9ef5a2c0ec8e66c7da24c4229d89a90a10e914 (diff)
downloadkogata-64b9108a58d3483e9b63511c4cf74b12dceeb0f6.tar.gz
kogata-64b9108a58d3483e9b63511c4cf74b12dceeb0f6.zip
Change thread waiting technology. Slower but does not do crappy things like malloc at impractical places.
Diffstat (limited to 'src/kernel/core/kmalloc.c')
-rw-r--r--src/kernel/core/kmalloc.c6
1 files changed, 5 insertions, 1 deletions
diff --git a/src/kernel/core/kmalloc.c b/src/kernel/core/kmalloc.c
index c977e54..cc20487 100644
--- a/src/kernel/core/kmalloc.c
+++ b/src/kernel/core/kmalloc.c
@@ -16,7 +16,10 @@ static void* page_alloc_fun_for_kmalloc(size_t bytes) {
for (void* i = addr; i < addr + bytes; i += PAGE_SIZE) {
int f = frame_alloc(1);
if (f == 0) goto failure;
- if (!pd_map_page(i, f, true)) goto failure;
+ if (!pd_map_page(i, f, true)) {
+ frame_free(f, 1);
+ goto failure;
+ }
}
return addr;
@@ -29,6 +32,7 @@ failure:
frame_free(f, 1);
}
}
+ region_free(addr);
return 0;
}