Fix memory leak in pns_node and pns_line_placer. Fix coverity uninitialized warnings.
This commit is contained in:
parent
97e4a3897c
commit
721949b50e
|
@ -385,7 +385,6 @@ void PNS_DP_GATEWAYS::BuildFromPrimitivePair( PNS_DP_PRIMITIVE_PAIR aPair, bool
|
||||||
p0_n = aPair.AnchorN();
|
p0_n = aPair.AnchorN();
|
||||||
|
|
||||||
shP = aPair.PrimP()->Shape();
|
shP = aPair.PrimP()->Shape();
|
||||||
|
|
||||||
}
|
}
|
||||||
else if( aPair.PrimP()->OfKind( PNS_ITEM::SEGMENT ) && aPair.PrimN()->OfKind( PNS_ITEM::SEGMENT ) )
|
else if( aPair.PrimP()->OfKind( PNS_ITEM::SEGMENT ) && aPair.PrimN()->OfKind( PNS_ITEM::SEGMENT ) )
|
||||||
{
|
{
|
||||||
|
@ -396,6 +395,9 @@ void PNS_DP_GATEWAYS::BuildFromPrimitivePair( PNS_DP_PRIMITIVE_PAIR aPair, bool
|
||||||
|
|
||||||
majorDirection = ( p0_p - p0_n ).Perpendicular();
|
majorDirection = ( p0_p - p0_n ).Perpendicular();
|
||||||
|
|
||||||
|
if( shP == NULL )
|
||||||
|
return;
|
||||||
|
|
||||||
switch( shP->Type() )
|
switch( shP->Type() )
|
||||||
{
|
{
|
||||||
case SH_RECT:
|
case SH_RECT:
|
||||||
|
|
|
@ -42,11 +42,29 @@ using boost::optional;
|
||||||
PNS_DIFF_PAIR_PLACER::PNS_DIFF_PAIR_PLACER( PNS_ROUTER* aRouter ) :
|
PNS_DIFF_PAIR_PLACER::PNS_DIFF_PAIR_PLACER( PNS_ROUTER* aRouter ) :
|
||||||
PNS_PLACEMENT_ALGO ( aRouter )
|
PNS_PLACEMENT_ALGO ( aRouter )
|
||||||
{
|
{
|
||||||
|
m_state = RT_START;
|
||||||
|
m_chainedPlacement = false;
|
||||||
m_initialDiagonal = false;
|
m_initialDiagonal = false;
|
||||||
m_startDiagonal = false;
|
m_startDiagonal = false;
|
||||||
|
m_fitOk = false;
|
||||||
|
m_netP = 0;
|
||||||
|
m_netN = 0;
|
||||||
|
m_iteration = 0;
|
||||||
m_world = NULL;
|
m_world = NULL;
|
||||||
m_shove = NULL;
|
m_shove = NULL;
|
||||||
m_currentNode = NULL;
|
m_currentNode = NULL;
|
||||||
|
m_lastNode = NULL;
|
||||||
|
m_placingVia = false;
|
||||||
|
m_viaDiameter = 0;
|
||||||
|
m_viaDrill = 0;
|
||||||
|
m_currentWidth = 0;
|
||||||
|
m_currentNet = 0;
|
||||||
|
m_currentLayer = 0;
|
||||||
|
m_startsOnVia = false;
|
||||||
|
m_orthoMode = false;
|
||||||
|
m_snapOnTarget = false;
|
||||||
|
m_currentEndItem = NULL;
|
||||||
|
m_currentMode = RM_MarkObstacles;
|
||||||
m_idle = true;
|
m_idle = true;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
|
@ -28,7 +28,15 @@ PNS_DRAGGER::PNS_DRAGGER( PNS_ROUTER* aRouter ) :
|
||||||
PNS_ALGO_BASE( aRouter )
|
PNS_ALGO_BASE( aRouter )
|
||||||
{
|
{
|
||||||
m_world = NULL;
|
m_world = NULL;
|
||||||
|
m_lastNode = NULL;
|
||||||
|
m_mode = SEGMENT;
|
||||||
|
m_draggedLine = NULL;
|
||||||
|
m_draggedVia = NULL;
|
||||||
m_shove = NULL;
|
m_shove = NULL;
|
||||||
|
m_draggedSegmentIndex = 0;
|
||||||
|
m_dragStatus = false;
|
||||||
|
m_currentMode = RM_MarkObstacles;
|
||||||
|
m_initialVia = NULL;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
|
|
|
@ -929,7 +929,9 @@ bool PNS_LINE_PLACER::FixRoute( const VECTOR2I& aP, PNS_ITEM* aEndItem )
|
||||||
m_chainedPlacement = !pl.EndsWithVia();
|
m_chainedPlacement = !pl.EndsWithVia();
|
||||||
m_splitSeg = false;
|
m_splitSeg = false;
|
||||||
initPlacement( );
|
initPlacement( );
|
||||||
} else {
|
}
|
||||||
|
else
|
||||||
|
{
|
||||||
m_idle = true;
|
m_idle = true;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -955,7 +957,7 @@ void PNS_LINE_PLACER::removeLoops( PNS_NODE* aNode, PNS_LINE* aLatest )
|
||||||
|
|
||||||
if( a == b )
|
if( a == b )
|
||||||
{
|
{
|
||||||
aNode->FindLineEnds( aLatest, a, b);
|
aNode->FindLineEnds( aLatest, a, b );
|
||||||
}
|
}
|
||||||
|
|
||||||
aNode->FindLinesBetweenJoints( a, b, lines );
|
aNode->FindLinesBetweenJoints( a, b, lines );
|
||||||
|
@ -992,20 +994,23 @@ void PNS_LINE_PLACER::simplifyNewLine( PNS_NODE* aNode, PNS_SEGMENT* aLatest )
|
||||||
|
|
||||||
if( simplified.PointCount() != l->PointCount() )
|
if( simplified.PointCount() != l->PointCount() )
|
||||||
{
|
{
|
||||||
std::auto_ptr<PNS_LINE> lnew ( l->Clone() );
|
std::auto_ptr<PNS_LINE> lnew( l->Clone() );
|
||||||
aNode -> Remove( l );
|
aNode->Remove( l );
|
||||||
lnew->SetShape( simplified );
|
lnew->SetShape( simplified );
|
||||||
aNode -> Add( lnew.get() );
|
aNode->Add( lnew.get() );
|
||||||
}
|
}
|
||||||
|
|
||||||
|
delete l;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
void PNS_LINE_PLACER::UpdateSizes( const PNS_SIZES_SETTINGS& aSizes )
|
void PNS_LINE_PLACER::UpdateSizes( const PNS_SIZES_SETTINGS& aSizes )
|
||||||
{
|
{
|
||||||
m_sizes = aSizes;
|
m_sizes = aSizes;
|
||||||
|
|
||||||
if( !m_idle )
|
if( !m_idle )
|
||||||
{
|
{
|
||||||
initPlacement ( m_splitSeg );
|
initPlacement( m_splitSeg );
|
||||||
Move ( m_currentEnd, NULL );
|
Move ( m_currentEnd, NULL );
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
@ -1015,7 +1020,7 @@ void PNS_LINE_PLACER::updateLeadingRatLine()
|
||||||
{
|
{
|
||||||
PNS_LINE current = Trace();
|
PNS_LINE current = Trace();
|
||||||
SHAPE_LINE_CHAIN ratLine;
|
SHAPE_LINE_CHAIN ratLine;
|
||||||
PNS_TOPOLOGY topo ( m_lastNode );
|
PNS_TOPOLOGY topo( m_lastNode );
|
||||||
|
|
||||||
if( topo.LeadingRatLine( ¤t, ratLine ) )
|
if( topo.LeadingRatLine( ¤t, ratLine ) )
|
||||||
Router()->DisplayDebugLine( ratLine, 5, 10000 );
|
Router()->DisplayDebugLine( ratLine, 5, 10000 );
|
||||||
|
|
|
@ -52,6 +52,7 @@ PNS_NODE::PNS_NODE()
|
||||||
m_root = this;
|
m_root = this;
|
||||||
m_parent = NULL;
|
m_parent = NULL;
|
||||||
m_maxClearance = 800000; // fixme: depends on how thick traces are.
|
m_maxClearance = 800000; // fixme: depends on how thick traces are.
|
||||||
|
m_clearanceFunctor = NULL;
|
||||||
m_index = new PNS_INDEX;
|
m_index = new PNS_INDEX;
|
||||||
m_collisionFilter = NULL;
|
m_collisionFilter = NULL;
|
||||||
|
|
||||||
|
@ -179,6 +180,8 @@ struct PNS_NODE::OBSTACLE_VISITOR
|
||||||
int m_extraClearance;
|
int m_extraClearance;
|
||||||
|
|
||||||
OBSTACLE_VISITOR( PNS_NODE::OBSTACLES& aTab, const PNS_ITEM* aItem, int aKindMask ) :
|
OBSTACLE_VISITOR( PNS_NODE::OBSTACLES& aTab, const PNS_ITEM* aItem, int aKindMask ) :
|
||||||
|
m_node( NULL ),
|
||||||
|
m_override( NULL ),
|
||||||
m_tab( aTab ),
|
m_tab( aTab ),
|
||||||
m_item( aItem ),
|
m_item( aItem ),
|
||||||
m_kindMask( aKindMask ),
|
m_kindMask( aKindMask ),
|
||||||
|
@ -517,11 +520,15 @@ void PNS_NODE::addLine( PNS_LINE* aLine, bool aAllowRedundant )
|
||||||
PNS_SEGMENT* pseg = new PNS_SEGMENT( *aLine, s );
|
PNS_SEGMENT* pseg = new PNS_SEGMENT( *aLine, s );
|
||||||
PNS_SEGMENT* psegR = NULL;
|
PNS_SEGMENT* psegR = NULL;
|
||||||
|
|
||||||
if ( !aAllowRedundant )
|
if( !aAllowRedundant )
|
||||||
psegR = findRedundantSegment( pseg );
|
psegR = findRedundantSegment( pseg );
|
||||||
|
|
||||||
if( psegR )
|
if( psegR )
|
||||||
|
{
|
||||||
aLine->LinkSegment( psegR );
|
aLine->LinkSegment( psegR );
|
||||||
|
|
||||||
|
delete pseg;
|
||||||
|
}
|
||||||
else
|
else
|
||||||
{
|
{
|
||||||
pseg->SetOwner( this );
|
pseg->SetOwner( this );
|
||||||
|
|
|
@ -119,16 +119,17 @@ bool PNS_COST_ESTIMATOR::IsBetter( PNS_COST_ESTIMATOR& aOther,
|
||||||
* Optimizer
|
* Optimizer
|
||||||
**/
|
**/
|
||||||
PNS_OPTIMIZER::PNS_OPTIMIZER( PNS_NODE* aWorld ) :
|
PNS_OPTIMIZER::PNS_OPTIMIZER( PNS_NODE* aWorld ) :
|
||||||
m_world( aWorld ), m_collisionKindMask( PNS_ITEM::ANY ), m_effortLevel( MERGE_SEGMENTS )
|
m_world( aWorld ),
|
||||||
|
m_collisionKindMask( PNS_ITEM::ANY ),
|
||||||
|
m_effortLevel( MERGE_SEGMENTS ),
|
||||||
|
m_keepPostures( false ),
|
||||||
|
m_restrictAreaActive( false )
|
||||||
{
|
{
|
||||||
// m_cache = new SHAPE_INDEX_LIST<PNS_ITEM*>();
|
|
||||||
m_restrictAreaActive = false;
|
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
PNS_OPTIMIZER::~PNS_OPTIMIZER()
|
PNS_OPTIMIZER::~PNS_OPTIMIZER()
|
||||||
{
|
{
|
||||||
// delete m_cache;
|
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
|
@ -188,7 +189,7 @@ void PNS_OPTIMIZER::removeCachedSegments( PNS_LINE* aLine, int aStartVertex, int
|
||||||
PNS_SEGMENT* s = (*segs)[i];
|
PNS_SEGMENT* s = (*segs)[i];
|
||||||
m_cacheTags.erase( s );
|
m_cacheTags.erase( s );
|
||||||
m_cache.Remove( s );
|
m_cache.Remove( s );
|
||||||
} // *cacheRemove( (*segs)[i] );
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
|
|
|
@ -64,6 +64,16 @@ PNS_TOOL_BASE::PNS_TOOL_BASE( const std::string& aToolName ) :
|
||||||
TOOL_INTERACTIVE( aToolName )
|
TOOL_INTERACTIVE( aToolName )
|
||||||
{
|
{
|
||||||
m_router = NULL;
|
m_router = NULL;
|
||||||
|
m_startItem = NULL;
|
||||||
|
m_startLayer = 0;
|
||||||
|
|
||||||
|
m_endItem = NULL;
|
||||||
|
|
||||||
|
m_needsSync = false;
|
||||||
|
|
||||||
|
m_frame = NULL;
|
||||||
|
m_ctls = NULL;
|
||||||
|
m_board = NULL;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
|
|
Loading…
Reference in New Issue