diff options
author | rtm <rtm> | 2006-08-29 19:59:52 +0000 |
---|---|---|
committer | rtm <rtm> | 2006-08-29 19:59:52 +0000 |
commit | 7a37578e9efcba67d82fbfee7d03cba830a41106 (patch) | |
tree | 1d86660c9a91ed3cd2bbbdda17bc0e79ea21a924 | |
parent | dfcc5b997ce9c313b9ac0e7d8da39c4416b472a8 (diff) | |
download | xv6-labs-7a37578e9efcba67d82fbfee7d03cba830a41106.tar.gz xv6-labs-7a37578e9efcba67d82fbfee7d03cba830a41106.tar.bz2 xv6-labs-7a37578e9efcba67d82fbfee7d03cba830a41106.zip |
clear killed flag in exit
idecref cwd in exit
-rw-r--r-- | fs.c | 2 | ||||
-rw-r--r-- | fstests.c | 8 | ||||
-rw-r--r-- | proc.c | 4 | ||||
-rw-r--r-- | proc.h | 5 | ||||
-rw-r--r-- | sh.c | 2 | ||||
-rw-r--r-- | syscall.c | 3 |
6 files changed, 12 insertions, 12 deletions
@@ -632,7 +632,7 @@ unlink(char *cp) memset(&de, 0, sizeof(de)); if(writei(dp, (char*)&de, off, sizeof(de)) != sizeof(de)) panic("unlink dir write"); - + iupdate(dp); iput(dp); @@ -150,8 +150,8 @@ createdelete() } if(pid) - wait(); - else + exit(); + else exit(); for(i = 0; i < n; i++){ @@ -160,8 +160,10 @@ createdelete() fd = open(name, 0); if((i == 0 || i >= n/2) && fd < 0){ printf(1, "oops createdelete %s didn't exist\n", name); + exit(); } else if((i >= 1 && i < n/2) && fd >= 0){ printf(1, "oops createdelete %s did exist\n", name); + exit(); } if(fd >= 0) close(fd); @@ -171,8 +173,10 @@ createdelete() fd = open(name, 0); if((i == 0 || i >= n/2) && fd < 0){ printf(1, "oops createdelete %s didn't exist\n", name); + exit(); } else if((i >= 1 && i < n/2) && fd >= 0){ printf(1, "oops createdelete %s did exist\n", name); + exit(); } if(fd >= 0) close(fd); @@ -337,6 +337,9 @@ proc_exit(void) cp->fds[fd] = 0; } } + + idecref(cp->cwd); + cp->cwd = 0; acquire(&proc_table_lock); @@ -351,6 +354,7 @@ proc_exit(void) p->ppid = 1; // Jump into the scheduler, never to return. + cp->killed = 0; cp->state = ZOMBIE; sched(); panic("zombie exit"); @@ -46,12 +46,7 @@ struct proc{ int killed; struct fd *fds[NOFILE]; struct inode *cwd; - - uint esp; // kernel stack pointer - uint ebp; // kernel frame pointer - struct jmpbuf jmpbuf; - struct trapframe *tf; // points into kstack, used to find user regs }; @@ -22,7 +22,7 @@ char *argv[MAXARGS]; char argv0buf[BUFSIZ]; int argc; -int debug = 1; +int debug = 0; int parse(char *s); void runcmd(void); @@ -113,7 +113,6 @@ sys_pipe(void) return 0; oops: - cprintf("sys_pipe failed\n"); if(rfd) fd_close(rfd); if(wfd) @@ -602,14 +601,12 @@ sys_exec(void) return 0; bad: - cprintf("exec failed early\n"); if(mem) kfree(mem, sz); iput(ip); return -1; bad2: - cprintf("exec failed late\n"); iput(ip); proc_exit(); return 0; |