Commit 721949b5 authored by Maciej Suminski's avatar Maciej Suminski
Browse files

Fix memory leak in pns_node and pns_line_placer. Fix coverity uninitialized warnings.

parent 97e4a389
Loading
Loading
Loading
Loading
+3 −1
Original line number Diff line number Diff line
@@ -385,7 +385,6 @@ void PNS_DP_GATEWAYS::BuildFromPrimitivePair( PNS_DP_PRIMITIVE_PAIR aPair, bool
        p0_n = aPair.AnchorN();

        shP = aPair.PrimP()->Shape();

    }
    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();

    if( shP == NULL )
        return;

    switch( shP->Type() )
    {
        case SH_RECT:
+18 −0
Original line number Diff line number Diff line
@@ -42,11 +42,29 @@ using boost::optional;
PNS_DIFF_PAIR_PLACER::PNS_DIFF_PAIR_PLACER( PNS_ROUTER* aRouter ) :
    PNS_PLACEMENT_ALGO ( aRouter )
{
    m_state = RT_START;
    m_chainedPlacement = false;
    m_initialDiagonal = false;
    m_startDiagonal = false;
    m_fitOk = false;
    m_netP = 0;
    m_netN = 0;
    m_iteration = 0;
    m_world = NULL;
    m_shove = 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;
}

+8 −0
Original line number Diff line number Diff line
@@ -28,7 +28,15 @@ PNS_DRAGGER::PNS_DRAGGER( PNS_ROUTER* aRouter ) :
    PNS_ALGO_BASE( aRouter )
{
    m_world = NULL;
    m_lastNode = NULL;
    m_mode = SEGMENT;
    m_draggedLine = NULL;
    m_draggedVia = NULL;
    m_shove = NULL;
    m_draggedSegmentIndex = 0;
    m_dragStatus = false;
    m_currentMode = RM_MarkObstacles;
    m_initialVia = NULL;
}


+12 −7
Original line number Diff line number Diff line
@@ -929,7 +929,9 @@ bool PNS_LINE_PLACER::FixRoute( const VECTOR2I& aP, PNS_ITEM* aEndItem )
        m_chainedPlacement = !pl.EndsWithVia();
        m_splitSeg = false;
        initPlacement( );
    } else {
    }
    else
    {
        m_idle = true;
    }

@@ -997,12 +999,15 @@ void PNS_LINE_PLACER::simplifyNewLine( PNS_NODE* aNode, PNS_SEGMENT* aLatest )
        lnew->SetShape( simplified );
        aNode->Add( lnew.get() );
    }

    delete l;
}


void PNS_LINE_PLACER::UpdateSizes( const PNS_SIZES_SETTINGS& aSizes )
{
    m_sizes = aSizes;

    if( !m_idle )
    {
        initPlacement( m_splitSeg );
+9 −2
Original line number Diff line number Diff line
@@ -52,6 +52,7 @@ PNS_NODE::PNS_NODE()
    m_root = this;
    m_parent = NULL;
    m_maxClearance = 800000;    // fixme: depends on how thick traces are.
    m_clearanceFunctor = NULL;
    m_index = new PNS_INDEX;
    m_collisionFilter = NULL;

@@ -179,6 +180,8 @@ struct PNS_NODE::OBSTACLE_VISITOR
    int m_extraClearance;

    OBSTACLE_VISITOR( PNS_NODE::OBSTACLES& aTab, const PNS_ITEM* aItem, int aKindMask ) :
        m_node( NULL ),
        m_override( NULL ),
        m_tab( aTab ),
        m_item( aItem ),
        m_kindMask( aKindMask ),
@@ -521,7 +524,11 @@ void PNS_NODE::addLine( PNS_LINE* aLine, bool aAllowRedundant )
                psegR = findRedundantSegment( pseg );

            if( psegR )
            {
                aLine->LinkSegment( psegR );

                delete pseg;
            }
            else
            {
                pseg->SetOwner( this );
Loading