Random proc.cc clean up..

上级 d3427f08
......@@ -173,7 +173,6 @@ void finishproc(struct proc*);
void exit(void);
int fork(int);
int growproc(int);
int kill(int);
void pinit(void);
void procdumpall(void);
void scheduler(void) __noret__;
......
......@@ -41,7 +41,13 @@ struct mtrace_stacks {
};
#endif
enum procstate { EMBRYO, SLEEPING, RUNNABLE, RUNNING, ZOMBIE };
typedef enum procstate {
EMBRYO,
SLEEPING,
RUNNABLE,
RUNNING,
ZOMBIE
} procstate_t;;
// Per-process state
struct proc : public rcu_freed {
......@@ -80,12 +86,14 @@ struct proc : public rcu_freed {
LIST_ENTRY(proc) cv_sleep; // Linked list of processes sleeping on a cv
u64 user_fs_;
virtual void do_gc(void) { delete this; }
void set_state(enum procstate s);
enum procstate get_state(void) const { return state_; }
int set_cpu_pin(int cpu);
static proc* alloc();
void set_state(procstate_t s);
procstate_t get_state(void) const { return state_; }
int set_cpu_pin(int cpu);
static int kill(int pid);
int kill();
virtual void do_gc(void) { delete this; }
private:
proc(int npid);
......@@ -94,5 +102,5 @@ private:
proc(const proc& x);
NEW_DELETE_OPS(proc);
enum procstate state_; // Process state
procstate_t state_; // Process state
};
......@@ -264,18 +264,11 @@ initproc(void)
// Process won't exit until it returns
// to user space (see trap in trap.c).
int
kill(int pid)
proc::kill(void)
{
struct proc *p;
p = xnspid->lookup(pid);
if (p == 0) {
panic("kill");
return -1;
}
acquire(&p->lock);
p->killed = 1;
if(p->get_state() == SLEEPING){
acquire(&lock);
killed = 1;
if(get_state() == SLEEPING) {
// XXX
// we need to wake p up if it is cv_sleep()ing.
// can't change p from SLEEPING to RUNNABLE since that
......@@ -287,10 +280,23 @@ kill(int pid)
// cv might be deallocated while we're using it
// (pipes dynamically allocate condvars).
}
release(&p->lock);
release(&lock);
return 0;
}
int
proc::kill(int pid)
{
struct proc *p;
p = xnspid->lookup(pid);
if (p == 0) {
panic("kill");
return -1;
}
return p->kill();
}
// Print a process listing to console. For debugging.
// Runs when user types ^P on console.
// No lock to avoid wedging a stuck machine further.
......
......@@ -33,7 +33,7 @@ sys_wait(void)
long
sys_kill(int pid)
{
return kill(pid);
return proc::kill(pid);
}
long
......
您添加了 0 到此讨论。请谨慎行事。
请先完成此评论的编辑!
注册 或者 后发表评论