expect(1): fix source path [rsc] --rw-rw-r-- M 303009 presotto sys 3018 Mar 9 09:15 sys/man/1/expect /n/sourcesdump/2006/0309/plan9/sys/man/1/expect:101,107 - /n/sourcesdump/2006/0310/plan9/sys/man/1/expect:101,107 .B /rc/bin/ipconf/* example dialer scripts for ppp .SH SOURCE - .B /sys/src/dial/*.c + .B /sys/src/cmd/dial/*.c .SH SEE ALSO .IR ppp (8), .IR telco (4) eqn: avoid use of inline keyword [rsc] --rw-rw-r-- M 303009 glenda sys 7121 Mar 9 09:19 sys/src/cmd/eqn/main.c /n/sourcesdump/2006/0309/plan9/sys/src/cmd/eqn/main.c:12,18 - /n/sourcesdump/2006/0310/plan9/sys/src/cmd/eqn/main.c:12,18 void settype(char *); int getdata(void); int getline(char *); - void inline(void); + void inlineeq(void); void init(void); void init_tbl(void); /n/sourcesdump/2006/0309/plan9/sys/src/cmd/eqn/main.c:123,129 - /n/sourcesdump/2006/0310/plan9/sys/src/cmd/eqn/main.c:123,129 printf(".lf %d\n", curfile->lineno+1); } else if (type == lefteq) - inline(); + inlineeq(); else if (in[0] == '.' && in[1] == 'l' && in[2] == 'f') { if (sscanf(in+3, "%d %s", &ln, fname) == 2) { free(curfile->fname); /n/sourcesdump/2006/0309/plan9/sys/src/cmd/eqn/main.c:154,160 - /n/sourcesdump/2006/0310/plan9/sys/src/cmd/eqn/main.c:154,160 return(c); } - void inline(void) + void inlineeq(void) { int ds, n, sz1 = 0; upas/marshal: avoid use of inline keyword [rsc] --rw-rw-r-- M 303009 glenda sys 32859 Mar 9 09:18 sys/src/cmd/upas/marshal/marshal.c /n/sourcesdump/2006/0309/plan9/sys/src/cmd/upas/marshal/marshal.c:10,16 - /n/sourcesdump/2006/0310/plan9/sys/src/cmd/upas/marshal/marshal.c:10,16 Attach *next; char *path; char *type; - int inline; + int ainline; Ctype *ctype; }; /n/sourcesdump/2006/0309/plan9/sys/src/cmd/upas/marshal/marshal.c:382,388 - /n/sourcesdump/2006/0310/plan9/sys/src/cmd/upas/marshal/marshal.c:382,388 Bprint(&out, "\tboundary=\"%s\"\n\n", boundary); Bprint(&out, "This is a multi-part message in MIME format.\n"); Bprint(&out, "--%s\n", boundary); - Bprint(&out, "Content-Disposition: inline\n"); + Bprint(&out, "Content-Disposition: ainline\n"); } if(!nflag){ /n/sourcesdump/2006/0309/plan9/sys/src/cmd/upas/marshal/marshal.c:679,686 - /n/sourcesdump/2006/0310/plan9/sys/src/cmd/upas/marshal/marshal.c:679,686 if(strcmp(a->type, "text/plain") != 0) Bprint(out, "Content-Type: %s\n", a->type); - if(a->inline){ - Bprint(out, "Content-Disposition: inline\n"); + if(a->ainline){ + Bprint(out, "Content-Disposition: ainline\n"); } else { p = strrchr(a->path, '/'); if(p == nil) /n/sourcesdump/2006/0309/plan9/sys/src/cmd/upas/marshal/marshal.c:806,812 - /n/sourcesdump/2006/0310/plan9/sys/src/cmd/upas/marshal/marshal.c:806,812 } Attach* - mkattach(char *file, char *type, int inline) + mkattach(char *file, char *type, int ainline) { Ctype *c; Attach *a; /n/sourcesdump/2006/0309/plan9/sys/src/cmd/upas/marshal/marshal.c:824,830 - /n/sourcesdump/2006/0310/plan9/sys/src/cmd/upas/marshal/marshal.c:824,830 a->path = file; a->next = nil; a->type = type; - a->inline = inline; + a->ainline = ainline; a->ctype = nil; if(type != nil){ for(c = ctype; ; c++) webfsget: use correct name in usage [rsc] --rw-rw-r-- M 303009 rsc sys 1597 Mar 9 09:17 sys/src/cmd/webfsget.c /n/sourcesdump/2006/0309/plan9/sys/src/cmd/webfsget.c:18,24 - /n/sourcesdump/2006/0310/plan9/sys/src/cmd/webfsget.c:18,24 void usage(void) { - fprint(2, "usage: webget [-b baseurl] [-m mtpt] [-p postbody] url\n"); + fprint(2, "usage: webfsget [-b baseurl] [-m mtpt] [-p postbody] url\n"); exits("usage"); } kmem(1): new program [rsc] --rwxrwxr-x M 303009 rsc sys 468 Mar 9 16:36 rc/bin/kmem [rsc] --rw-rw-r-- M 303009 glenda sys 3022 Mar 9 16:36 sys/lib/acid/leak [diffs elided - too long] [diff -c /n/sourcesdump/2006/0309/plan9/sys/lib/acid/leak /n/sourcesdump/2006/0310/plan9/sys/lib/acid/leak] [rsc] --rw-rw-r-- M 303009 glenda sys 3307 Mar 9 16:36 sys/man/1/leak /n/sourcesdump/2006/0309/plan9/sys/man/1/leak:19,24 - /n/sourcesdump/2006/0310/plan9/sys/man/1/leak:19,29 .I width ] .I pid ... + .PP + .B kmem + [ + .I kernel + ] .SH DESCRIPTION .I Leak examines the named processes, which /n/sourcesdump/2006/0309/plan9/sys/man/1/leak:57,63 - /n/sourcesdump/2006/0310/plan9/sys/man/1/leak:62,70 .PP If the .B -b - option is given, leak will print a Plan 9 image file + option is given, + .I leak + will print a Plan 9 image file graphically summarizing the memory arenas. In the image, each pixel represents .I res /n/sourcesdump/2006/0309/plan9/sys/man/1/leak:102,107 - /n/sourcesdump/2006/0310/plan9/sys/man/1/leak:109,120 processes, and is only necessary when inspecting processes started from stripped binaries. + .PP + .I Kmem + prints a summary of all allocated blocks in the running kernel. + Each line of the summary gives + the count and total size of blocks allocated at an allocation point. + The list is sorted by count in decreasing order. .SH EXAMPLES List lost blocks in .IR 8.out . /n/sourcesdump/2006/0309/plan9/sys/man/1/leak:113,132 - /n/sourcesdump/2006/0310/plan9/sys/man/1/leak:126,153 would need editing before sending to the shell. .IP .EX - g% leak -s 8.out + % leak -s 8.out leak -s 229 230 - g% leak -s 8.out | rc + % leak -s 8.out | rc src(0x0000bf1b); // 64 src(0x000016f5); // 7 src(0x0000a988); // 7 - g% + % .EE .LP View the memory usage graphic for the window system. .IP .EX - g% leak -b rio | rc | page + % leak -b rio | rc | page .EE + .PP + List the top allocation points in the kernel, + first by count and then by total size: + .IP + .EX + % kmem | sed 10q + % kmem | sort -nr +1 | sed 10q + .EE .SH SOURCE .B /sys/lib/acid/leak .br /n/sourcesdump/2006/0309/plan9/sys/man/1/leak:133,141 - /n/sourcesdump/2006/0310/plan9/sys/man/1/leak:154,169 .B /sys/src/cmd/aux/acidleak.c .br .B /rc/bin/leak + .br + .B /rc/bin/kmem .SH BUGS - Leak depends on the internal structure of the + .I Leak + and + .I kmem + depend on the internal structure of the libc pool memory allocator (see .IR pool (2)). Since the ANSI/POSIX environment uses a different - allocator, leak will not work on APE programs. + allocator, + .I leak + will not work on APE programs. kernel: fix memory leak in attach [rsc] --rw-rw-r-- M 303009 glenda sys 34831 Mar 9 16:34 sys/src/9/port/chan.c /n/sourcesdump/2006/0309/plan9/sys/src/9/port/chan.c:1700,1705 - /n/sourcesdump/2006/0310/plan9/sys/src/9/port/chan.c:1700,1706 s[n] = 0; aname = s; name = s; + setmalloctag(s, pc); } while(*name){ /n/sourcesdump/2006/0309/plan9/sys/src/9/port/chan.c:1729,1735 - /n/sourcesdump/2006/0310/plan9/sys/src/9/port/chan.c:1730,1736 char* validnamedup(char *aname, int slashok) { - return validname0(aname, slashok, 1, 0); + return validname0(aname, slashok, 1, getcallerpc(&aname)); } void [rsc] --rw-rw-r-- M 303009 glenda sys 22192 Mar 9 16:34 sys/src/9/port/sysfile.c /n/sourcesdump/2006/0309/plan9/sys/src/9/port/sysfile.c:1037,1042 - /n/sourcesdump/2006/0310/plan9/sys/src/9/port/sysfile.c:1037,1043 c0 = devtab[ret]->attach((char*)&bogus); poperror(); /* spec */ + free(spec); poperror(); /* ac bc */ if(ac) cclose(ac);