7
mirror of https://gitlab.com/kicad/code/kicad.git synced 2025-03-30 05:46:55 +00:00

Thread safety for TRACKS_CLEANER cache

This commit is contained in:
Jon Evans 2025-02-09 10:33:47 -05:00
parent 2dc6175fcd
commit 2ad958c97b
2 changed files with 8 additions and 2 deletions

View File

@ -612,6 +612,7 @@ void TRACKS_CLEANER::cleanup( bool aDeleteDuplicateVias, bool aDeleteNullSegment
while( !m_brd->BuildConnectivity() )
wxSafeYield();
std::lock_guard lock( m_mutex );
m_connectedItemsCache.clear();
} while( mergeSegments( m_brd->GetConnectivity()->GetConnectivityAlgo() ) );
}
@ -631,10 +632,13 @@ const std::vector<BOARD_CONNECTED_ITEM*>& TRACKS_CLEANER::getConnectedItems( PCB
const std::shared_ptr<CONNECTIVITY_DATA>& connectivity = m_brd->GetConnectivity();
if( m_connectedItemsCache.count( aTrack ) == 0 )
if( !m_connectedItemsCache.contains( aTrack ) )
{
std::lock_guard lock( m_mutex );
m_connectedItemsCache[ aTrack ] = connectivity->GetConnectedItems( aTrack, connectedTypes );
}
return m_connectedItemsCache[ aTrack ];
return m_connectedItemsCache.at( aTrack );
}

View File

@ -24,6 +24,7 @@
#ifndef KICAD_TRACKS_CLEANER_H
#define KICAD_TRACKS_CLEANER_H
#include <mutex>
#include <pcb_track.h>
#include <board.h>
@ -127,6 +128,7 @@ private:
std::map<PCB_TRACK*, std::vector<BOARD_CONNECTED_ITEM*>> m_connectedItemsCache;
std::function<bool( BOARD_CONNECTED_ITEM* aItem )> m_filter;
std::mutex m_mutex;
};