> ; ps auxwww | grep 9pserv
> quanstro  4432  0.0  0.4 137036  1140 tty1     Sl   Sep17   0:42 9pserve -u 
> unix!/tmp/ns.quanstro.:0/plumb
> quanstro 19386  0.2  0.2  84180   760 pts/32   Sl   14:09   0:00 9pserve -u 
> unix!/tmp/ns.quanstro.:0/acme
> quanstro 19453  0.0  0.1   1524   500 pts/4    S+   14:10   0:00 grep 9pserv

This isn't convincing that there's a memory leak.
Maybe you've just had more simultaneous messages
outstanding than acme connections.  I on the other
hand run a lot of wins all the time, so my acme 9pserve is
bigger.

rsc  4410 09:32  0:00   732K Sleep  9pserve -u unix!/tmp/ns.x40/factotum
rsc  4506 09:32  0:00   772K Sleep  9pserve -u unix!/tmp/ns.x40/plumb
rsc  4560 09:32  0:15   904K Sleep  9pserve -u unix!/tmp/ns.x40/acme

I tried to reproduce this using plumber but can't find anything:

; NAMESPACE=/tmp/xxx
; mkdir $NAMESPACE
; @{rfork s; plumber >/dev/null >[2=1]}
; fn z {psu -a|grep 9pserve |grep /tmp/xxx}
; fn 1000 { for(i in `{seq 1000}) $* }
; z
rsc 20413  10:24  0:00   624K Sleep  9pserve -u unix!/tmp/xxx/plumb
; 1000 9p read plumb/rules >/dev/null
; z
rsc 20413  10:24  0:39   732K Sleep  9pserve -u unix!/tmp/xxx/plumb
; 1000 9p read plumb/rules >/dev/null
; z
rsc 20413  10:24  1:18   740K Sleep  9pserve -u unix!/tmp/xxx/plumb
; 1000 9p read plumb/rules >/dev/null
; z
rsc 20413  10:24  1:58   740K Sleep  9pserve -u unix!/tmp/xxx/plumb
; 1000 9p readfd plumb/rules >/dev/null
; z
rsc 20413  10:24  2:06    748K Sleep  9pserve -u unix!/tmp/xxx/plumb
; 1000 9p readfd plumb/rules >/dev/null
; z
rsc 20413  10:24  2:14    748K Sleep  9pserve -u unix!/tmp/xxx/plumb
; 1000 9p stat plumb/rules >/dev/null
; z
rsc 20413  10:24  2:52    748K Sleep  9pserve -u unix!/tmp/xxx/plumb
; 1000 9p ls plumb >/dev/null
; z
rsc 20413  10:24  3:35    748K Sleep  9pserve -u unix!/tmp/xxx/plumb
; 9p read plumb/rules >/tmp/a
; for(i in `{seq 1000}) 9p write plumb/rules </tmp/a
9p: fsopen rules: file already open
; z
rsc 20413  10:24  4:13    748K Sleep  9pserve -u unix!/tmp/xxx/plumb
; for(i in `{seq 1000}) 9p writefd plumb/rules </tmp/a
9p: write error: Bad file descriptor
9p: write error: Bad file descriptor
9p: write error: Bad file descriptor
; z
rsc 20413  10:24  4:42    748K Sleep  9pserve -u unix!/tmp/xxx/plumb
; for(i in `{seq 1000}) 9p writefd plumb/rules </tmp/a
; z
rsc 20413  10:24  5:09    748K Sleep  9pserve -u unix!/tmp/xxx/plumb
;

Those errors are odd, of course, but not a memory leak.

Russ





> i looked into this the other day, but didn't get very far.
> the only thing i did notice is that in sendq() the allocated
> bytes for the Qel* are not freed if q->hungup:

That's not it.  q->hungup is always zero.  (Good thing, too,
since no one looks at the return value of sendq.)  I should
clean that up.

Reply via email to