diff --git a/fs.c b/fs.c index 6c552e6..80f522b 100644 --- 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 index ac9478e..3967f13 100644 --- 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 index 01f6aa4..eca5e97 100644 --- 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 index 5689bbc..36b07a5 100644 --- 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 index 2f2d297..5da556e 100644 --- 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 index 5a7a60d..2918bb0 100644 --- 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;