projects
/
nestedvm.git
/ commitdiff
commit
grep
author
committer
pickaxe
?
search:
re
summary
|
shortlog
|
log
|
commit
| commitdiff |
tree
raw
|
patch
|
inline
| side by side (parent:
119cb20
)
fork/waitpid leak
author
brian
<brian@brianweb.net>
Sat, 8 May 2004 07:30:29 +0000
(
00:30
-0700)
committer
brian
<brian@brianweb.net>
Sat, 8 May 2004 07:30:29 +0000
(
00:30
-0700)
darcs-hash:
20040508073029
-24bed-
204689d397194c5406a3341afdb19f87fb13f026
.gz
src/org/ibex/nestedvm/UnixRuntime.java
patch
|
blob
|
history
diff --git
a/src/org/ibex/nestedvm/UnixRuntime.java
b/src/org/ibex/nestedvm/UnixRuntime.java
index
e3afe98
..
0bed8ed
100644
(file)
--- a/
src/org/ibex/nestedvm/UnixRuntime.java
+++ b/
src/org/ibex/nestedvm/UnixRuntime.java
@@
-86,14
+86,21
@@
public abstract class UnixRuntime extends Runtime implements Cloneable {
UnixRuntime[] tasks = gs.tasks;
synchronized(gs) {
if(pid != 0) {
UnixRuntime[] tasks = gs.tasks;
synchronized(gs) {
if(pid != 0) {
- if(tasks[pid] == null || tasks[pid].pid != pid) throw new Error("should never happen");
+ UnixRuntime prev = tasks[pid];
+ if(prev == null || prev == this || prev.pid != pid || prev.parent != parent)
+ throw new Error("should never happen");
+ synchronized(parent.children) {
+ int i = parent.activeChildren.indexOf(prev);
+ if(i == -1) throw new Error("should never happen");
+ parent.activeChildren.set(i,this);
+ }
} else {
int newpid = -1;
int nextPID = gs.nextPID;
} else {
int newpid = -1;
int nextPID = gs.nextPID;
- for(int i=nextPID;i<tasks.length;i++) if(tasks[i] == null) { newpid = i; break; }
- if(newpid == -1) for(int i=1;i<nextPID;i++) if(tasks[i] == null) { newpid = i; break; }
- if(newpid == -1) throw new ProcessTableFullExn();
- pid = newpid;
+ for(int i=nextPID;i<tasks.length;i++) if(tasks[i] == null) { newpid = i; break; }
+ if(newpid == -1) for(int i=1;i<nextPID;i++) if(tasks[i] == null) { newpid = i; break; }
+ if(newpid == -1) throw new ProcessTableFullExn();
+ pid = newpid;
gs.nextPID = newpid + 1;
}
tasks[pid] = this;
gs.nextPID = newpid + 1;
}
tasks[pid] = this;
@@
-224,7
+231,7
@@
public abstract class UnixRuntime extends Runtime implements Cloneable {
if(parent == null) {
gs.tasks[pid] = null;
} else {
if(parent == null) {
gs.tasks[pid] = null;
} else {
- parent.activeChildren.remove(this);
+ if(!parent.activeChildren.remove(this)) throw new Error("should never happen _exited: pid: " + pid);
parent.exitedChildren.add(this);
parent.children.notify();
}
parent.exitedChildren.add(this);
parent.children.notify();
}