Browse Source

Plan 9 from Bell Labs 2005-09-15

David du Colombier 18 years ago
parent
commit
0a340898ec
4 changed files with 97 additions and 10 deletions
  1. 2 3
      dist/replica/_plan9.db
  2. 1 1
      dist/replica/plan9.db
  3. 2 0
      dist/replica/plan9.log
  4. 92 6
      sys/lib/acid/kernel

+ 2 - 3
dist/replica/_plan9.db

@@ -201,7 +201,7 @@
 386/bin/disk - 20000000775 sys sys 984788664 0
 386/bin/disk/dump9660 - 775 sys sys 1125345967 152253
 386/bin/disk/exsort - 775 sys sys 1119496645 60226
-386/bin/disk/fdisk - 775 sys sys 1126321690 103794
+386/bin/disk/fdisk - 775 sys sys 1126667443 103810
 386/bin/disk/format - 775 sys sys 1126321690 89534
 386/bin/disk/kfs - 775 sys sys 1119496646 248974
 386/bin/disk/kfscmd - 775 sys sys 1115950064 38222
@@ -6056,7 +6056,7 @@ sys/lib/acid/alef - 664 sys sys 944955985 2293
 sys/lib/acid/alpha - 664 sys sys 944955985 4849
 sys/lib/acid/arm - 664 sys sys 984696197 1842
 sys/lib/acid/coverage - 664 sys sys 944955985 1746
-sys/lib/acid/kernel - 664 sys sys 1063858104 4994
+sys/lib/acid/kernel - 664 sys sys 1126699644 6303
 sys/lib/acid/leak - 664 sys sys 1110989276 2185
 sys/lib/acid/mips - 664 sys sys 944955985 5472
 sys/lib/acid/network - 664 sys sys 1020313817 2499
@@ -14963,4 +14963,3 @@ usr/glenda/lib/profile - 664 glenda glenda 1105128663 890
 usr/glenda/readme.acme - 664 glenda glenda 1019860628 4753
 usr/glenda/readme.rio - 664 glenda glenda 1019860628 6370
 usr/glenda/tmp - 20000000775 glenda glenda 1018802620 0
-386/bin/disk/fdisk - 775 sys sys 1126667443 103810

+ 1 - 1
dist/replica/plan9.db

@@ -6056,7 +6056,7 @@ sys/lib/acid/alef - 664 sys sys 944955985 2293
 sys/lib/acid/alpha - 664 sys sys 944955985 4849
 sys/lib/acid/arm - 664 sys sys 984696197 1842
 sys/lib/acid/coverage - 664 sys sys 944955985 1746
-sys/lib/acid/kernel - 664 sys sys 1063858104 4994
+sys/lib/acid/kernel - 664 sys sys 1126699644 6303
 sys/lib/acid/leak - 664 sys sys 1110989276 2185
 sys/lib/acid/mips - 664 sys sys 944955985 5472
 sys/lib/acid/network - 664 sys sys 1020313817 2499

+ 2 - 0
dist/replica/plan9.log

@@ -21287,3 +21287,5 @@
 1126587661 14 c sys/src/9/ppc/main.c - 664 sys sys 1126586256 9039
 1126623670 0 c sys/src/cmd/disk/prep/fdisk.c - 664 sys sys 1126623191 21983
 1126668680 0 c 386/bin/disk/fdisk - 775 sys sys 1126667443 103810
+1126697486 0 c sys/lib/acid/kernel - 664 sys sys 1126697446 6307
+1126701087 0 c sys/lib/acid/kernel - 664 sys sys 1126699644 6303

+ 92 - 6
sys/lib/acid/kernel

@@ -18,10 +18,10 @@ defn qid(qid) {
 	return itoa(qid.path\X)+"."+itoa(qid.vers\X);
 }
 
-defn cname(c) {
-	complex Cname c;
-	if c != 0 then {
-		return *(c.s\s);
+defn path(p) {
+	complex Path p;
+	if p != 0 then {
+		return *(p.s\s);
 	} else
 		return "<null>";
 }
@@ -53,7 +53,7 @@ defn chan(c) {
 	c = (Chan)c;
 	d=(Dev)(*(devtab+4*c.type));
 	q=c.qid;
-	print(c\X, " ref=", c.ref\D, " #", d.dc\r, c.dev\D, " (", q.path, " ", q.vers\D, " ", q.type\X, ")");
+	print("chan(", c\X, "): ref=", c.ref\D, " #", d.dc\r, c.dev\D, " (", q.path, " ", q.vers\D, " ", q.type\X, ")");
 	print(" fid=", c.fid\D, " iounit=", c.iounit\D);
 	if c.ref != 0 then {
 		print(" ", cname(c.name), " mchan=", c.mchan\X);
@@ -69,11 +69,97 @@ defn chans() {
 
 	c = (Chan)chanalloc.list;
 	while c != 0 do {
-		chan(c);
+		if c.ref != 0 then
+			chan(c);
 		c=(Chan)c.link;
 	}
 }
 
+defn nchans() {
+	local c, n;
+	
+	n = 0;
+	c = (Chan)chanalloc.list;
+	while c != 0 do {
+		if c.ref != 0 then
+			n++;
+		c = (Chan)c.link;
+	}
+	return n;
+}
+
+defn activechanlist() {
+	local l, n;
+	
+	l = {};
+	c = (Chan)chanalloc.list;
+	while c != 0 do {
+		if c.ref != 0 then
+			l = append l,c;
+		c = (Chan)c.link;
+	}
+	return l;
+}
+
+defn difflist(a, b) {
+	local l, x;
+	
+	l = {};
+	while a != {} do {
+		x = head a;
+		if match(x, b) == -1 then
+			l = append l, x;
+		a = tail a;
+	}
+	return l;
+}
+
+_active_chan_list = {};
+defn newchans() {
+	local l, new;
+	
+	l = activechanlist();
+	if _active_chan_list != {} then
+		newerchans(_active_chan_list);
+	_active_chan_list = l;
+}
+
+defn newerchans(oldlist){
+	local new;
+	
+	new = difflist(activechanlist(), oldlist);
+	while new != {} do {
+		chan(head new);
+		new = tail new;
+	}
+}
+
+// look for channels that refer to themselves
+defn badchans() {
+	local bad, c, i, len, mtpt, p;
+	
+	c = (Chan)chanalloc.list;
+	while c != 0 do {
+		if c.ref != 0 then {
+			bad = "";
+			p = (Path)c.path;
+			if p != 0 then {
+				path(p);
+				mtpt = p.mtpt;
+				len = p.mlen;
+				i=0; loop 1,len do {
+					if mtpt[i] == c then
+						bad = bad+" mtpt self-ref";
+					i = i+1;
+				}
+			}
+			if bad != "" then
+				print("chan(", c\X, "):", bad, "\n");
+		}
+		c = (Chan)c.link;
+	}
+}
+
 // manipulate processes
 defn proctab(x) {
 	return procalloc.arena+sizeofProc*x;