I ran valgrind and I have some other leaks, but I think I have found the relevant warning.
==5089== Invalid read of size 8
==5089== at 0x52A4428: osip_list_get_next (in /usr/lib/libosipparser2.so.12.0.0)
==5089== by 0x10AB6E: _execute_all_transactions (sip.c:99)
==5089== by 0x10ABD4: othread_func (sip.c:116)
==5089== by 0x10AC5B: sip_treat_message (sip.c:133)
==5089== by 0x109EE2: sniff (filter.c:23)
==5089== by 0x4E5AB4C: ??? (in /usr/lib/libpcap.so.1.8.1)
==5089== by 0x4E4A3CE: pcap_loop (in /usr/lib/libpcap.so.1.8.1)
==5089== by 0x109BA0: main (main.c:81)
==5089== Address 0x71ab3a0 is 0 bytes inside a block of size 16 free'd
==5089== at 0x4C2E14B: free (in /usr/lib/valgrind/vgpreload_memcheck-amd64-linux.so)
==5089== by 0x52A45A4: osip_list_iterator_remove (in /usr/lib/libosipparser2.so.12.0.0)
==5089== by 0x508619F: __osip_remove_ict_transaction (in /usr/lib/libosip2.so.12.0.0)
==5089== by 0x10B321: sip_cb_ict_kill_transaction (sip_callbacks.c:96)
==5089== by 0x508588E: fsm_callmethod (in /usr/lib/libosip2.so.12.0.0)
==5089== by 0x5088418: osip_transaction_execute (in /usr/lib/libosip2.so.12.0.0)
==5089== by 0x10AB36: _execute_all_transactions (sip.c:104)
==5089== by 0x10ABD4: othread_func (sip.c:116)
==5089== by 0x10AC5B: sip_treat_message (sip.c:133)
==5089== by 0x109EE2: sniff (filter.c:23)
==5089== by 0x4E5AB4C: ??? (in /usr/lib/libpcap.so.1.8.1)
==5089== by 0x4E4A3CE: pcap_loop (in /usr/lib/libpcap.so.1.8.1)
==5089== Block was alloc'd at
==5089== at 0x4C2CE5F: malloc (in /usr/lib/valgrind/vgpreload_memcheck-amd64-linux.so)
==5089== by 0x52A436B: osip_list_add (in /usr/lib/libosipparser2.so.12.0.0)
==5089== by 0x5086015: __osip_add_ict (in /usr/lib/libosip2.so.12.0.0)
==5089== by 0x508826A: osip_transaction_init (in /usr/lib/libosip2.so.12.0.0)
==5089== by 0x10AD06: sip_treat_request (sip.c:152)
==5089== by 0x10AC32: sip_treat_message (sip.c:129)
==5089== by 0x109EE2: sniff (filter.c:23)
==5089== by 0x4E5AB4C: ??? (in /usr/lib/libpcap.so.1.8.1)
==5089== by 0x4E4A3CE: pcap_loop (in /usr/lib/libpcap.so.1.8.1)
==5089== by 0x109BA0: main (main.c:81)
So it says that a transaction is terminated and it is later returned by the osip_ict_get_next(). How can it happen?
As I am iterating over a list of transactions, it should mean that a transaction is added twice to a transaction list, shouldn't it?