mirror of
https://github.com/LadybirdBrowser/ladybird.git
synced 2024-12-04 05:20:30 +00:00
Actually destroy tasks after they crash.
This commit is contained in:
parent
1a801e5737
commit
9d5de91cf3
Notes:
sideshowbarker
2024-07-19 18:46:36 +09:00
Author: https://github.com/awesomekling Commit: https://github.com/SerenityOS/serenity/commit/9d5de91cf33
3 changed files with 20 additions and 7 deletions
|
@ -169,10 +169,26 @@ Task::Task(void (*e)(), const char* n, IPC::Handle h, RingLevel ring)
|
|||
|
||||
Task::~Task()
|
||||
{
|
||||
system.nprocess--;
|
||||
delete [] m_ldtEntries;
|
||||
m_ldtEntries = nullptr;
|
||||
}
|
||||
|
||||
void Task::taskDidCrash(Task* crashedTask)
|
||||
{
|
||||
crashedTask->setState(Crashing);
|
||||
s_tasks->remove(crashedTask);
|
||||
|
||||
if (!scheduleNewTask()) {
|
||||
kprintf("Task::taskDidCrash: Failed to schedule a new task :(\n");
|
||||
HANG;
|
||||
}
|
||||
|
||||
delete crashedTask;
|
||||
|
||||
switchNow();
|
||||
}
|
||||
|
||||
void yield()
|
||||
{
|
||||
if (!current) {
|
||||
|
|
|
@ -95,6 +95,8 @@ public:
|
|||
static void initialize();
|
||||
void setError(int);
|
||||
|
||||
static void taskDidCrash(Task*);
|
||||
|
||||
private:
|
||||
FileHandle* openFile(String&&);
|
||||
|
||||
|
|
|
@ -84,13 +84,8 @@ void exception_13_handler()
|
|||
HANG;
|
||||
}
|
||||
|
||||
current->setState(Task::Crashing);
|
||||
if (!scheduleNewTask()) {
|
||||
kprintf("Failed to schedule a new task :(\n");
|
||||
HANG;
|
||||
}
|
||||
|
||||
switchNow();
|
||||
// NOTE: This will schedule a new task.
|
||||
Task::taskDidCrash(current);
|
||||
}
|
||||
|
||||
#define EH(i, msg) \
|
||||
|
|
Loading…
Reference in a new issue