[Kicad-developers] [PATCH] memory leak in meander placer [was: RC2]

2015-11-09 Thread Tomasz Wlostowski
On 07.11.2015 21:41, Wayne Stambaugh wrote:
 And speaking of pns, there is still CID 106401 where
 PNS_MEANDERED_LINE::MeanderSegment can memory leak.

Here's a patch for that.

Cheers,
T.
>From cd30ed5522dcced484ad6b0a80a0c35e1171c957 Mon Sep 17 00:00:00 2001
From: =?UTF-8?q?Tomasz=20W=C5=82ostowski?= 
Date: Mon, 9 Nov 2015 10:19:31 +0100
Subject: [PATCH] router: fixed memory leak in the meander placer

---
 pcbnew/router/pns_meander.cpp | 31 ---
 pcbnew/router/pns_meander.h   |  5 +
 2 files changed, 21 insertions(+), 15 deletions(-)

diff --git a/pcbnew/router/pns_meander.cpp b/pcbnew/router/pns_meander.cpp
index 5bca9bb..6739401 100644
--- a/pcbnew/router/pns_meander.cpp
+++ b/pcbnew/router/pns_meander.cpp
@@ -61,11 +61,12 @@ void PNS_MEANDERED_LINE::MeanderSegment( const SEG& aBase, int aBaseIndex )
 
 do
 {
-PNS_MEANDER_SHAPE* m = new PNS_MEANDER_SHAPE( m_placer, m_width, m_dual );
-m->SetBaselineOffset( m_baselineOffset );
-m->SetBaseIndex( aBaseIndex );
+PNS_MEANDER_SHAPE m( m_placer, m_width, m_dual );
 
-double thr = (double) m->spacing();
+m.SetBaselineOffset( m_baselineOffset );
+m.SetBaseIndex( aBaseIndex );
+
+double thr = (double) m.spacing();
 
 bool fail = false;
 double remaining = base_len - ( m_last - aBase.A ).EuclideanNorm();
@@ -79,10 +80,10 @@ void PNS_MEANDERED_LINE::MeanderSegment( const SEG& aBase, int aBaseIndex )
 {
 for( int i = 0; i < 2; i++ )
 {
-if ( m->Fit( MT_CHECK_START, aBase, m_last, i ) )
+if ( m.Fit( MT_CHECK_START, aBase, m_last, i ) )
 {
 turning = true;
-AddMeander( m );
+AddMeander( new PNS_MEANDER_SHAPE( m ) );
 side = !i;
 started = true;
 break;
@@ -95,9 +96,9 @@ void PNS_MEANDERED_LINE::MeanderSegment( const SEG& aBase, int aBaseIndex )
 
 for( int i = 0; i < 2; i++ )
 {
-if ( m->Fit ( MT_SINGLE, aBase, m_last, i ) )
+if ( m.Fit ( MT_SINGLE, aBase, m_last, i ) )
 {
-AddMeander( m );
+AddMeander( new PNS_MEANDER_SHAPE( m ) );
 fail = false;
 started = false;
 side = !i;
@@ -106,17 +107,17 @@ void PNS_MEANDERED_LINE::MeanderSegment( const SEG& aBase, int aBaseIndex )
 }
 }
 } else {
-bool rv = m->Fit( MT_CHECK_FINISH, aBase, m_last, side );
+bool rv = m.Fit( MT_CHECK_FINISH, aBase, m_last, side );
 
 if( rv )
 {
-m->Fit( MT_TURN, aBase, m_last, side );
-AddMeander( m );
+m.Fit( MT_TURN, aBase, m_last, side );
+AddMeander( new PNS_MEANDER_SHAPE( m ) );
 started = true;
 } else {
-m->Fit( MT_FINISH, aBase, m_last, side );
+m.Fit( MT_FINISH, aBase, m_last, side );
 started = false;
-AddMeander( m );
+AddMeander( new PNS_MEANDER_SHAPE( m ) );
 turning = false;
 }
 
@@ -124,9 +125,9 @@ void PNS_MEANDERED_LINE::MeanderSegment( const SEG& aBase, int aBaseIndex )
 }
 } else if( started )
 {
-bool rv = m->Fit( MT_FINISH, aBase, m_last, side );
+bool rv = m.Fit( MT_FINISH, aBase, m_last, side );
 if( rv )
-AddMeander( m );
+AddMeander( new PNS_MEANDER_SHAPE( m ) );
 
 break;
 
diff --git a/pcbnew/router/pns_meander.h b/pcbnew/router/pns_meander.h
index 88fb2cc..5d1ae51 100644
--- a/pcbnew/router/pns_meander.h
+++ b/pcbnew/router/pns_meander.h
@@ -416,6 +416,11 @@ public:
 m_baselineOffset = 0;
 }
 
+~PNS_MEANDERED_LINE()
+{
+Clear();
+}
+
 /**
  * Function AddCorner()
  *
-- 
1.9.1

___
Mailing list: https://launchpad.net/~kicad-developers
Post to : kicad-developers@lists.launchpad.net
Unsubscribe : https://launchpad.net/~kicad-developers
More help   : https://help.launchpad.net/ListHelp


Re: [Kicad-developers] [PATCH] memory leak in meander placer [was: RC2]

2015-11-09 Thread jp charras
Le 09/11/2015 10:32, Tomasz Wlostowski a écrit :
> On 07.11.2015 21:41, Wayne Stambaugh wrote:
> And speaking of pns, there is still CID 106401 where
> PNS_MEANDERED_LINE::MeanderSegment can memory leak.
> 
> Here's a patch for that.
> 
> Cheers,
> T.

I committed this patch. Thanks.


-- 
Jean-Pierre CHARRAS

___
Mailing list: https://launchpad.net/~kicad-developers
Post to : kicad-developers@lists.launchpad.net
Unsubscribe : https://launchpad.net/~kicad-developers
More help   : https://help.launchpad.net/ListHelp