mirror of
https://gitlab.com/kicad/code/kicad.git
synced 2025-09-14 02:03:12 +02:00
Thread safety for TRACKS_CLEANER cache
This commit is contained in:
parent
2dc6175fcd
commit
2ad958c97b
@ -612,6 +612,7 @@ void TRACKS_CLEANER::cleanup( bool aDeleteDuplicateVias, bool aDeleteNullSegment
|
|||||||
while( !m_brd->BuildConnectivity() )
|
while( !m_brd->BuildConnectivity() )
|
||||||
wxSafeYield();
|
wxSafeYield();
|
||||||
|
|
||||||
|
std::lock_guard lock( m_mutex );
|
||||||
m_connectedItemsCache.clear();
|
m_connectedItemsCache.clear();
|
||||||
} while( mergeSegments( m_brd->GetConnectivity()->GetConnectivityAlgo() ) );
|
} 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();
|
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 );
|
m_connectedItemsCache[ aTrack ] = connectivity->GetConnectedItems( aTrack, connectedTypes );
|
||||||
|
}
|
||||||
|
|
||||||
return m_connectedItemsCache[ aTrack ];
|
return m_connectedItemsCache.at( aTrack );
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
|
@ -24,6 +24,7 @@
|
|||||||
#ifndef KICAD_TRACKS_CLEANER_H
|
#ifndef KICAD_TRACKS_CLEANER_H
|
||||||
#define KICAD_TRACKS_CLEANER_H
|
#define KICAD_TRACKS_CLEANER_H
|
||||||
|
|
||||||
|
#include <mutex>
|
||||||
#include <pcb_track.h>
|
#include <pcb_track.h>
|
||||||
#include <board.h>
|
#include <board.h>
|
||||||
|
|
||||||
@ -127,6 +128,7 @@ private:
|
|||||||
std::map<PCB_TRACK*, std::vector<BOARD_CONNECTED_ITEM*>> m_connectedItemsCache;
|
std::map<PCB_TRACK*, std::vector<BOARD_CONNECTED_ITEM*>> m_connectedItemsCache;
|
||||||
|
|
||||||
std::function<bool( BOARD_CONNECTED_ITEM* aItem )> m_filter;
|
std::function<bool( BOARD_CONNECTED_ITEM* aItem )> m_filter;
|
||||||
|
std::mutex m_mutex;
|
||||||
};
|
};
|
||||||
|
|
||||||
|
|
||||||
|
Loading…
x
Reference in New Issue
Block a user