Ticket #14 (new defect)

Opened 8 months ago

Last modified 4 months ago

libgis and libvect memory leaks

Reported by: neteler Assigned to: grass-dev@lists.osgeo.org
Priority: major Milestone: 6.4.0
Component: default Version: svn-trunk
Keywords: library Cc: neteler
Platform: CPU:

Description

It seems that v.distance has a memory leak when run in LatLong? locations (version from today):

GRASS 6.3.svn (latlong_sphere):~ > CMD="v.distance -p -a coordinate_all_flocks_map to=coordinate_all_flocks_map upload=dist col=distance"
GRASS 6.3.svn (latlong_sphere):~ > valgrind --tool=memcheck --leak-check=yes --show-reachable=yes  $CMD --o
==7781== Memcheck, a memory error detector.
==7781== Copyright (C) 2002-2007, and GNU GPL'd, by Julian Seward et al.
==7781== Using LibVEX rev 1732, a library for dynamic binary translation.
==7781== Copyright (C) 2004-2007, and GNU GPL'd, by OpenWorks LLP.
==7781== Using valgrind-3.2.3, a dynamic binary instrumentation framework.
==7781== Copyright (C) 2000-2007, and GNU GPL'd, by Julian Seward et al.
==7781== For more details, rerun with: -v
==7781==
 ==7781==
==7781== ERROR SUMMARY: 0 errors from 0 contexts (suppressed: 3 from 2)
==7781== malloc/free: in use at exit: 61,509,846 bytes in 2,220,194 blocks.
==7781== malloc/free: 2,708,254 allocs, 488,060 frees, 2,338,934,443 bytes allocated.
==7781== For counts of detected errors, rerun with: -v
==7781== searching for pointers to 2,220,194 not-freed blocks.
==7781== checked 12,072,696 bytes.
==7781==
==7781== 1 bytes in 1 blocks are still reachable in loss record 1 of 28
==7781==    at 0x4C201A5: operator new(unsigned long) (in /usr/lib64/valgrind/amd64-linux/vgpreload_memcheck.so)
==7781==    by 0x745EC92: __static_initialization_and_destruction_0(int, int) (PlanarGraph.cpp:24)
==7781==    by 0x74A5E15: (within /home/usr_local/lib/libgeos.so.2.2.3)
==7781==    by 0x7429AAA: (within /home/usr_local/lib/libgeos.so.2.2.3)
==7781==
==7781==
==7781== 1 bytes in 1 blocks are still reachable in loss record 2 of 28
==7781==    at 0x4C201A5: operator new(unsigned long) (in /usr/lib64/valgrind/amd64-linux/vgpreload_memcheck.so)
==7781==    by 0x747AE94: __static_initialization_and_destruction_0(int, int) (GeometryGraphOperation.cpp:21)
==7781==    by 0x74A5E15: (within /home/usr_local/lib/libgeos.so.2.2.3)
==7781==    by 0x7429AAA: (within /home/usr_local/lib/libgeos.so.2.2.3)
==7781==
==7781==
==7781== 8 bytes in 1 blocks are still reachable in loss record 3 of 28
==7781==    at 0x4C201A5: operator new(unsigned long) (in /usr/lib64/valgrind/amd64-linux/vgpreload_memcheck.so)
==7781==    by 0x748D943: __static_initialization_and_destruction_0(int, int) (RelateComputer.cpp:48)
==7781==    by 0x74A5E15: (within /home/usr_local/lib/libgeos.so.2.2.3)
==7781==    by 0x7429AAA: (within /home/usr_local/lib/libgeos.so.2.2.3)
==7781==
==7781==
==7781== 24 bytes in 1 blocks are still reachable in loss record 4 of 28
==7781==    at 0x4C201A5: operator new(unsigned long) (in /usr/lib64/valgrind/amd64-linux/vgpreload_memcheck.so)
==7781==    by 0x743A508: geos::GeometryFactory::GeometryFactory() (GeometryFactory.cpp:29)
==7781==    by 0x74356D4: __static_initialization_and_destruction_0(int, int) (Geometry.cpp:129)
==7781==    by 0x74A5E15: (within /home/usr_local/lib/libgeos.so.2.2.3)
==7781==    by 0x7429AAA: (within /home/usr_local/lib/libgeos.so.2.2.3)
==7781==
==7781==
==7781== 32 bytes in 1 blocks are still reachable in loss record 5 of 28
==7781==    at 0x4C201A5: operator new(unsigned long) (in /usr/lib64/valgrind/amd64-linux/vgpreload_memcheck.so)
==7781==    by 0x74356C9: __static_initialization_and_destruction_0(int, int) (Geometry.cpp:129)
==7781==    by 0x74A5E15: (within /home/usr_local/lib/libgeos.so.2.2.3)
==7781==    by 0x7429AAA: (within /home/usr_local/lib/libgeos.so.2.2.3)
==7781==
==7781==
==7781== 32 bytes in 1 blocks are still reachable in loss record 6 of 28
==7781==    at 0x4C201A5: operator new(unsigned long) (in /usr/lib64/valgrind/amd64-linux/vgpreload_memcheck.so)
==7781==    by 0x746AC92: __static_initialization_and_destruction_0(int, int) (QuadTreeRoot.cpp:26)
==7781==    by 0x74A5E15: (within /home/usr_local/lib/libgeos.so.2.2.3)
==7781==    by 0x7429AAA: (within /home/usr_local/lib/libgeos.so.2.2.3)
==7781==
==7781==
==7781== 48 bytes in 1 blocks are still reachable in loss record 7 of 28
==7781==    at 0x4C201A5: operator new(unsigned long) (in /usr/lib64/valgrind/amd64-linux/vgpreload_memcheck.so)
==7781==    by 0x74A4E04: __static_initialization_and_destruction_0(int, int) (Profiler.cpp:20)
==7781==    by 0x74A5E15: (within /home/usr_local/lib/libgeos.so.2.2.3)
==7781==    by 0x7429AAA: (within /home/usr_local/lib/libgeos.so.2.2.3)
==7781==
==7781==
==7781== 96 bytes in 3 blocks are still reachable in loss record 8 of 28
==7781==    at 0x4C1F996: malloc (in /usr/lib64/valgrind/amd64-linux/vgpreload_memcheck.so)
==7781==    by 0x4E46140: Vect__new_line_struct (line.c:50)
==7781==    by 0x4E4610C: Vect_new_line_struct (line.c:39)
==7781==    by 0x403583: main (main.c:420)
==7781==
==7781==
==7781== 232 bytes in 5 blocks are still reachable in loss record 9 of 28
==7781==    at 0x4C1ECBF: calloc (in /usr/lib64/valgrind/amd64-linux/vgpreload_memcheck.so)
==7781==    by 0x5289B5D: G_calloc (alloc.c:72)
==7781==    by 0x52ACF99: G_parser (parser.c:754)
==7781==    by 0x4028A1: main (main.c:212)
==7781==
==7781==
==7781== 304 bytes in 1 blocks are still reachable in loss record 10 of 28
==7781==    at 0x4C201A5: operator new(unsigned long) (in /usr/lib64/valgrind/amd64-linux/vgpreload_memcheck.so)
==7781==    by 0x747AEA8: __static_initialization_and_destruction_0(int, int) (GeometryGraphOperation.cpp:22)
==7781==    by 0x74A5E15: (within /home/usr_local/lib/libgeos.so.2.2.3)
==7781==    by 0x7429AAA: (within /home/usr_local/lib/libgeos.so.2.2.3)
==7781==
==7781==
==7781== 304 bytes in 1 blocks are still reachable in loss record 11 of 28
==7781==    at 0x4C201A5: operator new(unsigned long) (in /usr/lib64/valgrind/amd64-linux/vgpreload_memcheck.so)
==7781==    by 0x748D924: __static_initialization_and_destruction_0(int, int) (RelateComputer.cpp:47)
==7781==    by 0x74A5E15: (within /home/usr_local/lib/libgeos.so.2.2.3)
==7781==    by 0x7429AAA: (within /home/usr_local/lib/libgeos.so.2.2.3)
==7781==
==7781==
==7781== 556 bytes in 12 blocks are possibly lost in loss record 12 of 28
==7781==    at 0x4C201A5: operator new(unsigned long) (in /usr/lib64/valgrind/amd64-linux/vgpreload_memcheck.so)
==7781==    by 0x9E8F530: std::string::_Rep::_S_create(unsigned long, unsigned long, std::allocator<char> const&) (in /usr/lib64/libstdc++.so.6.0.8)
==7781==    by 0x9E90034: (within /usr/lib64/libstdc++.so.6.0.8)
==7781==    by 0x9E901E1: std::string::string(char const*, std::allocator<char> const&) (in /usr/lib64/libstdc++.so.6.0.8)
==7781==    by 0x749398B: __static_initialization_and_destruction_0(int, int) (TopologyValidationError.cpp:33)
==7781==    by 0x74A5E15: (within /home/usr_local/lib/libgeos.so.2.2.3)
==7781==    by 0x7429AAA: (within /home/usr_local/lib/libgeos.so.2.2.3)
==7781==
==7781==
==7781== 568 bytes in 1 blocks are still reachable in loss record 13 of 28
==7781==    at 0x4C1F996: malloc (in /usr/lib64/valgrind/amd64-linux/vgpreload_memcheck.so)
==7781==    by 0x6EE18A9: (within /lib64/libc-2.4.so)
==7781==    by 0x52A4B57: G_read_key_value_file (key_value3.c:25)
==7781==    by 0x529DAF2: G_get_ellipsoid_parameters (get_ellipse.c:78)
==7781==    by 0x52976AD: G_begin_distance_calculations (distance.c:51)
==7781==    by 0x4E47687: Vect_line_geodesic_length (line.c:526)
==7781==    by 0x403C41: main (main.c:518)
==7781==
==7781==
==7781== 960 bytes in 2 blocks are still reachable in loss record 14 of 28
==7781==    at 0x4C1F996: malloc (in /usr/lib64/valgrind/amd64-linux/vgpreload_memcheck.so)
==7781==    by 0x5289BC7: G_realloc (alloc.c:106)
==7781==    by 0x4E3CCFC: Vect_add_dblink (field.c:198)
==7781==    by 0x4E3DA70: Vect_read_dblinks (field.c:550)
==7781==    by 0x4E4E30A: Vect__open_old (open.c:313)
==7781==    by 0x4E4E5D2: Vect_open_old (open.c:385)
==7781==    by 0x402EE8: main (main.c:290)
==7781==
==7781==
==7781== 2,272 bytes in 4 blocks are still reachable in loss record 15 of 28
==7781==    at 0x4C1F996: malloc (in /usr/lib64/valgrind/amd64-linux/vgpreload_memcheck.so)
==7781==    by 0x6EE11D5: fdopen (in /lib64/libc-2.4.so)
==7781==    by 0x52A9953: G_fopen_old (open.c:263)
==7781==    by 0x4E4F211: V1_open_old_nat (open_nat.c:45)
==7781==    by 0x4E4E105: Vect__open_old (open.c:267)
==7781==    by 0x4E4E5D2: Vect_open_old (open.c:385)
==7781==    by 0x402EE8: main (main.c:290)
==7781==
==7781==
==7781== 3,748 bytes in 14 blocks are still reachable in loss record 16 of 28
==7781==    at 0x4C1ECBF: calloc (in /usr/lib64/valgrind/amd64-linux/vgpreload_memcheck.so)
==7781==    by 0x5D327DE: dig__alloc_space (allocation.c:93)
==7781==    by 0x5D3C70D: buf_alloc (portable.c:58)
==7781==    by 0x5D3C9DE: dig__fread_port_L (portable.c:170)
==7781==    by 0x5D3B621: dig_Rd_Plus_head (plus_struct.c:556)
==7781==    by 0x4E4EED4: Vect_open_topo (open.c:693)
==7781==    by 0x4E4DEEB: Vect__open_old (open.c:212)
==7781==    by 0x4E4E5D2: Vect_open_old (open.c:385)
==7781==    by 0x402EE8: main (main.c:290)
==7781==
==7781==
==7781== 6,144 bytes in 12 blocks are definitely lost in loss record 17 of 28
==7781==    at 0x4C1F996: malloc (in /usr/lib64/valgrind/amd64-linux/vgpreload_memcheck.so)
==7781==    by 0x5F47502: RTreeNewNode (node.c:47)
==7781==    by 0x5F46608: RTreeNewIndex (index.c:27)
==7781==    by 0x5D3E3B2: dig_spidx_init (spindex.c:38)
==7781==    by 0x5D36BA0: dig_init_plus (plus.c:112)
==7781==    by 0x4E4DA6A: Vect__open_old (open.c:137)
==7781==    by 0x4E4E5D2: Vect_open_old (open.c:385)
==7781==    by 0x402EE8: main (main.c:290)
==7781==
==7781==
==7781== 7,280 bytes in 7 blocks are still reachable in loss record 18 of 28
==7781==    at 0x4C1ECBF: calloc (in /usr/lib64/valgrind/amd64-linux/vgpreload_memcheck.so)
==7781==    by 0x6EB6837: (within /lib64/libc-2.4.so)
==7781==    by 0x6EB6890: __cxa_atexit (in /lib64/libc-2.4.so)
==7781==    by 0x74A5E15: (within /home/usr_local/lib/libgeos.so.2.2.3)
==7781==    by 0x7429AAA: (within /home/usr_local/lib/libgeos.so.2.2.3)
==7781==
==7781==
==7781== 8,060 bytes in 149 blocks are possibly lost in loss record 19 of 28
==7781==    at 0x4C1F996: malloc (in /usr/lib64/valgrind/amd64-linux/vgpreload_memcheck.so)
==7781==    by 0x5289AE7: G_malloc (alloc.c:39)
==7781==    by 0x52A450B: G_set_key_value (key_value1.c:51)
==7781==    by 0x52A4A5F: G_fread_key_value (key_value2.c:45)
==7781==    by 0x52A4B7F: G_read_key_value_file (key_value3.c:31)
==7781==    by 0x529DAF2: G_get_ellipsoid_parameters (get_ellipse.c:78)
==7781==    by 0x52976AD: G_begin_distance_calculations (distance.c:51)
==7781==    by 0x4E47687: Vect_line_geodesic_length (line.c:526)
==7781==    by 0x403D6B: main (main.c:523)
==7781==
==7781==
==7781== 32,000 bytes in 2 blocks are still reachable in loss record 20 of 28
==7781==    at 0x4C1FA97: realloc (in /usr/lib64/valgrind/amd64-linux/vgpreload_memcheck.so)
==7781==    by 0x5D3683F: dig_list_add (list.c:44)
==7781==    by 0x5D3EBC0: _add_item (spindex.c:299)
==7781==    by 0x5F4681F: RTreeSearch (index.c:66)
==7781==    by 0x5F46766: RTreeSearch (index.c:55)
==7781==    by 0x5F46766: RTreeSearch (index.c:55)
==7781==    by 0x5F46766: RTreeSearch (index.c:55)
==7781==    by 0x5F46766: RTreeSearch (index.c:55)
==7781==    by 0x5D3EDB6: dig_select_lines (spindex.c:376)
==7781==    by 0x4E542F4: Vect_select_lines_by_box (select.c:54)
==7781==    by 0x4039BA: main (main.c:496)
==7781==
==7781==
==7781== 91,898 bytes in 821 blocks are still reachable in loss record 21 of 28
==7781==    at 0x4C1F996: malloc (in /usr/lib64/valgrind/amd64-linux/vgpreload_memcheck.so)
==7781==    by 0x5289AE7: G_malloc (alloc.c:39)
==7781==    by 0x52C32BD: G_store (store.c:36)
==7781==    by 0x52B5BE9: G_set_program_name (progrm_nme.c:53)
==7781==    by 0x52A1B5A: G_gisinit (gisinit.c:46)
==7781==    by 0x402330: main (main.c:106)
==7781==
==7781==
==7781== 207,872 bytes in 12,996 blocks are still reachable in loss record 22 of 28
==7781==    at 0x4C1F996: malloc (in /usr/lib64/valgrind/amd64-linux/vgpreload_memcheck.so)
==7781==    by 0x4C1FA10: realloc (in /usr/lib64/valgrind/amd64-linux/vgpreload_memcheck.so)
==7781==    by 0x5D3FF34: dig_alloc_nodes (struct_alloc.c:98)
==7781==    by 0x5D37072: dig_load_plus (plus.c:320)
==7781==    by 0x4E4EFC3: Vect_open_topo (open.c:720)
==7781==    by 0x4E4DEEB: Vect__open_old (open.c:212)
==7781==    by 0x4E4E5D2: Vect_open_old (open.c:385)
==7781==    by 0x402EE8: main (main.c:290)
==7781==
==7781==
==7781== 311,712 bytes in 6,494 blocks are still reachable in loss record 23 of 28
==7781==    at 0x4C1F996: malloc (in /usr/lib64/valgrind/amd64-linux/vgpreload_memcheck.so)
==7781==    by 0x5D3FDE5: dig_alloc_node (struct_alloc.c:46)
==7781==    by 0x5D3A080: dig_Rd_P_node (plus_struct.c:72)
==7781==    by 0x5D3708B: dig_load_plus (plus.c:323)
==7781==    by 0x4E4EFC3: Vect_open_topo (open.c:720)
==7781==    by 0x4E4DEEB: Vect__open_old (open.c:212)
==7781==    by 0x4E4E5D2: Vect_open_old (open.c:385)
==7781==    by 0x402EE8: main (main.c:290)
==7781==
==7781==
==7781== 519,520 bytes in 6,494 blocks are still reachable in loss record 24 of 28
==7781==    at 0x4C1F996: malloc (in /usr/lib64/valgrind/amd64-linux/vgpreload_memcheck.so)
==7781==    by 0x5D3FF85: dig_alloc_line (struct_alloc.c:112)
==7781==    by 0x5D3A447: dig_Rd_P_line (plus_struct.c:177)
==7781==    by 0x5D37130: dig_load_plus (plus.c:334)
==7781==    by 0x4E4EFC3: Vect_open_topo (open.c:720)
==7781==    by 0x4E4DEEB: Vect__open_old (open.c:212)
==7781==    by 0x4E4E5D2: Vect_open_old (open.c:385)
==7781==    by 0x402EE8: main (main.c:290)
==7781==
==7781==
==7781== 614,400 bytes in 1,200 blocks are still reachable in loss record 25 of 28
==7781==    at 0x4C1F996: malloc (in /usr/lib64/valgrind/amd64-linux/vgpreload_memcheck.so)
==7781==    by 0x5F47502: RTreeNewNode (node.c:47)
==7781==    by 0x5F46608: RTreeNewIndex (index.c:27)
==7781==    by 0x5D3E3B2: dig_spidx_init (spindex.c:38)
==7781==    by 0x5D36BA0: dig_init_plus (plus.c:112)
==7781==    by 0x5D36FE4: dig_load_plus (plus.c:306)
==7781==    by 0x4E4EFC3: Vect_open_topo (open.c:720)
==7781==    by 0x4E4DEEB: Vect__open_old (open.c:212)
==7781==    by 0x4E4E5D2: Vect_open_old (open.c:385)
==7781==    by 0x402EE8: main (main.c:290)
==7781==
==7781==
==7781== 42,133,423 bytes in 1,948,340 blocks are indirectly lost in loss record 26 of 28
==7781==    at 0x4C1F996: malloc (in /usr/lib64/valgrind/amd64-linux/vgpreload_memcheck.so)
==7781==    by 0x5289AE7: G_malloc (alloc.c:39)
==7781==    by 0x52A465E: G_set_key_value (key_value1.c:78)
==7781==    by 0x52A4A5F: G_fread_key_value (key_value2.c:45)
==7781==    by 0x52A4B7F: G_read_key_value_file (key_value3.c:31)
==7781==    by 0x529DAF2: G_get_ellipsoid_parameters (get_ellipse.c:78)
==7781==    by 0x52976AD: G_begin_distance_calculations (distance.c:51)
==7781==    by 0x4E47687: Vect_line_geodesic_length (line.c:526)
==7781==    by 0x403C41: main (main.c:518)
==7781==
==7781==
==7781== 47,984,046 (5,850,623 direct, 42,133,423 indirect) bytes in 243,626 blocks are definitely lost in loss record 27 of 28
==7781==    at 0x4C1F996: malloc (in /usr/lib64/valgrind/amd64-linux/vgpreload_memcheck.so)
==7781==    by 0x5289AE7: G_malloc (alloc.c:39)
==7781==    by 0x52A43E9: G_create_key_value (key_value1.c:10)
==7781==    by 0x52A49D6: G_fread_key_value (key_value2.c:32)
==7781==    by 0x52A4B7F: G_read_key_value_file (key_value3.c:31)
==7781==    by 0x529DAF2: G_get_ellipsoid_parameters (get_ellipse.c:78)
==7781==    by 0x52976AD: G_begin_distance_calculations (distance.c:51)
==7781==    by 0x4E47687: Vect_line_geodesic_length (line.c:526)
==7781==    by 0x403C41: main (main.c:518)
==7781==
==7781==
==7781== 11,717,728 bytes in 3 blocks are still reachable in loss record 28 of 28
==7781==    at 0x4C1FA97: realloc (in /usr/lib64/valgrind/amd64-linux/vgpreload_memcheck.so)
==7781==    by 0x5289BDA: G_realloc (alloc.c:107)
==7781==    by 0x5298613: set_env (env.c:182)
==7781==    by 0x529839C: read_env (env.c:126)
==7781==    by 0x5298C70: G__getenv (env.c:311)
==7781==    by 0x5298B9E: G_getenv (env.c:287)
==7781==    by 0x52A69DC: G_location (location.c:71)
==7781==    by 0x52A69F3: G__location_path (location.c:81)
==7781==    by 0x52A6980: G_location_path (location.c:45)
==7781==    by 0x52A1B5F: G_gisinit (gisinit.c:49)
==7781==    by 0x402330: main (main.c:106)
==7781==
==7781== LEAK SUMMARY:
==7781==    definitely lost: 5,856,767 bytes in 243,638 blocks.
==7781==    indirectly lost: 42,133,423 bytes in 1,948,340 blocks.
==7781==      possibly lost: 8,616 bytes in 161 blocks.
==7781==    still reachable: 13,511,040 bytes in 28,055 blocks.
==7781==         suppressed: 0 bytes in 0 blocks.

GRASS 6.3.svn (latlong_sphere):~ > 

Change History

01/09/08 12:41:39 changed by martinl

  • keywords set to library.
  • owner changed from grass-dev@lists.osgeo.org to martinl.
  • cc set to neteler@osgeo.org.

Now fixed in trunk, [29640]

Martin

(follow-up: ↓ 3 ) 01/14/08 04:58:17 changed by neteler

  • summary changed from v.distance: memory leak in LatLong? to libgis and libvect memory leaks.

This helped, thanks for the fix. But I still observe memory leaks:

...

==10880== 16,294 bytes in 125 blocks are still reachable in loss record 19 of 24
==10880==    at 0x4C1F996: malloc (in /usr/lib64/valgrind/amd64-linux/vgpreload_memcheck.so)
==10880==    by 0x5289AE7: G_malloc (alloc.c:39)
==10880==    by 0x52C3229: G_store (store.c:36)
==10880==    by 0x52B5B55: G_set_program_name (progrm_nme.c:53)
==10880==    by 0x52A1AC6: G_gisinit (gisinit.c:46)
==10880==    by 0x402370: main (main.c:106)
==10880==
==10880==
==10880== 40,064 bytes in 2,010 blocks are still reachable in loss record 20 of 24
==10880==    at 0x4C1F996: malloc (in /usr/lib64/valgrind/amd64-linux/vgpreload_memcheck.so)
==10880==    by 0x4C1FA10: realloc (in /usr/lib64/valgrind/amd64-linux/vgpreload_memcheck.so)
==10880==    by 0x5D3FF34: dig_alloc_nodes (struct_alloc.c:98)
==10880==    by 0x5D37072: dig_load_plus (plus.c:320)
==10880==    by 0x4E4EFC3: Vect_open_topo (open.c:720)
==10880==    by 0x4E4DEEB: Vect__open_old (open.c:212)
==10880==    by 0x4E4E5D2: Vect_open_old (open.c:385)
==10880==    by 0x402F28: main (main.c:290)
==10880==
==10880==
==10880== 48,000 bytes in 1,000 blocks are still reachable in loss record 21 of 24
==10880==    at 0x4C1F996: malloc (in /usr/lib64/valgrind/amd64-linux/vgpreload_memcheck.so)
==10880==    by 0x5D3FDE5: dig_alloc_node (struct_alloc.c:46)
==10880==    by 0x5D3A080: dig_Rd_P_node (plus_struct.c:72)
==10880==    by 0x5D3708B: dig_load_plus (plus.c:323)
==10880==    by 0x4E4EFC3: Vect_open_topo (open.c:720)
==10880==    by 0x4E4DEEB: Vect__open_old (open.c:212)
==10880==    by 0x4E4E5D2: Vect_open_old (open.c:385)
==10880==    by 0x402F28: main (main.c:290)
==10880==
==10880==
==10880== 80,000 bytes in 1,000 blocks are still reachable in loss record 22 of 24
==10880==    at 0x4C1F996: malloc (in /usr/lib64/valgrind/amd64-linux/vgpreload_memcheck.so)
==10880==    by 0x5D3FF85: dig_alloc_line (struct_alloc.c:112)
==10880==    by 0x5D3A447: dig_Rd_P_line (plus_struct.c:177)
==10880==    by 0x5D37130: dig_load_plus (plus.c:334)
==10880==    by 0x4E4EFC3: Vect_open_topo (open.c:720)
==10880==    by 0x4E4DEEB: Vect__open_old (open.c:212)
==10880==    by 0x4E4E5D2: Vect_open_old (open.c:385)
==10880==    by 0x402F28: main (main.c:290)
==10880==
==10880==
==10880== 99,328 bytes in 194 blocks are still reachable in loss record 23 of 24
==10880==    at 0x4C1F996: malloc (in /usr/lib64/valgrind/amd64-linux/vgpreload_memcheck.so)
==10880==    by 0x5F47502: RTreeNewNode (node.c:47)
==10880==    by 0x5F46608: RTreeNewIndex (index.c:27)
==10880==    by 0x5D3E3B2: dig_spidx_init (spindex.c:38)
==10880==    by 0x5D36BA0: dig_init_plus (plus.c:112)
==10880==    by 0x5D36FE4: dig_load_plus (plus.c:306)
==10880==    by 0x4E4EFC3: Vect_open_topo (open.c:720)
==10880==    by 0x4E4DEEB: Vect__open_old (open.c:212)
==10880==    by 0x4E4E5D2: Vect_open_old (open.c:385)
==10880==    by 0x402F28: main (main.c:290)
==10880==
==10880==
==10880== 4,306,696 bytes in 3 blocks are still reachable in loss record 24 of 24
==10880==    at 0x4C1FA97: realloc (in /usr/lib64/valgrind/amd64-linux/vgpreload_memcheck.so)
==10880==    by 0x5289BDA: G_realloc (alloc.c:107)
==10880==    by 0x5298613: set_env (env.c:182)
==10880==    by 0x529839C: read_env (env.c:126)
==10880==    by 0x5298C70: G__getenv (env.c:311)
==10880==    by 0x5298B9E: G_getenv (env.c:287)
==10880==    by 0x52A6948: G_location (location.c:71)
==10880==    by 0x52A695F: G__location_path (location.c:81)
==10880==    by 0x52A68EC: G_location_path (location.c:45)
==10880==    by 0x52A1ACB: G_gisinit (gisinit.c:49)
==10880==    by 0x402370: main (main.c:106)

...

which possibly slow down several commands.

Markus

(in reply to: ↑ 2 ) 01/21/08 13:40:21 changed by martinl

  • cc changed from neteler@osgeo.org to neteler.

Replying to neteler:

This helped, thanks for the fix. But I still observe memory leaks: ...

> ==10880== 16,294 bytes in 125 blocks are still reachable in loss record 19 of 24
> ==10880==    at 0x4C1F996: malloc (in /usr/lib64/valgrind/amd64-linux/vgpreload_memcheck.so)
> ==10880==    by 0x5289AE7: G_malloc (alloc.c:39)
> ==10880==    by 0x52C3229: G_store (store.c:36)
> ==10880==    by 0x52B5B55: G_set_program_name (progrm_nme.c:53)
> ==10880==    by 0x52A1AC6: G_gisinit (gisinit.c:46)
> ==10880==    by 0x402370: main (main.c:106)
> ==10880==
> ==10880==
> ==10880== 40,064 bytes in 2,010 blocks are still reachable in loss record 20 of 24
> ==10880==    at 0x4C1F996: malloc (in /usr/lib64/valgrind/amd64-linux/vgpreload_memcheck.so)
> ==10880==    by 0x4C1FA10: realloc (in /usr/lib64/valgrind/amd64-linux/vgpreload_memcheck.so)
> ==10880==    by 0x5D3FF34: dig_alloc_nodes (struct_alloc.c:98)
> ==10880==    by 0x5D37072: dig_load_plus (plus.c:320)
> ==10880==    by 0x4E4EFC3: Vect_open_topo (open.c:720)
> ==10880==    by 0x4E4DEEB: Vect__open_old (open.c:212)
> ==10880==    by 0x4E4E5D2: Vect_open_old (open.c:385)
> ==10880==    by 0x402F28: main (main.c:290)
> ==10880==
> ==10880==
> ==10880== 48,000 bytes in 1,000 blocks are still reachable in loss record 21 of 24
> ==10880==    at 0x4C1F996: malloc (in /usr/lib64/valgrind/amd64-linux/vgpreload_memcheck.so)
> ==10880==    by 0x5D3FDE5: dig_alloc_node (struct_alloc.c:46)
> ==10880==    by 0x5D3A080: dig_Rd_P_node (plus_struct.c:72)
> ==10880==    by 0x5D3708B: dig_load_plus (plus.c:323)
> ==10880==    by 0x4E4EFC3: Vect_open_topo (open.c:720)
> ==10880==    by 0x4E4DEEB: Vect__open_old (open.c:212)
> ==10880==    by 0x4E4E5D2: Vect_open_old (open.c:385)
> ==10880==    by 0x402F28: main (main.c:290)
> ==10880==
> ==10880==
> ==10880== 80,000 bytes in 1,000 blocks are still reachable in loss record 22 of 24
> ==10880==    at 0x4C1F996: malloc (in /usr/lib64/valgrind/amd64-linux/vgpreload_memcheck.so)
> ==10880==    by 0x5D3FF85: dig_alloc_line (struct_alloc.c:112)
> ==10880==    by 0x5D3A447: dig_Rd_P_line (plus_struct.c:177)
> ==10880==    by 0x5D37130: dig_load_plus (plus.c:334)
> ==10880==    by 0x4E4EFC3: Vect_open_topo (open.c:720)
> ==10880==    by 0x4E4DEEB: Vect__open_old (open.c:212)
> ==10880==    by 0x4E4E5D2: Vect_open_old (open.c:385)
> ==10880==    by 0x402F28: main (main.c:290)
> ==10880==
> ==10880==
> ==10880== 99,328 bytes in 194 blocks are still reachable in loss record 23 of 24
> ==10880==    at 0x4C1F996: malloc (in /usr/lib64/valgrind/amd64-linux/vgpreload_memcheck.so)
> ==10880==    by 0x5F47502: RTreeNewNode (node.c:47)
> ==10880==    by 0x5F46608: RTreeNewIndex (index.c:27)
> ==10880==    by 0x5D3E3B2: dig_spidx_init (spindex.c:38)
> ==10880==    by 0x5D36BA0: dig_init_plus (plus.c:112)
> ==10880==    by 0x5D36FE4: dig_load_plus (plus.c:306)
> ==10880==    by 0x4E4EFC3: Vect_open_topo (open.c:720)
> ==10880==    by 0x4E4DEEB: Vect__open_old (open.c:212)
> ==10880==    by 0x4E4E5D2: Vect_open_old (open.c:385)
> ==10880==    by 0x402F28: main (main.c:290)
> ==10880==
> ==10880==
> ==10880== 4,306,696 bytes in 3 blocks are still reachable in loss record 24 of 24
> ==10880==    at 0x4C1FA97: realloc (in /usr/lib64/valgrind/amd64-linux/vgpreload_memcheck.so)
> ==10880==    by 0x5289BDA: G_realloc (alloc.c:107)
> ==10880==    by 0x5298613: set_env (env.c:182)
> ==10880==    by 0x529839C: read_env (env.c:126)
> ==10880==    by 0x5298C70: G__getenv (env.c:311)
> ==10880==    by 0x5298B9E: G_getenv (env.c:287)
> ==10880==    by 0x52A6948: G_location (location.c:71)
> ==10880==    by 0x52A695F: G__location_path (location.c:81)
> ==10880==    by 0x52A68EC: G_location_path (location.c:45)
> ==10880==    by 0x52A1ACB: G_gisinit (gisinit.c:49)
> ==10880==    by 0x402370: main (main.c:106)

... which possibly slow down several commands.

... back to v.distance

1) v.distance -ap from=busstopsall to=busroutesall upload=dist col=dist

==12838== 1,088,056 bytes in 3 blocks are still reachable in loss record 18 of 18
==12838==    at 0x4024B8E: realloc (vg_replace_malloc.c:429)
==12838==    by 0x408113E: G_realloc (alloc.c:107)
==12838==    by 0x408EF6C: set_env (env.c:162)
==12838==    by 0x408ED29: read_env (env.c:106)
==12838==    by 0x408F56A: G__getenv (env.c:322)
==12838==    by 0x408F479: G_getenv (env.c:276)
==12838==    by 0x409C494: G_location (location.c:66)
==12838==    by 0x409C4B9: G__location_path (location.c:82)
==12838==    by 0x409C41A: G_location_path (location.c:42)
==12838==    by 0x40979E3: G_gisinit (gisinit.c:49)
==12838==    by 0x8049D40: main (main.c:107)
==12838== 
==12838== LEAK SUMMARY:
==12838==    definitely lost: 9,297 bytes in 38 blocks.
==12838==    indirectly lost: 120 bytes in 10 blocks.
==12838==      possibly lost: 0 bytes in 0 blocks.
==12838==    still reachable: 1,187,006 bytes in 1,260 blocks.
==12838==         suppressed: 0 bytes in 0 blocks.

2) v.distance -p from=busstopsall to=busroutesall upload=dist col=dist

==12853== 24,752 bytes in 52 blocks are still reachable in loss record 18 of 18
==12853==    at 0x4024AB8: malloc (vg_replace_malloc.c:207)
==12853==    by 0x413A029: RTreeNewNode (node.c:47)
==12853==    by 0x413920E: RTreeNewIndex (index.c:27)
==12853==    by 0x41320A4: dig_spidx_init (spindex.c:38)
==12853==    by 0x412A86C: dig_init_plus (plus.c:112)
==12853==    by 0x412ACB2: dig_load_plus (plus.c:306)
==12853==    by 0x404F1F1: Vect_open_topo (open.c:702)
==12853==    by 0x404E144: Vect__open_old (open.c:210)
==12853==    by 0x404E7F6: Vect_open_old (open.c:381)
==12853==    by 0x804A8AA: main (main.c:291)
==12853== 
==12853== LEAK SUMMARY:
==12853==    definitely lost: 9,297 bytes in 38 blocks.
==12853==    indirectly lost: 120 bytes in 10 blocks.
==12853==      possibly lost: 0 bytes in 0 blocks.
==12853==    still reachable: 111,618 bytes in 1,260 blocks.
==12853==         suppressed: 0 bytes in 0 blocks.

Strange, confused why -a flag makes difference in this case.

Martin

01/26/08 12:14:13 changed by martinl

  • owner changed from martinl to grass-dev@lists.osgeo.org.

04/20/08 11:05:04 changed by martinl

  • milestone changed from 6.3.0 to 6.4.0.