On Tue, Mar 01, 2011 at 12:12:09AM +0300, Roman Belov wrote:
> On Wed, Feb 23, 2011 at 02:40:18PM -0500, Kris Maglione wrote:
> > On Fri, Feb 18, 2011 at 09:15:14PM +0300, Roman Belov wrote:
> > >I use wmii-3.9.2-r1 (gentoo ebuild) on my workstation. Today I looked at
> > >memory usage and saw that wmii had been occupying all memory and swap.
> > >Uptime was about three month.
> > >
> > >I am trying to reproduce this issue at home with wmii-9999 (hg, cloned 
> > >today).
> > >Seems the devel version has this issue too.
> > 
> > Ok, I looked into this and it turns out that it wasn't a leak. 
> > Certain structures used in the filesystem are allocated from a 
> > free list because they're used in huge numbers. However, in one 
> > particular place, a structure was allocated directly rather than 
> > taken from the free list, and was re-added to the free list 
> > later, and thus the free list grew without bound by one 
> > structure for each filesystem walk. It should be fixed by 
> > revision 141:339db5c6d2c9 in the libixp repo.
> >
> 
> It did not fix the problem, that free list is actually bounded now (I
> checked) but memory usage still grows.
> 
> I have performed a little investigation. Valgrind shows that it is not a
> leak again. So I captured and analysed call logs of malloc/free/etc.
> functions. I found that some block of 48 bytes is periodically (likely
> it is status line update activity) allocated but is never freed. From
> gdb stack backtraces I see only one place where such block is allocated.
> 
> #0  0xb749b0b6 in malloc () from /lib/libc.so.6
> No symbol table info available.
> #1  0x0806a22b in ixp_emalloc (size=48) at util.c:198
>         ret = 0x1
> #2  0x0806a25d in ixp_emallocz (size=48) at util.c:207
>         ret = 0xbff42688
> #3  0x08066bc3 in createfid (map=0x80d632c, fid=2, p9conn=0x80d6320) at 
> request.c:91
>         f = 0x80e14f8
> #4  0x080674a4 in handlereq (r=0x80e1240) at request.c:296
>         p9conn = 0x80d6320
>         srv = 0x80806e0
> #5  0x08066df4 in handlefcall (c=0x80d5278) at request.c:146
>         (Dropped a lot of data)
>         p9conn = 0x80d6320
>         req = 0x80e1240
> #6  0x080681e3 in handle_conns (s=0x80866c0) at server.c:118
>         c = 0x80d5278
>         n = 0x80c5d88
> #7  0x08068316 in ixp_serverloop (srv=0x80866c0) at server.c:169
>         tvp = 0xbff428dc
>         tv = {tv_sec = 0, tv_usec = 381988}
>         timeout = 382
>         r = 1
> #8  0x0805c903 in main (argc=0, argv=0xbff42a78) at main.c:436
>         oargv = 0xbff42a74
>         wmiirc = 0x807c3bc "wmiirc"
>         i = -1074517560
>         _argtmp = 0
>         _inargv = 0
>         _argv = 0x0
> 
> Unfortunately, I am not familiar with libixp code to decide what is
> wrong.
> 

Sorry for misinformation. It was wrong stack trace. This call does not
correspond the target malloc(48) without free(). I will update this
thread a bit later.


Reply via email to