mirror of
https://github.com/RGBCube/serenity
synced 2025-05-22 14:25:07 +00:00
Kernel: Change kmalloc lock to be recursive
If the heap code dumps a stack trace (e.g. out of memory) then it may recursively call into it. Rather than deadlocking, allow recursion.
This commit is contained in:
parent
038dd9f30e
commit
3cc0e86cd8
2 changed files with 6 additions and 1 deletions
|
@ -67,7 +67,7 @@ bool g_dump_kmalloc_stacks;
|
||||||
static u8* s_next_eternal_ptr;
|
static u8* s_next_eternal_ptr;
|
||||||
static u8* s_end_of_eternal_range;
|
static u8* s_end_of_eternal_range;
|
||||||
|
|
||||||
static SpinLock s_lock;
|
static RecursiveSpinLock s_lock; // needs to be recursive because of dump_backtrace()
|
||||||
|
|
||||||
void kmalloc_init()
|
void kmalloc_init()
|
||||||
{
|
{
|
||||||
|
|
|
@ -103,6 +103,11 @@ public:
|
||||||
{
|
{
|
||||||
return m_lock.load(AK::memory_order_consume) != 0;
|
return m_lock.load(AK::memory_order_consume) != 0;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
ALWAYS_INLINE void initialize()
|
||||||
|
{
|
||||||
|
m_lock.store(0, AK::memory_order_release);
|
||||||
|
}
|
||||||
};
|
};
|
||||||
|
|
||||||
template <typename BaseType = u32, typename LockType = SpinLock<BaseType>>
|
template <typename BaseType = u32, typename LockType = SpinLock<BaseType>>
|
||||||
|
|
Loading…
Add table
Add a link
Reference in a new issue