fix various bugs
This commit is contained in:
parent
bda5186c0d
commit
00d0f794cf
2 changed files with 9 additions and 14 deletions
12
BUGS
12
BUGS
|
@ -12,15 +12,6 @@ main.c:
|
||||||
cpus[0] -> cpus[bcpu]
|
cpus[0] -> cpus[bcpu]
|
||||||
|
|
||||||
proc.c:
|
proc.c:
|
||||||
comment at top of scheduler() should say
|
|
||||||
via longjmp back to the scheduler
|
|
||||||
not
|
|
||||||
via longjmp back to the top of scheduler
|
|
||||||
|
|
||||||
sched should panic if state == RUNNING.
|
|
||||||
|
|
||||||
forkret comment should say "Return" not "return"
|
|
||||||
|
|
||||||
as a consequence of the implementation of proc_kill,
|
as a consequence of the implementation of proc_kill,
|
||||||
any loop calling sleep should check for p->killed
|
any loop calling sleep should check for p->killed
|
||||||
and be able to break out with an error return.
|
and be able to break out with an error return.
|
||||||
|
@ -28,9 +19,6 @@ proc.c:
|
||||||
can swap procdump up after proc_kill
|
can swap procdump up after proc_kill
|
||||||
and then have proc_exit and proc_wait on same sheet
|
and then have proc_exit and proc_wait on same sheet
|
||||||
|
|
||||||
proc_exit should wake up proc[1] if any
|
|
||||||
reparenting was done.
|
|
||||||
|
|
||||||
sched -> switch2scheduler? or just switch?
|
sched -> switch2scheduler? or just switch?
|
||||||
|
|
||||||
factor out switching and scheduling code from process code
|
factor out switching and scheduling code from process code
|
||||||
|
|
11
proc.c
11
proc.c
|
@ -207,8 +207,10 @@ sched(void)
|
||||||
{
|
{
|
||||||
struct proc *p = curproc[cpu()];
|
struct proc *p = curproc[cpu()];
|
||||||
|
|
||||||
|
if(p->state == RUNNING)
|
||||||
|
panic("sched running");
|
||||||
if(!holding(&proc_table_lock))
|
if(!holding(&proc_table_lock))
|
||||||
panic("sched");
|
panic("sched proc_table_lock");
|
||||||
if(cpus[cpu()].nlock != 1)
|
if(cpus[cpu()].nlock != 1)
|
||||||
panic("sched locks");
|
panic("sched locks");
|
||||||
|
|
||||||
|
@ -334,6 +336,9 @@ proc_exit(void)
|
||||||
struct proc *cp = curproc[cpu()];
|
struct proc *cp = curproc[cpu()];
|
||||||
int fd;
|
int fd;
|
||||||
|
|
||||||
|
if(cp->pid == 1)
|
||||||
|
panic("init exiting");
|
||||||
|
|
||||||
// Close all open files.
|
// Close all open files.
|
||||||
for(fd = 0; fd < NOFILE; fd++){
|
for(fd = 0; fd < NOFILE; fd++){
|
||||||
if(cp->ofile[fd]){
|
if(cp->ofile[fd]){
|
||||||
|
@ -354,8 +359,10 @@ proc_exit(void)
|
||||||
|
|
||||||
// Reparent our children to process 1.
|
// Reparent our children to process 1.
|
||||||
for(p = proc; p < &proc[NPROC]; p++)
|
for(p = proc; p < &proc[NPROC]; p++)
|
||||||
if(p->ppid == cp->pid)
|
if(p->ppid == cp->pid){
|
||||||
p->ppid = 1;
|
p->ppid = 1;
|
||||||
|
wakeup1(&proc[1]); // init
|
||||||
|
}
|
||||||
|
|
||||||
// Jump into the scheduler, never to return.
|
// Jump into the scheduler, never to return.
|
||||||
cp->killed = 0;
|
cp->killed = 0;
|
||||||
|
|
Loading…
Reference in a new issue