diff options
| -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; | 
