Enforce thread safety in clearance and creepage checks
Previously, these checks injected a custom handler to add graphic objects to a DRC marker. This was not thread-safe and was causing non-deterministic crashes. The DRC reporting methods now accept a customer handler which is called on the newly created PCB_MARKER within the commit context. This defaults to nullptr for DRC checks which do not require graphics or other additional processing. Fixes https://gitlab.com/kicad/code/kicad/-/issues/19282
This commit is contained in:
@@ -609,7 +609,8 @@ bool WriteDRCReport( BOARD* aBoard, const wxString& aFileName, EDA_UNITS aUnits,
|
||||
engine->SetProgressReporter( nullptr );
|
||||
|
||||
engine->SetViolationHandler(
|
||||
[&]( const std::shared_ptr<DRC_ITEM>& aItem, VECTOR2D aPos, int aLayer )
|
||||
[&]( const std::shared_ptr<DRC_ITEM>& aItem, VECTOR2D aPos, int aLayer,
|
||||
DRC_CUSTOM_MARKER_HANDLER* aCustomHandler )
|
||||
{
|
||||
if( aItem->GetErrorCode() == DRCE_MISSING_FOOTPRINT
|
||||
|| aItem->GetErrorCode() == DRCE_DUPLICATE_FOOTPRINT
|
||||
|
||||
Reference in New Issue
Block a user