[geos-devel] New memory leaks in the 2.2 branch since 2.2.1?

Sean Gillies sgillies at frii.com
Thu Mar 30 03:45:12 EST 2006


strk,

I have a program that was running almost leak free with GEOS 2.2.1,  
but I am seeing leaks now with the head of the 2.2 branch. I'm using  
valgrind.

==16249==
==16249== ERROR SUMMARY: 0 errors from 0 contexts (suppressed: 9361  
from 7)
==16249== malloc/free: in use at exit: 1468711 bytes in 1164 blocks.
==16249== malloc/free: 30535 allocs, 29371 frees, 4851492 bytes  
allocated.
==16249== For counts of detected errors, rerun with: -v
==16249== searching for pointers to 1164 not-freed blocks.
==16249== checked 14088580 bytes.
==16249==
==16249== 16 bytes in 1 blocks are definitely lost in loss record 10  
of 78
==16249==    at 0x1B904BF7: operator new(unsigned)  
(vg_replace_malloc.c:133)
==16249==    by 0x1CA4D124: initGEOS (geos_c.cpp:162)
==16249==    by 0x1C090677: init_geom (_geommodule.c:2197)
==16249==    by 0x80CB80D: _PyImport_LoadDynamicModule (importdl.c:53)

^^^^^
This 16 bytes was the only leak I saw in 2.2.1.

Here are the new ones:

==16249==
==16249==
==16249== 24 bytes in 1 blocks are definitely lost in loss record 14  
of 78
==16249==    at 0x1B904BF7: operator new(unsigned)  
(vg_replace_malloc.c:133)
==16249==    by 0x1C4C7C6B: geos::GeometryFactory::createLinearRing 
(geos::CoordinateSequence*) const (GeometryFactory.cpp:423)
==16249==    by 0x1CA5223E: GEOSGeom_createLinearRing (geos_c.cpp:1938)
==16249==    by 0x1C0911AE: Geometry_copyFromCoordSeq (_geommodule.c: 
676)
==16249==
==16249==
==16249== 48 bytes in 2 blocks are definitely lost in loss record 23  
of 78
==16249==    at 0x1B904BF7: operator new(unsigned)  
(vg_replace_malloc.c:133)
==16249==    by 0x1C4C7D13: geos::GeometryFactory::createMultiPoint 
(std::vector<geos::Geometry*, std::allocator<geos::Geometry*> >*)  
const (GeometryFactory.cpp:459)
==16249==    by 0x1C504E5F: geos::WKBReader::readMultiPoint()  
(WKBReader.cpp:195)
==16249==    by 0x1C5044DC: geos::WKBReader::readGeometry()  
(WKBReader.cpp:113)
==16249==
==16249==
==16249== 72 bytes in 3 blocks are definitely lost in loss record 29  
of 78
==16249==    at 0x1B904BF7: operator new(unsigned)  
(vg_replace_malloc.c:133)
==16249==    by 0x1C4C7A33: geos::GeometryFactory::createMultiPolygon 
(std::vector<geos::Geometry*, std::allocator<geos::Geometry*> >*)  
const (GeometryFactory.cpp:362)
==16249==    by 0x1C505517: geos::WKBReader::readMultiPolygon()  
(WKBReader.cpp:243)
==16249==    by 0x1C5044F9: geos::WKBReader::readGeometry()  
(WKBReader.cpp:117)
==16249==
==16249==
==16249== 72 bytes in 3 blocks are definitely lost in loss record 30  
of 78
==16249==    at 0x1B904BF7: operator new(unsigned)  
(vg_replace_malloc.c:133)
==16249==    by 0x1C4C74BB:  
geos::GeometryFactory::createMultiLineString 
(std::vector<geos::Geometry*, std::allocator<geos::Geometry*> >*)  
const (GeometryFactory.cpp:234)
==16249==    by 0x1C5051BB: geos::WKBReader::readMultiLineString()  
(WKBReader.cpp:219)
==16249==    by 0x1C5044E9: geos::WKBReader::readGeometry()  
(WKBReader.cpp:115)
==16249==
==16249==
==16249== 264 bytes in 11 blocks are definitely lost in loss record  
45 of 78
==16249==    at 0x1B904BF7: operator new(unsigned)  
(vg_replace_malloc.c:133)
==16249==    by 0x1C4C833F: geos::GeometryFactory::createLineString 
(geos::CoordinateSequence*) const (GeometryFactory.cpp:613)
==16249==    by 0x1CA5235A: GEOSGeom_createLineString (geos_c.cpp:1961)
==16249==    by 0x1C091218: Geometry_copyFromCoordSeq (_geommodule.c: 
673)
==16249==
==16249==
==16249== 308 bytes in 11 blocks are definitely lost in loss record  
48 of 78
==16249==    at 0x1B904BF7: operator new(unsigned)  
(vg_replace_malloc.c:133)
==16249==    by 0x1C4C80CF: geos::GeometryFactory::createPolygon 
(geos::LinearRing*, std::vector<geos::Geometry*,  
std::allocator<geos::Geometry*> >*) const (GeometryFactory.cpp:554)
==16249==    by 0x1C501846: geos::WKTReader::readPolygonText 
(geos::StringTokenizer*) (WKTReader.cpp:242)
==16249==    by 0x1C501270: geos::WKTReader::readGeometryTaggedText 
(geos::StringTokenizer*) (WKTReader.cpp:173)
==16249==
==16249==
==16249== 432 bytes in 18 blocks are definitely lost in loss record  
53 of 78
==16249==    at 0x1B904BF7: operator new(unsigned)  
(vg_replace_malloc.c:133)
==16249==    by 0x1C4C77FB:  
geos::GeometryFactory::createGeometryCollection 
(std::vector<geos::Geometry*, std::allocator<geos::Geometry*> >*)  
const (GeometryFactory.cpp:304)
==16249==    by 0x1C501F20:  
geos::WKTReader::readGeometryCollectionText(geos::StringTokenizer*)  
(WKTReader.cpp:296)
==16249==    by 0x1C501310: geos::WKTReader::readGeometryTaggedText 
(geos::StringTokenizer*) (WKTReader.cpp:181)
==16249==
==16249==
==16249== 1776 bytes in 74 blocks are definitely lost in loss record  
65 of 78
==16249==    at 0x1B904BF7: operator new(unsigned)  
(vg_replace_malloc.c:133)
==16249==    by 0x1C4C738F: geos::GeometryFactory::createPoint 
(geos::CoordinateSequence*) const (GeometryFactory.cpp:183)
==16249==    by 0x1CA52122: GEOSGeom_createPoint (geos_c.cpp:1915)
==16249==    by 0x1C0911F2: Geometry_copyFromCoordSeq (_geommodule.c: 
670)
==16249==
==16249== LEAK SUMMARY:
==16249==    definitely lost: 3012 bytes in 124 blocks.
==16249==    possibly lost:   0 bytes in 0 blocks.
==16249==    still reachable: 1465499 bytes in 1039 blocks.
==16249==         suppressed: 200 bytes in 1 blocks.
==16249== Reachable blocks (those to which a pointer was found) are  
not shown.
==16249== To see them, rerun with: --show-reachable=yes
[sean at lenny tests]$

Any ideas?

---
Sean Gillies
http://zcologia.com






More information about the geos-devel mailing list