25 lines
758 B
C++
25 lines
758 B
C++
#include "ArchInterrupts.h"
|
|
#include "Scheduler.h"
|
|
#include "kprintf.h"
|
|
#include "KernelMemoryManager.h"
|
|
#include "Thread.h"
|
|
#include "types.h"
|
|
|
|
namespace ustl
|
|
{
|
|
void checkKMMDeadlock()
|
|
{
|
|
if (unlikely (ArchInterrupts::testIFSet() == false || Scheduler::instance()->isSchedulingEnabled() == false))
|
|
{
|
|
if (unlikely (KernelMemoryManager::instance()->KMMLockHeldBy() != 0))
|
|
{
|
|
system_state = KPANIC;
|
|
kprintfd("(ERROR) checkKMMDeadlock: Using a not resize-safe ustl container method with IF=%d and SchedulingEnabled=%d ! This will fail!!!\n",
|
|
ArchInterrupts::testIFSet(), Scheduler::instance()->isSchedulingEnabled());
|
|
currentThread->printBacktrace(true);
|
|
assert(false);
|
|
}
|
|
}
|
|
}
|
|
}
|