Check _state transitions

上级 d540eca0
...@@ -76,6 +76,26 @@ struct proc { ...@@ -76,6 +76,26 @@ struct proc {
static inline void static inline void
set_proc_state(struct proc *p, enum procstate s) set_proc_state(struct proc *p, enum procstate s)
{ {
switch(p->_state) {
case EMBRYO:
if (s != RUNNABLE)
panic("EMBRYO -> %u", s);
break;
case SLEEPING:
if (s != RUNNABLE)
panic("SLEEPING -> %u", s);
break;
case RUNNABLE:
if (s != RUNNING && s != RUNNABLE)
panic("RUNNABLE -> %u", s);
break;
case RUNNING:
if (s != RUNNABLE && s != SLEEPING && s != ZOMBIE)
panic("RUNNING -> %u", s);
break;
case ZOMBIE:
panic("ZOMBIE -> %u", s);
}
p->_state = s; p->_state = s;
} }
......
...@@ -179,7 +179,9 @@ allocproc(void) ...@@ -179,7 +179,9 @@ allocproc(void)
if (p == 0) return 0; if (p == 0) return 0;
memset(p, 0, sizeof(*p)); memset(p, 0, sizeof(*p));
set_proc_state(p, EMBRYO); //set_proc_state(p, EMBRYO);
p->_state = EMBRYO;
p->pid = xnspid->allockey(); p->pid = xnspid->allockey();
p->cpuid = mycpu()->id; p->cpuid = mycpu()->id;
p->on_runq = -1; p->on_runq = -1;
...@@ -567,7 +569,6 @@ threadpin(void (*fn)(void*), void *arg, const char *name, int cpu) ...@@ -567,7 +569,6 @@ threadpin(void (*fn)(void*), void *arg, const char *name, int cpu)
p->cpuid = cpu; p->cpuid = cpu;
p->cpu_pin = 1; p->cpu_pin = 1;
acquire(&p->lock); acquire(&p->lock);
set_proc_state(p, RUNNABLE);
addrun(p); addrun(p);
release(&p->lock); release(&p->lock);
} }
您添加了 0 到此讨论。请谨慎行事。
请先完成此评论的编辑!
注册 或者 后发表评论