[mythtv-commits] Ticket #3692: Memory leak in DVB DummyVideo code
MythTV
mythtv at cvs.mythtv.org
Thu Jul 5 15:08:44 UTC 2007
#3692: Memory leak in DVB DummyVideo code
-----------------------+----------------------------------------------------
Reporter: anonymous | Owner: danielk
Type: defect | Status: new
Priority: minor | Milestone: unknown
Component: dvb | Version: unknown
Severity: medium | Mlocked: 0
-----------------------+----------------------------------------------------
I originally posted this in #3317 but that ticket got closed without
resolving my issue. For well over 6 months now, I've noticed that the
backend slowly increases its virtual memory footprint. Which eventually
leads to slowing the entire machine down (more-so on machines with small
amounts of RAM and not enough swap.
Digging into it with pmap, I found lots of these:
{{{
pmap -d `pidof mythbackend`
...
a10de000 4 ----- 00000000a10de000 000:00000 [ anon ]
a10df000 8188 rwx-- 00000000a10df000 000:00000 [ anon ]
...
}}}
(That's 8MB of anonymous memory for those playing along).
And I noticed that the number of these went up everytime I changed a
channel.
An 8MB Anonymous page is just what you see when libpthread allocates a new
stack when creating a thread, but after several channel changes, I was
seeing lots more of these anonymous-memory entries than running threads.
So I surmized that we weren't reclaiming the stack when a thread
terminated.
I wrote a utility (included) to track all thread creation and what memory
it was associated with (just a wrapper around libpthread) and was able to
use it to map pthread_create calls to stack allocations.
Using this, I determined that each time dvbrecorder.cpp::StartDummyVideo
was called, the number of anonymous memory entries would increase, and
these were never being reclaimed.
Simply adding a:
{{{
pthread_detach(_video_thread);
}}}
right after the pthread_create call (this could alternatively be done
using attributes passed to pthread_create I suppose) allows the pthread
stacks to be reclaimed once the thread terminates, and now myth no longer
increases it's virtual memory footprint by 8MB every time a channel-change
occurs.
--
Ticket URL: <http://svn.mythtv.org/trac/ticket/3692>
MythTV <http://svn.mythtv.org/trac>
MythTV
More information about the mythtv-commits
mailing list