Fix threaded race condition in footprints

The progress reporter should not be cleared in the footprint
implementation to prevent dereferencing a NULL.

When cancelling the load, we should only allow setting of cancellation
to true to prevent a condition where the progress reporter resets
the cancellation.

Fixes: lp:1774777
* https://bugs.launchpad.net/kicad/+bug/1774777
This commit is contained in:
Seth Hillbrand 2018-06-02 14:51:25 -07:00
parent 6e57266136
commit 975e777149
1 changed files with 4 additions and 6 deletions

View File

@ -137,8 +137,8 @@ bool FOOTPRINT_LIST_IMPL::ReadFootprintFiles( FP_LIB_TABLE* aTable, const wxStri
while( !m_cancelled && (int)m_count_finished.load() < m_loader->m_total_libs ) while( !m_cancelled && (int)m_count_finished.load() < m_loader->m_total_libs )
{ {
if( m_progress_reporter ) if( m_progress_reporter && !m_progress_reporter->KeepRefreshing() )
m_cancelled = !m_progress_reporter->KeepRefreshing(); m_cancelled = true;
else else
wxMilliSleep( 20 ); wxMilliSleep( 20 );
} }
@ -162,8 +162,6 @@ bool FOOTPRINT_LIST_IMPL::ReadFootprintFiles( FP_LIB_TABLE* aTable, const wxStri
m_progress_reporter->AdvancePhase(); m_progress_reporter->AdvancePhase();
} }
m_progress_reporter = nullptr;
return m_errors.empty(); return m_errors.empty();
} }
@ -287,8 +285,8 @@ bool FOOTPRINT_LIST_IMPL::JoinWorkers()
while( !m_cancelled && (size_t)m_count_finished.load() < total_count ) while( !m_cancelled && (size_t)m_count_finished.load() < total_count )
{ {
if( m_progress_reporter ) if( m_progress_reporter && !m_progress_reporter->KeepRefreshing() )
m_cancelled = !m_progress_reporter->KeepRefreshing(); m_cancelled = true;
else else
wxMilliSleep( 20 ); wxMilliSleep( 20 );
} }