Opened 4 years ago

Closed 4 years ago

#1010 closed defect (fixed)

Leak in GEOSLineMerge_r

Reported by: Algunenano Owned by: geos-devel@…
Priority: major Milestone: 3.9.0
Component: Default Version: main
Severity: Unassigned Keywords:
Cc:

Description

From Postgis tests with HEAD:

$ valgrind --leak-check=full --show-leak-kinds=all ./cunit/cu_tester  test_geos_linemerge

==548693== 40 bytes in 1 blocks are indirectly lost in loss record 2 of 6
==548693==    at 0x4838DEF: operator new(unsigned long) (vg_replace_malloc.c:344)
==548693==    by 0x5C8C098: geos::operation::linemerge::EdgeString::getCoordinates() (EdgeString.cpp:66)
==548693==    by 0x5C8C1FD: geos::operation::linemerge::EdgeString::toLineString() (EdgeString.cpp:96)
==548693==    by 0x5C8D4CE: geos::operation::linemerge::LineMerger::merge() (LineMerger.cpp:130)
==548693==    by 0x5C8DADD: geos::operation::linemerge::LineMerger::getMergedLineStrings() (LineMerger.cpp:233)
==548693==    by 0x4BF67CA: operator() (geos_ts_c.cpp:1896)
==548693==    by 0x4BF67CA: execute<(lambda at geos_ts_c.cpp:1890:35), nullptr> (geos_ts_c.cpp:377)
==548693==    by 0x4BF67CA: GEOSLineMerge_r (geos_ts_c.cpp:1890)
==548693==    by 0x1AB257: lwgeom_linemerge (lwgeom_geos.c:727)
==548693==    by 0x125E18: test_geos_linemerge (cu_geos.c:89)
==548693==    by 0x4884117: ??? (in /usr/lib/libcunit.so.1.0.1)
==548693==    by 0x4884AAF: CU_run_test (in /usr/lib/libcunit.so.1.0.1)
==548693==    by 0x158A12: main (cu_tester.c:226)
==548693== 
==548693== 96 bytes in 1 blocks are indirectly lost in loss record 3 of 6
==548693==    at 0x4838DEF: operator new(unsigned long) (vg_replace_malloc.c:344)
==548693==    by 0x5C184A1: allocate (new_allocator.h:114)
==548693==    by 0x5C184A1: allocate (alloc_traits.h:444)
==548693==    by 0x5C184A1: _M_allocate (stl_vector.h:343)
==548693==    by 0x5C184A1: _M_realloc_insert<const geos::geom::Coordinate &> (vector.tcc:440)
==548693==    by 0x5C184A1: push_back (stl_vector.h:1195)
==548693==    by 0x5C184A1: geos::geom::CoordinateArraySequence::add(geos::geom::Coordinate const&, bool) (CoordinateArraySequence.cpp:135)
==548693==    by 0x5C185F9: geos::geom::CoordinateArraySequence::add(geos::geom::CoordinateSequence const*, bool, bool) (CoordinateArraySequence.cpp:146)
==548693==    by 0x5C8C15D: geos::operation::linemerge::EdgeString::getCoordinates() (EdgeString.cpp:79)
==548693==    by 0x5C8C1FD: geos::operation::linemerge::EdgeString::toLineString() (EdgeString.cpp:96)
==548693==    by 0x5C8D4CE: geos::operation::linemerge::LineMerger::merge() (LineMerger.cpp:130)
==548693==    by 0x5C8DADD: geos::operation::linemerge::LineMerger::getMergedLineStrings() (LineMerger.cpp:233)
==548693==    by 0x4BF67CA: operator() (geos_ts_c.cpp:1896)
==548693==    by 0x4BF67CA: execute<(lambda at geos_ts_c.cpp:1890:35), nullptr> (geos_ts_c.cpp:377)
==548693==    by 0x4BF67CA: GEOSLineMerge_r (geos_ts_c.cpp:1890)
==548693==    by 0x1AB257: lwgeom_linemerge (lwgeom_geos.c:727)
==548693==    by 0x125E18: test_geos_linemerge (cu_geos.c:89)
==548693==    by 0x4884117: ??? (in /usr/lib/libcunit.so.1.0.1)
==548693==    by 0x4884AAF: CU_run_test (in /usr/lib/libcunit.so.1.0.1)

The bisection points to https://github.com/libgeos/geos/commit/7a7cbf84fc5d4369baaf4c6e0614f44d4207503f as the culprit.

I've tried to readd the removed delete call but it doesn't fix it:

I'm not sure what is causing the leak in the changes, so I'm not opening a PR yet, but feel free to fix it if you see what the issue is.

Change History (2)

comment:2 by Daniel Baston <dbaston@…>, 4 years ago

Resolution: fixed
Status: newclosed

In 24f22e7/git:

Fix memory leak in GEOSLineMerge

Fixes #1010

Note: See TracTickets for help on using tickets.