Skip to content
Snippets Groups Projects
Commit 7a37578e authored by rtm's avatar rtm
Browse files

clear killed flag in exit

idecref cwd in exit
parent dfcc5b99
No related branches found
No related tags found
No related merge requests found
......@@ -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;
......
0% Loading or .
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment