mirror of
https://github.com/EnderIce2/Fennix.git
synced 2025-05-28 15:34:31 +00:00
fix(kernel): crash on ACPI shutdown/reboot
The deletion of DriverManager invalidates "DriverManager->GlobalKeyboardInputReports" which results in a crash if other processes are waiting for keyboard input. Signed-off-by: EnderIce2 <enderice2@protonmail.com>
This commit is contained in:
parent
793ccfd5ba
commit
b4cc1d9e66
@ -187,6 +187,8 @@ namespace Driver
|
||||
void FreeMemory(dev_t DriverID, void *Pointer, size_t Pages);
|
||||
|
||||
Manager();
|
||||
|
||||
private:
|
||||
~Manager();
|
||||
};
|
||||
|
||||
|
@ -344,16 +344,10 @@ EXTERNC __no_stack_protector NIF void Entry(BootInfo *Info)
|
||||
uintptr_t KernelStack = (uintptr_t)KernelStackAddress + STACK_SIZE - 0x10;
|
||||
debug("Kernel stack: %#lx-%#lx", KernelStackAddress, KernelStack);
|
||||
#if defined(__amd64__)
|
||||
asmv("mov %0, %%rsp"
|
||||
:
|
||||
: "r"(KernelStack)
|
||||
: "memory");
|
||||
asmv("mov %0, %%rsp" : : "r"(KernelStack) : "memory");
|
||||
asmv("mov $0, %rbp");
|
||||
#elif defined(__i386__)
|
||||
asmv("mov %0, %%esp"
|
||||
:
|
||||
: "r"(KernelStack)
|
||||
: "memory");
|
||||
asmv("mov %0, %%esp" : : "r"(KernelStack) : "memory");
|
||||
asmv("mov $0, %ebp");
|
||||
#else
|
||||
#warning "Kernel stack is not set!"
|
||||
@ -391,7 +385,7 @@ EXTERNC __no_stack_protector void BeforeShutdown(bool Reboot)
|
||||
|
||||
KPrint("Unloading all drivers");
|
||||
if (DriverManager)
|
||||
delete DriverManager, DriverManager = nullptr;
|
||||
DriverManager->UnloadAllDrivers();
|
||||
|
||||
KPrint("Stopping scheduling");
|
||||
if (TaskManager && !TaskManager->IsPanic())
|
||||
|
Loading…
x
Reference in New Issue
Block a user