Don't kill process when inside kernel.
This commit is contained in:
parent
4ed974f5ea
commit
72fef4f855
1 changed files with 10 additions and 3 deletions
11
trap.c
11
trap.c
|
@ -70,11 +70,18 @@ trap(struct Trapframe *tf)
|
|||
lapic_timerintr();
|
||||
if(cpus[cpu()].nlock)
|
||||
panic("timer interrupt while holding a lock");
|
||||
if(cp){
|
||||
if((read_eflags() & FL_IF) == 0)
|
||||
panic("timer interrupt but interrupts now disabled");
|
||||
if(cp->killed)
|
||||
if(cp){
|
||||
// Force process exit if it has been killed
|
||||
// and the interrupt came from user space.
|
||||
// (If the kernel was executing at time of interrupt,
|
||||
// don't kill the process. Let the process get back
|
||||
// out to its regular system call return.)
|
||||
if((tf->tf_cs&3) == 3 && cp->killed)
|
||||
proc_exit();
|
||||
|
||||
// Force process to give up CPU and let others run.
|
||||
if(cp->state == RUNNING)
|
||||
yield();
|
||||
}
|
||||
|
|
Loading…
Reference in a new issue