diff --git a/pcbnew/tracks_cleaner.cpp b/pcbnew/tracks_cleaner.cpp index c0ae4a7596..e4baf71acc 100644 --- a/pcbnew/tracks_cleaner.cpp +++ b/pcbnew/tracks_cleaner.cpp @@ -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 ); } diff --git a/pcbnew/tracks_cleaner.h b/pcbnew/tracks_cleaner.h index dcbe14e414..73096a3b47 100644 --- a/pcbnew/tracks_cleaner.h +++ b/pcbnew/tracks_cleaner.h @@ -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; };