Check _state transitions

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