Bugfixes:
- systems with more than 64M RAM should work now (Chris Adams)
actually, up to (and including) 1 Gigs of memory should be OK.
- as Peter Andres has noticed, modules have to be recompiled, and
binary-only modules cannot be memleak-traced ...
[Peter, your Peter_Andres@Auto.ITTInd.Com address doesnt work...]
- [+various cleanups]
New Features:
- 'object allocation timestamps', now the detector timestamps
every memory object with a granularity of ~5 seconds.
'very old but still allocated objects' are good leak candidates..
timestamps are displayed in absolute time, this way allocation
maps can be effectively compressed via RCS. 'current time' is
displayed in the first line of /proc/memleak. (suggested by
Lorenzo M. Catucci) Lorenzo's memcheck.sh script stores the
current allocation map into RCS.
- reduced allocation map size via 'dynamic ID allocation'. Even
with the addition of timestamps, it's smaller than the first
patch, 3.6M on my system. (reduction was suggested by many
people, looks like this is a problem :)
- 'findaddr.c', a smallish program which finds out wether some
memory object is actually stored in memory (/proc/kcore)
somewhere. If an address does not show up anywhere, it might be a
leaked object ... The code is a bit ugly since it tries to
prevent finding the address in it's own address space ... ;)
- lotsa smallish scripts to ease postprocessing, and a FAQ
This version has been running on my system for a few hours now, without
any performance or stability problem.
Comments, reports, feature requests, flames welcome, lemme know if i've
messed up somewhere.
-- mingo
begin 600 memleak-deluxe.tar.gz
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
C7^MK?:VO];6^UM?Z6E_K:WVMK_6UOM97SO4?\^>@50"@```D
`
end