From 4e54b773e927af077fbc157ca1b472f80bde8eef Mon Sep 17 00:00:00 2001 From: Jon Evans Date: Mon, 6 Jul 2020 12:16:55 -0400 Subject: [PATCH] Fix some asserts with the property system It seems like there may be some race between BOARD_CONNECTED_ITEM_DESC and BOARD_ITEM_DESC https://gitlab.com/kicad/code/kicad/-/issues/4816 --- pcbnew/board_connected_item.cpp | 10 ++++++++++ pcbnew/class_board_item.cpp | 7 +++++-- pcbnew/class_pad.cpp | 2 +- 3 files changed, 16 insertions(+), 3 deletions(-) diff --git a/pcbnew/board_connected_item.cpp b/pcbnew/board_connected_item.cpp index 3867210880..70b69793d1 100644 --- a/pcbnew/board_connected_item.cpp +++ b/pcbnew/board_connected_item.cpp @@ -204,6 +204,16 @@ static struct BOARD_CONNECTED_ITEM_DESC { BOARD_CONNECTED_ITEM_DESC() { + auto& layerEnum = ENUM_MAP::Instance(); + + if( layerEnum.Choices().GetCount() == 0 ) + { + for( LSEQ seq = LSET::AllLayersMask().Seq(); seq; ++seq ) + { + layerEnum.Map( *seq, LSET::Name( *seq ) ); + } + } + PROPERTY_MANAGER& propMgr = PROPERTY_MANAGER::Instance(); REGISTER_TYPE( BOARD_CONNECTED_ITEM ); propMgr.InheritsAfter( TYPE_HASH( BOARD_CONNECTED_ITEM ), TYPE_HASH( BOARD_ITEM ) ); diff --git a/pcbnew/class_board_item.cpp b/pcbnew/class_board_item.cpp index e08de6d8df..49fdd795d2 100644 --- a/pcbnew/class_board_item.cpp +++ b/pcbnew/class_board_item.cpp @@ -150,9 +150,12 @@ static struct BOARD_ITEM_DESC { auto& layerEnum = ENUM_MAP::Instance(); - for( LSEQ seq = LSET::AllLayersMask().Seq(); seq; ++seq ) + if( layerEnum.Choices().GetCount() == 0 ) { - layerEnum.Map( *seq, LSET::Name( *seq ) ); + for( LSEQ seq = LSET::AllLayersMask().Seq(); seq; ++seq ) + { + layerEnum.Map( *seq, LSET::Name( *seq ) ); + } } PROPERTY_MANAGER& propMgr = PROPERTY_MANAGER::Instance(); diff --git a/pcbnew/class_pad.cpp b/pcbnew/class_pad.cpp index 088d1f75af..632cdf6dd3 100644 --- a/pcbnew/class_pad.cpp +++ b/pcbnew/class_pad.cpp @@ -1211,7 +1211,7 @@ static struct PAD_DESC .Map( PAD_SHAPE_TRAPEZOID, _( "Trapezoid" ) ) .Map( PAD_SHAPE_ROUNDRECT, _( "Rounded Rectangle" ) ) .Map( PAD_SHAPE_CHAMFERED_RECT, _( "Chamfered Rectangle" ) ) - .Map( PAD_SHAPE_CUSTOM, _( "Chamfered Rectangle" ) ); + .Map( PAD_SHAPE_CUSTOM, _( "Custom" ) ); PROPERTY_MANAGER& propMgr = PROPERTY_MANAGER::Instance(); REGISTER_TYPE( D_PAD );