Fix crash if we exit lib table setup
Fixes https://gitlab.com/kicad/code/kicad/-/issues/16917
(cherry picked from commit 6a37f99e94
)
This commit is contained in:
parent
e28381841a
commit
27c573ca42
|
@ -184,6 +184,9 @@ bool IFACE::OnKifaceStart( PGM_BASE* aProgram, int aCtlBits )
|
||||||
}
|
}
|
||||||
catch( const IO_ERROR& ioe )
|
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 "
|
DisplayErrorMessage( nullptr, _( "An error occurred attempting to load the global "
|
||||||
"footprint library table." ),
|
"footprint library table." ),
|
||||||
ioe.What() );
|
ioe.What() );
|
||||||
|
|
|
@ -334,7 +334,8 @@ bool IFACE::OnKifaceStart( PGM_BASE* aProgram, int aCtlBits )
|
||||||
InitSettings( new EESCHEMA_SETTINGS );
|
InitSettings( new EESCHEMA_SETTINGS );
|
||||||
// Register the symbol editor settings as well because they share a KiFACE and need to be
|
// Register the symbol editor settings as well because they share a KiFACE and need to be
|
||||||
// loaded prior to use to avoid threading deadlocks
|
// 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
|
// We intentionally register KifaceSettings after SYMBOL_EDITOR_SETTINGS
|
||||||
// In legacy configs, many settings were in a single editor config nd the migration routine
|
// In legacy configs, many settings were in a single editor config nd the migration routine
|
||||||
|
@ -345,7 +346,12 @@ bool IFACE::OnKifaceStart( PGM_BASE* aProgram, int aCtlBits )
|
||||||
start_common( aCtlBits );
|
start_common( aCtlBits );
|
||||||
|
|
||||||
if( !loadGlobalLibTable() )
|
if( !loadGlobalLibTable() )
|
||||||
|
{
|
||||||
|
// we didnt get anywhere deregister the settings
|
||||||
|
aProgram->GetSettingsManager().FlushAndRelease( symSettings, false );
|
||||||
|
aProgram->GetSettingsManager().FlushAndRelease( KifaceSettings(), false );
|
||||||
return false;
|
return false;
|
||||||
|
}
|
||||||
|
|
||||||
m_jobHandler = std::make_unique<EESCHEMA_JOBS_HANDLER>();
|
m_jobHandler = std::make_unique<EESCHEMA_JOBS_HANDLER>();
|
||||||
|
|
||||||
|
|
|
@ -364,7 +364,21 @@ bool IFACE::OnKifaceStart( PGM_BASE* aProgram, int aCtlBits )
|
||||||
start_common( aCtlBits );
|
start_common( aCtlBits );
|
||||||
|
|
||||||
if( !loadGlobalLibTable() )
|
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;
|
return false;
|
||||||
|
}
|
||||||
|
|
||||||
m_jobHandler = std::make_unique<PCBNEW_JOBS_HANDLER>();
|
m_jobHandler = std::make_unique<PCBNEW_JOBS_HANDLER>();
|
||||||
|
|
||||||
|
|
Loading…
Reference in New Issue