From 444801ada631b83666625e666d3fd424f6c01199 Mon Sep 17 00:00:00 2001 From: Seth Hillbrand Date: Wed, 5 Jan 2022 13:34:12 -0800 Subject: [PATCH] Prevent unneeded fallback Starting in be8327bd540686dbc59b3f885bb3ca8c6e5bf95b, we assume that all exceptions in DoRePaint() are caused by OpenGL. But many calls in UpdateItems() will throw if there are internal errors such as std::out_of_range. Here, we catch those errors and simply skip ahead rather than falling back to Cairo --- common/draw_panel_gal.cpp | 14 +++++++++++++- 1 file changed, 13 insertions(+), 1 deletion(-) diff --git a/common/draw_panel_gal.cpp b/common/draw_panel_gal.cpp index e7943950a9..50147d4e3b 100644 --- a/common/draw_panel_gal.cpp +++ b/common/draw_panel_gal.cpp @@ -212,7 +212,19 @@ void EDA_DRAW_PANEL_GAL::DoRePaint() try { cntUpd.Start(); - m_view->UpdateItems(); + try + { + m_view->UpdateItems(); + } + catch( std::out_of_range& err ) + { + // Don't do anything here but don't fail + // This can happen when we don't catch `at()` calls + wxString msg; + msg.Printf( wxT( "Out of Range error: %s" ), err.what() ); + wxLogDebug( msg ); + } + cntUpd.Stop(); cntCtx.Start();