diff options
author | Alex Auvolat <alex@adnab.me> | 2015-03-11 16:50:13 +0100 |
---|---|---|
committer | Alex Auvolat <alex@adnab.me> | 2015-03-11 16:50:13 +0100 |
commit | 64b9108a58d3483e9b63511c4cf74b12dceeb0f6 (patch) | |
tree | 7a3352828a318bcf0126f50ac3d31c8b16540703 /src/kernel/core/kmalloc.c | |
parent | 9b9ef5a2c0ec8e66c7da24c4229d89a90a10e914 (diff) | |
download | kogata-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.c | 6 |
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; } |