diff --git a/AK/Lock.h b/AK/Lock.h index e4a0a77daa..3bcdf32bc1 100644 --- a/AK/Lock.h +++ b/AK/Lock.h @@ -33,6 +33,11 @@ public: m_lock = 0; } + void init() + { + m_lock = 0; + } + private: volatile dword m_lock { 0 }; }; diff --git a/Kernel/kmalloc.cpp b/Kernel/kmalloc.cpp index 09982e2e47..b142a3f60e 100644 --- a/Kernel/kmalloc.cpp +++ b/Kernel/kmalloc.cpp @@ -10,6 +10,7 @@ #include "VGA.h" #include "system.h" #include "Assertions.h" +#include #define SANITIZE_KMALLOC @@ -29,9 +30,12 @@ PRIVATE BYTE alloc_map[POOL_SIZE / CHUNK_SIZE / 8]; DWORD sum_alloc = 0; DWORD sum_free = POOL_SIZE; +static SpinLock s_kmallocLock; + PUBLIC void kmalloc_init() { + s_kmallocLock.init(); memset( &alloc_map, 0, sizeof(alloc_map) ); memset( (void *)BASE_PHYS, 0, POOL_SIZE ); @@ -42,6 +46,8 @@ kmalloc_init() PUBLIC void * kmalloc( DWORD size ) { + Locker locker(s_kmallocLock); + DWORD chunks_needed, chunks_here, first_chunk; DWORD real_size; DWORD i, j, k; @@ -117,6 +123,8 @@ kfree( void *ptr ) if( !ptr ) return; + Locker locker(s_kmallocLock); + allocation_t *a = (allocation_t *)((((BYTE *)ptr) - sizeof(allocation_t))); #if 0