Hi,
Looks like some of the allocated bytes aren’t getting free’d when calling some of the API functions, such as: confd_init, confd_ha_connect, confd_ha_bemaster, confd_ha_beslave, etc…
I have confd basic 5.4.
I compiled the example examples.confd/ha/dummy with make all. Then make start.
Now, for example, when running the following command:
valgrind --leak-check=full --show-reachable=yes ./ctrl master node0
I get this output:
==31528== Memcheck, a memory error detector
==31528== Copyright © 2002-2010, and GNU GPL’d, by Julian Seward et al.
==31528== Using Valgrind-3.6.0 and LibVEX; rerun with -h for copyright info
==31528== Command: ./ctrl master node0
==31528==
==31528== HEAP SUMMARY:
==31528== in use at exit: 868 bytes in 8 blocks
==31528== total heap usage: 13 allocs, 5 frees, 917 bytes allocated
==31528==
==31528== 4 bytes in 1 blocks are still reachable in loss record 1 of 8
==31528== at 0x4A05FDE: malloc (vg_replace_malloc.c:236)
==31528== by 0x41DB79: confd_errno_location (in /home/yogev/confd_basic_5_4/examples.confd/ha/dummy/ctrl)
==31528== by 0x41DBA5: clr_confd_err (in /home/yogev/confd_basic_5_4/examples.confd/ha/dummy/ctrl)
==31528== by 0x40D527: confd_do_connect (in /home/yogev/confd_basic_5_4/examples.confd/ha/dummy/ctrl)
==31528== by 0x4139DF: confd_ha_connect (in /home/yogev/confd_basic_5_4/examples.confd/ha/dummy/ctrl)
==31528== by 0x402E6B: bemaster (ctrl.c:127)
==31528== by 0x4037BE: main (ctrl.c:301)
==31528==
==31528== 8 bytes in 1 blocks are still reachable in loss record 2 of 8
==31528== at 0x4A05FDE: malloc (vg_replace_malloc.c:236)
==31528== by 0x4444AC: ei_mutex_create (in /home/yogev/confd_basic_5_4/examples.confd/ha/dummy/ctrl)
==31528== by 0x4443E5: erl_init_eterm_alloc (in /home/yogev/confd_basic_5_4/examples.confd/ha/dummy/ctrl)
==31528== by 0x42F3B8: erl_init (in /home/yogev/confd_basic_5_4/examples.confd/ha/dummy/ctrl)
==31528== by 0x41BBB1: confd_init_vsn_sz (in /home/yogev/confd_basic_5_4/examples.confd/ha/dummy/ctrl)
==31528== by 0x4036E8: main (ctrl.c:256)
==31528==
==31528== 32 bytes in 1 blocks are still reachable in loss record 3 of 8
==31528== at 0x4A05FDE: malloc (vg_replace_malloc.c:236)
==31528== by 0x4443BA: erl_init_eterm_alloc (in /home/yogev/confd_basic_5_4/examples.confd/ha/dummy/ctrl)
==31528== by 0x42F3B8: erl_init (in /home/yogev/confd_basic_5_4/examples.confd/ha/dummy/ctrl)
==31528== by 0x41BBB1: confd_init_vsn_sz (in /home/yogev/confd_basic_5_4/examples.confd/ha/dummy/ctrl)
==31528== by 0x4036E8: main (ctrl.c:256)
==31528==
==31528== 40 bytes in 1 blocks are still reachable in loss record 4 of 8
==31528== at 0x4A05FDE: malloc (vg_replace_malloc.c:236)
==31528== by 0x44394A: ei_m_create (in /home/yogev/confd_basic_5_4/examples.confd/ha/dummy/ctrl)
==31528== by 0x4444B9: ei_mutex_create (in /home/yogev/confd_basic_5_4/examples.confd/ha/dummy/ctrl)
==31528== by 0x4443E5: erl_init_eterm_alloc (in /home/yogev/confd_basic_5_4/examples.confd/ha/dummy/ctrl)
==31528== by 0x42F3B8: erl_init (in /home/yogev/confd_basic_5_4/examples.confd/ha/dummy/ctrl)
==31528== by 0x41BBB1: confd_init_vsn_sz (in /home/yogev/confd_basic_5_4/examples.confd/ha/dummy/ctrl)
==31528== by 0x4036E8: main (ctrl.c:256)
==31528==
==31528== 88 bytes in 1 blocks are still reachable in loss record 5 of 8
==31528== at 0x4A05FDE: malloc (vg_replace_malloc.c:236)
==31528== by 0x44438E: erl_eterm_alloc (in /home/yogev/confd_basic_5_4/examples.confd/ha/dummy/ctrl)
==31528== by 0x430477: erl_alloc_eterm (in /home/yogev/confd_basic_5_4/examples.confd/ha/dummy/ctrl)
==31528== by 0x42DDAC: erl_mk_int (in /home/yogev/confd_basic_5_4/examples.confd/ha/dummy/ctrl)
==31528== by 0x420155: ha_order_node (in /home/yogev/confd_basic_5_4/examples.confd/ha/dummy/ctrl)
==31528== by 0x402E99: bemaster (ctrl.c:128)
==31528== by 0x4037BE: main (ctrl.c:301)
==31528==
==31528== 88 bytes in 1 blocks are still reachable in loss record 6 of 8
==31528== at 0x4A05FDE: malloc (vg_replace_malloc.c:236)
==31528== by 0x44438E: erl_eterm_alloc (in /home/yogev/confd_basic_5_4/examples.confd/ha/dummy/ctrl)
==31528== by 0x430477: erl_alloc_eterm (in /home/yogev/confd_basic_5_4/examples.confd/ha/dummy/ctrl)
==31528== by 0x42E052: erl_mk_binary (in /home/yogev/confd_basic_5_4/examples.confd/ha/dummy/ctrl)
==31528== by 0x417FC7: val_to_term (in /home/yogev/confd_basic_5_4/examples.confd/ha/dummy/ctrl)
==31528== by 0x420167: ha_order_node (in /home/yogev/confd_basic_5_4/examples.confd/ha/dummy/ctrl)
==31528== by 0x402E99: bemaster (ctrl.c:128)
==31528== by 0x4037BE: main (ctrl.c:301)
==31528==
==31528== 88 bytes in 1 blocks are still reachable in loss record 7 of 8
==31528== at 0x4A05FDE: malloc (vg_replace_malloc.c:236)
==31528== by 0x44438E: erl_eterm_alloc (in /home/yogev/confd_basic_5_4/examples.confd/ha/dummy/ctrl)
==31528== by 0x430477: erl_alloc_eterm (in /home/yogev/confd_basic_5_4/examples.confd/ha/dummy/ctrl)
==31528== by 0x42DF81: erl_mk_tuple (in /home/yogev/confd_basic_5_4/examples.confd/ha/dummy/ctrl)
==31528== by 0x42017E: ha_order_node (in /home/yogev/confd_basic_5_4/examples.confd/ha/dummy/ctrl)
==31528== by 0x402E99: bemaster (ctrl.c:128)
==31528== by 0x4037BE: main (ctrl.c:301)
==31528==
==31528== 520 bytes in 1 blocks are still reachable in loss record 8 of 8
==31528== at 0x4A05FDE: malloc (vg_replace_malloc.c:236)
==31528== by 0x4A06167: realloc (vg_replace_malloc.c:525)
==31528== by 0x41DABC: get_lasterr (in /home/yogev/confd_basic_5_4/examples.confd/ha/dummy/ctrl)
==31528== by 0x41DB1A: confd_lasterr (in /home/yogev/confd_basic_5_4/examples.confd/ha/dummy/ctrl)
==31528== by 0x41DBAD: clr_confd_err (in /home/yogev/confd_basic_5_4/examples.confd/ha/dummy/ctrl)
==31528== by 0x40D527: confd_do_connect (in /home/yogev/confd_basic_5_4/examples.confd/ha/dummy/ctrl)
==31528== by 0x4139DF: confd_ha_connect (in /home/yogev/confd_basic_5_4/examples.confd/ha/dummy/ctrl)
==31528== by 0x402E6B: bemaster (ctrl.c:127)
==31528== by 0x4037BE: main (ctrl.c:301)
==31528==
==31528== LEAK SUMMARY:
==31528== definitely lost: 0 bytes in 0 blocks
==31528== indirectly lost: 0 bytes in 0 blocks
==31528== possibly lost: 0 bytes in 0 blocks
==31528== still reachable: 868 bytes in 8 blocks
==31528== suppressed: 0 bytes in 0 blocks
It happens also for “slave” and “none”…
Thanks,
Yogev.