mirror of
https://github.com/RGBCube/serenity
synced 2025-05-31 01:08:11 +00:00
Unbreak sys$sigreturn() after colonel process changes.
This commit is contained in:
parent
43f40a3050
commit
f792349853
3 changed files with 9 additions and 8 deletions
|
@ -321,7 +321,7 @@ int Process::exec(const String& path, Vector<String>&& arguments, Vector<String>
|
||||||
kprintf("Process %u (%s) exec'd %s @ %p\n", pid(), name().characters(), path.characters(), m_tss.eip);
|
kprintf("Process %u (%s) exec'd %s @ %p\n", pid(), name().characters(), path.characters(), m_tss.eip);
|
||||||
#endif
|
#endif
|
||||||
|
|
||||||
set_state(ExecPhase1);
|
set_state(Skip1SchedulerPass);
|
||||||
|
|
||||||
if (current == this) {
|
if (current == this) {
|
||||||
bool success = Scheduler::yield();
|
bool success = Scheduler::yield();
|
||||||
|
@ -822,6 +822,7 @@ void Process::sys$sigreturn()
|
||||||
dbgprintf("sys$sigreturn in %s(%u)\n", name().characters(), pid());
|
dbgprintf("sys$sigreturn in %s(%u)\n", name().characters(), pid());
|
||||||
dbgprintf(" -> resuming execution at %w:%x\n", m_tss.cs, m_tss.eip);
|
dbgprintf(" -> resuming execution at %w:%x\n", m_tss.cs, m_tss.eip);
|
||||||
#endif
|
#endif
|
||||||
|
set_state(Skip1SchedulerPass);
|
||||||
Scheduler::yield();
|
Scheduler::yield();
|
||||||
kprintf("sys$sigreturn failed in %s(%u)\n", name().characters(), pid());
|
kprintf("sys$sigreturn failed in %s(%u)\n", name().characters(), pid());
|
||||||
ASSERT_NOT_REACHED();
|
ASSERT_NOT_REACHED();
|
||||||
|
|
|
@ -43,8 +43,8 @@ public:
|
||||||
Invalid = 0,
|
Invalid = 0,
|
||||||
Runnable,
|
Runnable,
|
||||||
Running,
|
Running,
|
||||||
ExecPhase1,
|
Skip1SchedulerPass,
|
||||||
ExecPhase2,
|
Skip0SchedulerPasses,
|
||||||
Dead,
|
Dead,
|
||||||
Forgiven,
|
Forgiven,
|
||||||
BeingInspected,
|
BeingInspected,
|
||||||
|
@ -306,8 +306,8 @@ static inline const char* toString(Process::State state)
|
||||||
case Process::Runnable: return "Runnable";
|
case Process::Runnable: return "Runnable";
|
||||||
case Process::Running: return "Running";
|
case Process::Running: return "Running";
|
||||||
case Process::Dead: return "Dead";
|
case Process::Dead: return "Dead";
|
||||||
case Process::ExecPhase1: return "ExecPhase1";
|
case Process::Skip1SchedulerPass: return "Skip1";
|
||||||
case Process::ExecPhase2: return "ExecPhase2";
|
case Process::Skip0SchedulerPasses: return "Skip0";
|
||||||
case Process::Forgiven: return "Forgiven";
|
case Process::Forgiven: return "Forgiven";
|
||||||
case Process::BlockedSleep: return "Sleep";
|
case Process::BlockedSleep: return "Sleep";
|
||||||
case Process::BlockedWait: return "Wait";
|
case Process::BlockedWait: return "Wait";
|
||||||
|
|
|
@ -56,12 +56,12 @@ bool Scheduler::pick_next()
|
||||||
return true;
|
return true;
|
||||||
}
|
}
|
||||||
|
|
||||||
if (process.state() == Process::ExecPhase1) {
|
if (process.state() == Process::Skip1SchedulerPass) {
|
||||||
process.set_state(Process::ExecPhase2);
|
process.set_state(Process::Skip0SchedulerPasses);
|
||||||
return true;
|
return true;
|
||||||
}
|
}
|
||||||
|
|
||||||
if (process.state() == Process::ExecPhase2) {
|
if (process.state() == Process::Skip0SchedulerPasses) {
|
||||||
process.set_state(Process::Runnable);
|
process.set_state(Process::Runnable);
|
||||||
return true;
|
return true;
|
||||||
}
|
}
|
||||||
|
|
Loading…
Add table
Add a link
Reference in a new issue