From 7a37578e9efcba67d82fbfee7d03cba830a41106 Mon Sep 17 00:00:00 2001
From: rtm <rtm>
Date: Tue, 29 Aug 2006 19:59:52 +0000
Subject: [PATCH] clear killed flag in exit idecref cwd in exit

---
 fs.c      | 2 +-
 fstests.c | 8 ++++++--
 proc.c    | 4 ++++
 proc.h    | 5 -----
 sh.c      | 2 +-
 syscall.c | 3 ---
 6 files changed, 12 insertions(+), 12 deletions(-)

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;
-- 
GitLab