thought I would give you a small little perl program I
quickly hacked up to help with some memory leaks I was
getting. Turns out I was forgetting to call release_urecord
after a get_urecord on the usrloc module. Because I use
Kamailio in DBOnly mode - the memory was never being freed.
This little program helped me to find the source in no time at
all. I hope it helps you too.
The program works on the log file. NB you have to have
memlog debugging enabled for this program to do anything
useful. Effectively the program continuously monitors the log
file looking for allocs and frees. It tallies all the
fragments in use and gives a report of all the fragments and
where they weer allocated. It also keeps a running counter of
bytes used.
*****************************************************************************************************************************************************
DUMPING ALL UNFREED MEMORY FRAGMENTS (25)
*****************************************************************************************************************************************************
called from h_table.c: build_cell(251)
6
21312
called from dlg.c: new_dlg_uac(169)
1
128
called from t_msgbuilder.c: build_uac_req(921)
6
1896
called from pv_svar.c: set_var_value(104)
3
132
called from ../../ut.h: shm_str_dup(501)
2
48
called from reply.c: build_contact(127)
1
132
called from t_hooks.c: insert_tmcb(108)
6
144
************************************************************TOTAL
BYTES HELD IN FRAGMENTS:
23792***************************************************************