Skip to content
This repository was archived by the owner on Mar 20, 2023. It is now read-only.

Fix memory leaks reported by valgrind #309

Open
@pramodk

Description

@pramodk

While running valgrind memory checks, I see following possible leaks:

mpirun -n 1 /gpfs/bbp.cscs.ch/ssd/apps/hpc/jenkins/deploy/tools/2020-02-01/linux-rhel7-x86_64/gcc-8.3.0/valgrind-3.15.0-wnjdwmga6k/bin/valgrind --leak-check=full bin/x86_64/special-core -e 100 -d ../tests/integration/ring --mpi --ms-phases 2 --ms-subintervals 2 --cell-permute 2
==185751== Memcheck, a memory error detector
==185751== Copyright (C) 2002-2017, and GNU GPL'd, by Julian Seward et al.
==185751== Using Valgrind-3.15.0 and LibVEX; rerun with -h for copyright info
==185751== Command: bin/x86_64/special-core -e 100 -d ../tests/integration/ring --mpi --ms-phases 2 --ms-subintervals 2 --cell-permute 2
==185751==
==185751== Warning: set address range perms: large range [0x93f1000, 0x1b8ea000) (defined)
==185751== Warning: set address range perms: large range [0x1b8ea000, 0x2dde3000) (defined)
 num_mpi=1
 num_omp_thread=1


....


 Simulation Statistics
 Number of cells: 20
 Number of compartments: 804
 Number of presyns: 21
 Number of input presyns: 0
 Number of synapses: 21
 Number of point processes: 41
 Number of transfer (gap) targets: 0
 Number of spikes: 37
 Number of spikes with non negative gid-s: 37


==185751== Warning: set address range perms: large range [0x1b8ea000, 0x2dde3000) (noaccess)
==185751== Warning: set address range perms: large range [0x93f1000, 0x1b8ea000) (noaccess)
==185751==
==185751== HEAP SUMMARY:
==185751==     in use at exit: 62,170 bytes in 132 blocks
==185751==   total heap usage: 25,772 allocs, 25,640 frees, 6,588,192 bytes allocated
==185751==
==185751== 8 bytes in 1 blocks are definitely lost in loss record 18 of 77
==185751==    at 0x4C3FA52: calloc (vg_replace_malloc.c:762)
==185751==    by 0x529FC26: coreneuron::ecalloc(unsigned long, unsigned long) (nrnoc_aux.cpp:107)
==185751==    by 0x5263A0C: coreneuron::hoc_register_prop_size(int, int, int) (register_mech.cpp:233)
==185751==    by 0x52AA9FA: coreneuron::_stim_reg() (stim.cpp:260)
==185751==    by 0x5229216: coreneuron::mk_mech(std::istream&) (mk_mech.cpp:192)
==185751==    by 0x5228892: coreneuron::mk_mech(char const*) (mk_mech.cpp:99)
==185751==    by 0x5222960: mk_mech_init (main1.cpp:430)
==185751==    by 0x4E676B4: solve_core (enginemech.cpp:38)
==185751==    by 0x4007BE: main (coreneuron.cpp:34)
==185751==
==185751== 8 bytes in 1 blocks are definitely lost in loss record 19 of 77
==185751==    at 0x4C3FA52: calloc (vg_replace_malloc.c:762)
==185751==    by 0x529FC26: coreneuron::ecalloc(unsigned long, unsigned long) (nrnoc_aux.cpp:107)
==185751==    by 0x5263A0C: coreneuron::hoc_register_prop_size(int, int, int) (register_mech.cpp:233)
==185751==    by 0x52A32EE: coreneuron::_expsyn_reg() (expsyn.cpp:277)
==185751==    by 0x5229216: coreneuron::mk_mech(std::istream&) (mk_mech.cpp:192)
==185751==    by 0x5228892: coreneuron::mk_mech(char const*) (mk_mech.cpp:99)
==185751==    by 0x5222960: mk_mech_init (main1.cpp:430)
==185751==    by 0x4E676B4: solve_core (enginemech.cpp:38)
==185751==    by 0x4007BE: main (coreneuron.cpp:34)
==185751==
==185751== 8 bytes in 1 blocks are definitely lost in loss record 20 of 77
==185751==    at 0x4C3FA52: calloc (vg_replace_malloc.c:762)
==185751==    by 0x529FC26: coreneuron::ecalloc(unsigned long, unsigned long) (nrnoc_aux.cpp:107)
==185751==    by 0x5263A0C: coreneuron::hoc_register_prop_size(int, int, int) (register_mech.cpp:233)
==185751==    by 0x52A44BA: coreneuron::_exp2syn_reg() (exp2syn.cpp:292)
==185751==    by 0x5229216: coreneuron::mk_mech(std::istream&) (mk_mech.cpp:192)
==185751==    by 0x5228892: coreneuron::mk_mech(char const*) (mk_mech.cpp:99)
==185751==    by 0x5222960: mk_mech_init (main1.cpp:430)
==185751==    by 0x4E676B4: solve_core (enginemech.cpp:38)
==185751==    by 0x4007BE: main (coreneuron.cpp:34)
==185751==
==185751== 8 bytes in 1 blocks are definitely lost in loss record 21 of 77
==185751==    at 0x4C3FA52: calloc (vg_replace_malloc.c:762)
==185751==    by 0x529FC26: coreneuron::ecalloc(unsigned long, unsigned long) (nrnoc_aux.cpp:107)
==185751==    by 0x5263A0C: coreneuron::hoc_register_prop_size(int, int, int) (register_mech.cpp:233)
==185751==    by 0x4E67B4A: coreneuron::_halfgap_reg() (halfgap.cpp:254)
==185751==    by 0x4E6782F: coreneuron::modl_reg() (_mod_func.cpp:14)
==185751==    by 0x4E676B9: solve_core (enginemech.cpp:39)
==185751==    by 0x4007BE: main (coreneuron.cpp:34)
==185751==
==185751== 8 bytes in 2 blocks are definitely lost in loss record 22 of 77
==185751==    at 0x4C3FA52: calloc (vg_replace_malloc.c:762)
==185751==    by 0x529FC26: coreneuron::ecalloc(unsigned long, unsigned long) (nrnoc_aux.cpp:107)
==185751==    by 0x5263A0C: coreneuron::hoc_register_prop_size(int, int, int) (register_mech.cpp:233)
==185751==    by 0x525D211: coreneuron::ion_reg(char const*, double) (eion.cpp:140)
==185751==    by 0x52290EA: coreneuron::mk_mech(std::istream&) (mk_mech.cpp:175)
==185751==    by 0x5228892: coreneuron::mk_mech(char const*) (mk_mech.cpp:99)
==185751==    by 0x5222960: mk_mech_init (main1.cpp:430)
==185751==    by 0x4E676B4: solve_core (enginemech.cpp:38)
==185751==    by 0x4007BE: main (coreneuron.cpp:34)
==185751==
==185751== 16 bytes in 1 blocks are definitely lost in loss record 28 of 77
==185751==    at 0x4C3FA52: calloc (vg_replace_malloc.c:762)
==185751==    by 0x529FC26: coreneuron::ecalloc(unsigned long, unsigned long) (nrnoc_aux.cpp:107)
==185751==    by 0x5263A0C: coreneuron::hoc_register_prop_size(int, int, int) (register_mech.cpp:233)
==185751==    by 0x52A7E9C: coreneuron::_netstim_reg() (netstim.cpp:300)
==185751==    by 0x5229216: coreneuron::mk_mech(std::istream&) (mk_mech.cpp:192)
==185751==    by 0x5228892: coreneuron::mk_mech(char const*) (mk_mech.cpp:99)
==185751==    by 0x5222960: mk_mech_init (main1.cpp:430)
==185751==    by 0x4E676B4: solve_core (enginemech.cpp:38)
==185751==    by 0x4007BE: main (coreneuron.cpp:34)
==185751==
==185751== 24 bytes in 1 blocks are definitely lost in loss record 30 of 77
==185751==    at 0x4C3FA52: calloc (vg_replace_malloc.c:762)
==185751==    by 0x529FC26: coreneuron::ecalloc(unsigned long, unsigned long) (nrnoc_aux.cpp:107)
==185751==    by 0x5263A0C: coreneuron::hoc_register_prop_size(int, int, int) (register_mech.cpp:233)
==185751==    by 0x52A5D82: coreneuron::_hh_reg() (hh.cpp:312)
==185751==    by 0x5229216: coreneuron::mk_mech(std::istream&) (mk_mech.cpp:192)
==185751==    by 0x5228892: coreneuron::mk_mech(char const*) (mk_mech.cpp:99)
==185751==    by 0x5222960: mk_mech_init (main1.cpp:430)
==185751==    by 0x4E676B4: solve_core (enginemech.cpp:38)
==185751==    by 0x4007BE: main (coreneuron.cpp:34)
==185751==

==185751==
==185751== 202 bytes in 23 blocks are definitely lost in loss record 59 of 77
==185751==    at 0x4C3D803: malloc (vg_replace_malloc.c:309)
==185751==    by 0x699E249: strdup (in /usr/lib64/libc-2.17.so)
==185751==    by 0x5228F31: coreneuron::mk_mech(std::istream&) (mk_mech.cpp:161)
==185751==    by 0x5228892: coreneuron::mk_mech(char const*) (mk_mech.cpp:99)
==185751==    by 0x5222960: mk_mech_init (main1.cpp:430)
==185751==    by 0x4E676B4: solve_core (enginemech.cpp:38)
==185751==    by 0x4007BE: main (coreneuron.cpp:34)
==185751==
==185751== 644 (288 direct, 356 indirect) bytes in 1 blocks are definitely lost in loss record 65 of 77
==185751==    at 0x4C3D803: malloc (vg_replace_malloc.c:309)
==185751==    by 0x57C48C6: ompi_datatype_create (in /gpfs/bbp.cscs.ch/project/proj16/kumbhar/pramod_scratch/soft/install/linux-rhel7-x86_64/gcc-8.3.0/openmpi-4.0.0-voln3w/lib/libmpi.so.40.20.0)
==185751==    by 0x57C5157: ompi_datatype_create_struct (in /gpfs/bbp.cscs.ch/project/proj16/kumbhar/pramod_scratch/soft/install/linux-rhel7-x86_64/gcc-8.3.0/openmpi-4.0.0-voln3w/lib/libmpi.so.40.20.0)
==185751==    by 0x57F4442: PMPI_Type_create_struct (in /gpfs/bbp.cscs.ch/project/proj16/kumbhar/pramod_scratch/soft/install/linux-rhel7-x86_64/gcc-8.3.0/openmpi-4.0.0-voln3w/lib/libmpi.so.40.20.0)
==185751==    by 0x526C8E7: coreneuron::make_spike_type() (mpispike.cpp:72)
==185751==    by 0x526C917: coreneuron::nrnmpi_spike_initialize() (mpispike.cpp:79)
==185751==    by 0x526E2AF: coreneuron::nrnmpi_init(int, int*, char***) (nrnmpi.cpp:119)
==185751==    by 0x522287A: mk_mech_init (main1.cpp:411)
==185751==    by 0x4E676B4: solve_core (enginemech.cpp:38)
==185751==    by 0x4007BE: main (coreneuron.cpp:34)
==185751==
==185751== 1,344 bytes in 1 blocks are definitely lost in loss record 70 of 77
==185751==    at 0x4C3D803: malloc (vg_replace_malloc.c:309)
==185751==    by 0x57B133F: ompi_op_create_user (in /gpfs/bbp.cscs.ch/project/proj16/kumbhar/pramod_scratch/soft/install/linux-rhel7-x86_64/gcc-8.3.0/openmpi-4.0.0-voln3w/lib/libmpi.so.40.20.0)
==185751==    by 0x57E8728: PMPI_Op_create (in /gpfs/bbp.cscs.ch/project/proj16/kumbhar/pramod_scratch/soft/install/linux-rhel7-x86_64/gcc-8.3.0/openmpi-4.0.0-voln3w/lib/libmpi.so.40.20.0)
==185751==    by 0x526C90B: coreneuron::make_spike_type() (mpispike.cpp:75)
==185751==    by 0x526C917: coreneuron::nrnmpi_spike_initialize() (mpispike.cpp:79)
==185751==    by 0x526E2AF: coreneuron::nrnmpi_init(int, int*, char***) (nrnmpi.cpp:119)
==185751==    by 0x522287A: mk_mech_init (main1.cpp:411)
==185751==    by 0x4E676B4: solve_core (enginemech.cpp:38)
==185751==    by 0x4007BE: main (coreneuron.cpp:34)
==185751==
==185751== 1,448 (72 direct, 1,376 indirect) bytes in 1 blocks are definitely lost in loss record 71 of 77
==185751==    at 0x4C3D803: malloc (vg_replace_malloc.c:309)
==185751==    by 0x57973A3: ompi_comm_set_nb (in /gpfs/bbp.cscs.ch/project/proj16/kumbhar/pramod_scratch/soft/install/linux-rhel7-x86_64/gcc-8.3.0/openmpi-4.0.0-voln3w/lib/libmpi.so.40.20.0)
==185751==    by 0x57975F6: ompi_comm_set (in /gpfs/bbp.cscs.ch/project/proj16/kumbhar/pramod_scratch/soft/install/linux-rhel7-x86_64/gcc-8.3.0/openmpi-4.0.0-voln3w/lib/libmpi.so.40.20.0)
==185751==    by 0x57976A7: ompi_comm_dup_with_info (in /gpfs/bbp.cscs.ch/project/proj16/kumbhar/pramod_scratch/soft/install/linux-rhel7-x86_64/gcc-8.3.0/openmpi-4.0.0-voln3w/lib/libmpi.so.40.20.0)
==185751==    by 0x57D083F: PMPI_Comm_dup (in /gpfs/bbp.cscs.ch/project/proj16/kumbhar/pramod_scratch/soft/install/linux-rhel7-x86_64/gcc-8.3.0/openmpi-4.0.0-voln3w/lib/libmpi.so.40.20.0)
==185751==    by 0x526E12A: coreneuron::nrnmpi_init(int, int*, char***) (nrnmpi.cpp:112)
==185751==    by 0x522287A: mk_mech_init (main1.cpp:411)
==185751==    by 0x4E676B4: solve_core (enginemech.cpp:38)
==185751==    by 0x4007BE: main (coreneuron.cpp:34)
==185751==
==185751== 1,448 (72 direct, 1,376 indirect) bytes in 1 blocks are definitely lost in loss record 72 of 77
==185751==    at 0x4C3D803: malloc (vg_replace_malloc.c:309)
==185751==    by 0x57973A3: ompi_comm_set_nb (in /gpfs/bbp.cscs.ch/project/proj16/kumbhar/pramod_scratch/soft/install/linux-rhel7-x86_64/gcc-8.3.0/openmpi-4.0.0-voln3w/lib/libmpi.so.40.20.0)
==185751==    by 0x57975F6: ompi_comm_set (in /gpfs/bbp.cscs.ch/project/proj16/kumbhar/pramod_scratch/soft/install/linux-rhel7-x86_64/gcc-8.3.0/openmpi-4.0.0-voln3w/lib/libmpi.so.40.20.0)
==185751==    by 0x57976A7: ompi_comm_dup_with_info (in /gpfs/bbp.cscs.ch/project/proj16/kumbhar/pramod_scratch/soft/install/linux-rhel7-x86_64/gcc-8.3.0/openmpi-4.0.0-voln3w/lib/libmpi.so.40.20.0)
==185751==    by 0x57D083F: PMPI_Comm_dup (in /gpfs/bbp.cscs.ch/project/proj16/kumbhar/pramod_scratch/soft/install/linux-rhel7-x86_64/gcc-8.3.0/openmpi-4.0.0-voln3w/lib/libmpi.so.40.20.0)
==185751==    by 0x526E16E: coreneuron::nrnmpi_init(int, int*, char***) (nrnmpi.cpp:113)
==185751==    by 0x522287A: mk_mech_init (main1.cpp:411)
==185751==    by 0x4E676B4: solve_core (enginemech.cpp:38)
==185751==    by 0x4007BE: main (coreneuron.cpp:34)
==185751==
==185751== 1,448 (72 direct, 1,376 indirect) bytes in 1 blocks are definitely lost in loss record 73 of 77
==185751==    at 0x4C3D803: malloc (vg_replace_malloc.c:309)
==185751==    by 0x57973A3: ompi_comm_set_nb (in /gpfs/bbp.cscs.ch/project/proj16/kumbhar/pramod_scratch/soft/install/linux-rhel7-x86_64/gcc-8.3.0/openmpi-4.0.0-voln3w/lib/libmpi.so.40.20.0)
==185751==    by 0x57975F6: ompi_comm_set (in /gpfs/bbp.cscs.ch/project/proj16/kumbhar/pramod_scratch/soft/install/linux-rhel7-x86_64/gcc-8.3.0/openmpi-4.0.0-voln3w/lib/libmpi.so.40.20.0)
==185751==    by 0x57976A7: ompi_comm_dup_with_info (in /gpfs/bbp.cscs.ch/project/proj16/kumbhar/pramod_scratch/soft/install/linux-rhel7-x86_64/gcc-8.3.0/openmpi-4.0.0-voln3w/lib/libmpi.so.40.20.0)
==185751==    by 0x57D083F: PMPI_Comm_dup (in /gpfs/bbp.cscs.ch/project/proj16/kumbhar/pramod_scratch/soft/install/linux-rhel7-x86_64/gcc-8.3.0/openmpi-4.0.0-voln3w/lib/libmpi.so.40.20.0)
==185751==    by 0x526E1B2: coreneuron::nrnmpi_init(int, int*, char***) (nrnmpi.cpp:114)
==185751==    by 0x522287A: mk_mech_init (main1.cpp:411)
==185751==    by 0x4E676B4: solve_core (enginemech.cpp:38)
==185751==    by 0x4007BE: main (coreneuron.cpp:34)
==185751==
==185751== LEAK SUMMARY:
==185751==    definitely lost: 2,514 bytes in 42 blocks
==185751==    indirectly lost: 4,484 bytes in 24 blocks
==185751==      possibly lost: 0 bytes in 0 blocks
==185751==    still reachable: 55,172 bytes in 66 blocks
==185751==                       of which reachable via heuristic:
==185751==                         newarray           : 392 bytes in 3 blocks
==185751==         suppressed: 0 bytes in 0 blocks
==185751== Reachable blocks (those to which a pointer was found) are not shown.
==185751== To see them, rerun with: --leak-check=full --show-leak-kinds=all
==185751==
==185751== For lists of detected and suppressed errors, rerun with: -s
==185751== ERROR SUMMARY: 19 errors from 19 contexts (suppressed: 0 from 0)

Metadata

Metadata

Assignees

Labels

Type

No type

Projects

No projects

Relationships

None yet

Development

No branches or pull requests

Issue actions