diff --git a/fs.c b/fs.c index 6c552e6514e2fa7bacebae952b8940788bc135c5..80f522b3ee0231d2bc494c5afbf0c25d70b7f2f2 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 ac9478e5a25d8b3bc10e9698eb0b1ddd6eda84c7..3967f13c022ed196ba9ad2f1eefa4be0f685ec42 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 01f6aa45c797e2f2505e58958f65fe05132129b1..eca5e9759b891e78828bce394c7f22c58f8e5bed 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 5689bbcb08b2a4e68929267ba861d5314048e219..36b07a54087e41705433f795e948a9506ed5f625 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 2f2d2976b88fe8a7ee9b658fa36f6c92b5628863..5da556e0b28bd2479b6e321edd9e1dabdab0d8e4 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 5a7a60dba73f7ce80e6b20e454130a7167e16e10..2918bb0a884c7b314fbe12a140608bb4d819deef 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;