summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
-rw-r--r--CHANGES3
-rw-r--r--emu/port/dis.c15
-rw-r--r--include/version.h2
3 files changed, 17 insertions, 3 deletions
diff --git a/CHANGES b/CHANGES
index 20afd1a2..291a0857 100644
--- a/CHANGES
+++ b/CHANGES
@@ -1,3 +1,6 @@
+20081105
+ emu/port/dis.c change to killgrp to prevent new spawns during kill [#117]
+ (will do os/port/dis.c later)
20081022
sh: ignore leading white space in fail: strings, and change empty tail to "failed"
/emu/port/devfs-posix.c don't call readdir after it has returned end of file
diff --git a/emu/port/dis.c b/emu/port/dis.c
index 05feeb02..72fd52ab 100644
--- a/emu/port/dis.c
+++ b/emu/port/dis.c
@@ -118,6 +118,14 @@ newprog(Prog *p, Modlink *m)
Osenv *on, *op;
static int pidnum;
+ if(p != nil){
+ if(p->group != nil)
+ p->flags |= p->group->flags & Pkilled;
+ if(p->kill != nil)
+ error(p->kill);
+ if(p->flags & Pkilled)
+ error("");
+ }
n = malloc(sizeof(Prog)+sizeof(Osenv));
if(n == 0){
if(p == nil)
@@ -550,7 +558,7 @@ killgrp(Prog *p, char *msg)
/* interpreter has been acquired */
g = p->group;
- if(g == nil || g->head == nil)
+ if(g == nil || g->head == nil || g->flags & Pkilled)
return 0;
npid = 0;
for(f = g->head; f != nil; f = f->grpnext)
@@ -558,14 +566,16 @@ killgrp(Prog *p, char *msg)
panic("killgrp");
else
npid++;
- /* use pids not Prog* because state can change during killprog */
+ /* use pids not Prog* because state can change during killprog (eg, in delprog) */
pids = malloc(npid*sizeof(int));
if(pids == nil)
error(Enomem);
npid = 0;
for(f = g->head; f != nil; f = f->grpnext)
pids[npid++] = f->pid;
+ g->flags |= Pkilled;
if(waserror()) {
+ g->flags &= ~Pkilled;
free(pids);
nexterror();
}
@@ -575,6 +585,7 @@ killgrp(Prog *p, char *msg)
killprog(f, msg);
}
poperror();
+ g->flags &= ~Pkilled;
free(pids);
return 1;
}
diff --git a/include/version.h b/include/version.h
index 6c69520e..d1540b2f 100644
--- a/include/version.h
+++ b/include/version.h
@@ -1 +1 @@
-#define VERSION "Fourth Edition (20081104)"
+#define VERSION "Fourth Edition (20081105)"