Browse Source

Fix crash if we exit lib table setup

Fixes https://gitlab.com/kicad/code/kicad/-/issues/16917
newinvert
Marek Roszko 2 years ago
parent
commit
6a37f99e94
  1. 3
      cvpcb/cvpcb.cpp
  2. 8
      eeschema/eeschema.cpp
  3. 14
      pcbnew/pcbnew.cpp

3
cvpcb/cvpcb.cpp

@ -219,6 +219,9 @@ bool IFACE::OnKifaceStart( PGM_BASE* aProgram, int aCtlBits, KIWAY* aKiway )
}
catch( const IO_ERROR& ioe )
{
// we didnt get anywhere deregister the settings
aProgram->GetSettingsManager().FlushAndRelease( KifaceSettings(), false );
DisplayErrorMessage( nullptr, _( "An error occurred attempting to load the global "
"footprint library table." ),
ioe.What() );

8
eeschema/eeschema.cpp

@ -381,7 +381,8 @@ bool IFACE::OnKifaceStart( PGM_BASE* aProgram, int aCtlBits, KIWAY* aKiway )
// Register the symbol editor settings as well because they share a KiFACE and need to be
// loaded prior to use to avoid threading deadlocks
aProgram->GetSettingsManager().RegisterSettings( new SYMBOL_EDITOR_SETTINGS );
SYMBOL_EDITOR_SETTINGS* symSettings = new SYMBOL_EDITOR_SETTINGS();
aProgram->GetSettingsManager().RegisterSettings( symSettings ); // manager takes ownership
// We intentionally register KifaceSettings after SYMBOL_EDITOR_SETTINGS
// In legacy configs, many settings were in a single editor config nd the migration routine
@ -392,7 +393,12 @@ bool IFACE::OnKifaceStart( PGM_BASE* aProgram, int aCtlBits, KIWAY* aKiway )
start_common( aCtlBits );
if( !loadGlobalLibTable() )
{
// we didnt get anywhere deregister the settings
aProgram->GetSettingsManager().FlushAndRelease( symSettings, false );
aProgram->GetSettingsManager().FlushAndRelease( KifaceSettings(), false );
return false;
}
m_jobHandler = std::make_unique<EESCHEMA_JOBS_HANDLER>( aKiway );

14
pcbnew/pcbnew.cpp

@ -414,7 +414,21 @@ bool IFACE::OnKifaceStart( PGM_BASE* aProgram, int aCtlBits, KIWAY* aKiway )
start_common( aCtlBits );
if( !loadGlobalLibTable() )
{
// we didnt get anywhere deregister the
aProgram->GetSettingsManager().FlushAndRelease(
aProgram->GetSettingsManager().GetAppSettings<CVPCB_SETTINGS>(), false );
aProgram->GetSettingsManager().FlushAndRelease( KifaceSettings(), false );
aProgram->GetSettingsManager().FlushAndRelease(
aProgram->GetSettingsManager().GetAppSettings<FOOTPRINT_EDITOR_SETTINGS>(), false );
aProgram->GetSettingsManager().FlushAndRelease(
aProgram->GetSettingsManager().GetAppSettings<EDA_3D_VIEWER_SETTINGS>(), false );
return false;
}
m_jobHandler = std::make_unique<PCBNEW_JOBS_HANDLER>( aKiway );

Loading…
Cancel
Save