[geos-devel] Fwd: Prepared Geometry

Martin Davis mbdavis at refractions.net
Thu Oct 9 13:35:13 EDT 2008


I have to disagree with Hartmut's complaint.  The SegmentString class is 
intended to be an adapter class, which wraps a data structure 
(Coordinate sequence) owned by some client to allow it to be processed 
by the noding logic.  Under this pattern, the SegmentString class 
definitely should  *not* be freeing the memory for the wrapped sequence 
- that is the responsibility of the client.

I can't comment on "writing C++ like Java", but obviously C++ requires 
more knowledge of the usage patterns of memory resources than Java 
does.  That's why Java is easier to write  8^)

Paul Ramsey wrote:
> Another quarter heard from. I have applied this "ugly" patch
> nonetheless, since it removes my leak in PostGIS.
>
> P
>
>
> ---------- Forwarded message ----------
> From: Hartmut Kaiser <hartmut.kaiser at gmail.com>
> Date: Thu, Oct 9, 2008 at 6:55 AM
> Subject: RE: Prepared Geometry
> To: Paul Ramsey <pramsey at cleverelephant.ca>
>
>
> Paul,
>
>   
>> Could you try big against small1 and small2?
>>     
>
> Patch attached. But frankly, I don't like the solution (even if it adopted
> the way it's currently handled all over the place in GEOS).
>
> The way the SegmentString class is written and used requires the user of the
> an instance of SegmentString to take care of the deletion of the embedded
> point array, for instance:
>
>    for ( size_t i = 0, ni = lineSegStr.size(); i < ni; i++ )
>    {
>        delete lineSegStr[ i ]->getCoordinates();    // <-- here
>        delete lineSegStr[ i ];
>    }
>
> Which is just wrong, because this could be done in a better way if
> SegmentString was taking care of this in the destructor. I tried to fix GEOS
> (and the tests) in this direction, but apparently the buffers stored in the
> SegmentString are shared in between different higher level structures in
> addition, which makes it impossible (at least currently for me) to fix that
> without introducing some kind of smart pointers (or investing a really large
> amount of time, which I don't have) ...
>
> For this reason I fixed this memory leak the straightforward (and ugly) way.
> I'm sure there are more similar bugs to recover, though :-P
>
> Regards Hartmut
>
> PS: As impressive GEOS is it convinces me once more that it's not a good
> idea to write C++ in a way similar to Java, especially if no special means
> of memory management (i.e. smart ptrs) are introduced.
>
>
>   
>> Thanks!
>>
>> Paul
>>
>> On Wed, Oct 8, 2008 at 1:54 PM, Hartmut Kaiser
>> <hartmut.kaiser at gmail.com> wrote:
>>     
>>> Paul,
>>>
>>>       
>>>> The reason I ask is because while contains and covers appear leak
>>>> free, intersects seems to be leaking. I'm pretty sure it's not on
>>>>         
>> the
>>     
>>>> PostGIS side (I think).
>>>>
>>>> P.
>>>>
>>>> On Wed, Oct 8, 2008 at 12:25 PM, Paul Ramsey
>>>> <pramsey at cleverelephant.ca> wrote:
>>>>         
>>>>> Hartmut,
>>>>>
>>>>> When you tested for leaks, did you test prepared contains,
>>>>>           
>>>> intersects,
>>>>         
>>>>> covers, coversproperly? Or just one of them?
>>>>>           
>>> I was using the test program as attached to the ticket (which AFAIR
>>> calls all of the topological attribute functions). This test program
>>> was leak free for me. But I tried the geometries as attached to the
>>> ticket only either, so your leaks might show themselves with certain
>>>       
>> geometries only.
>>     
>>> Regards Hartmut
>>>
>>>
>>>
>>>
>>>       
>>> ------------------------------------------------------------------------
>>>
>>> _______________________________________________
>>> geos-devel mailing list
>>> geos-devel at lists.osgeo.org
>>> http://lists.osgeo.org/mailman/listinfo/geos-devel

-- 
Martin Davis
Senior Technical Architect
Refractions Research, Inc.
(250) 383-3022



More information about the geos-devel mailing list