xv6

Unnamed repository; edit this file 'description' to name the repository.
Log | Files | Refs | README | LICENSE

commit 7a37578e9efcba67d82fbfee7d03cba830a41106
parent dfcc5b997ce9c313b9ac0e7d8da39c4416b472a8
Author: rtm <rtm>
Date:   Tue, 29 Aug 2006 19:59:52 +0000

clear killed flag in exit
idecref cwd in exit

Diffstat:
Mfs.c | 2+-
Mfstests.c | 8++++++--
Mproc.c | 4++++
Mproc.h | 5-----
Msh.c | 2+-
Msyscall.c | 3---
6 files changed, 12 insertions(+), 12 deletions(-)

diff --git a/fs.c b/fs.c @@ -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); diff --git a/fstests.c b/fstests.c @@ -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); diff --git a/proc.c b/proc.c @@ -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"); diff --git a/proc.h b/proc.h @@ -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 }; diff --git a/sh.c b/sh.c @@ -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); diff --git a/syscall.c b/syscall.c @@ -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;