From fbdc5ad962e83e7b6431d3c831f2c35f5244a030 Mon Sep 17 00:00:00 2001 From: Scott Lahteine Date: Sun, 18 Mar 2018 18:57:54 -0500 Subject: [PATCH] Prevent lcd_update stack overflow on SD Card change --- Marlin/src/lcd/ultralcd.cpp | 8 +++++--- 1 file changed, 5 insertions(+), 3 deletions(-) diff --git a/Marlin/src/lcd/ultralcd.cpp b/Marlin/src/lcd/ultralcd.cpp index 56255fb959..0564126410 100644 --- a/Marlin/src/lcd/ultralcd.cpp +++ b/Marlin/src/lcd/ultralcd.cpp @@ -5035,17 +5035,19 @@ void lcd_update() { const bool sd_status = IS_SD_INSERTED; if (sd_status != lcd_sd_status && lcd_detected()) { + bool old_sd_status = lcd_sd_status; // prevent re-entry to this block! + lcd_sd_status = sd_status; + if (sd_status) { safe_delay(1000); // some boards need a delay or the LCD won't show the new status card.initsd(); - if (lcd_sd_status != 2) LCD_MESSAGEPGM(MSG_SD_INSERTED); + if (old_sd_status != 2) LCD_MESSAGEPGM(MSG_SD_INSERTED); } else { card.release(); - if (lcd_sd_status != 2) LCD_MESSAGEPGM(MSG_SD_REMOVED); + if (old_sd_status != 2) LCD_MESSAGEPGM(MSG_SD_REMOVED); } - lcd_sd_status = sd_status; lcdDrawUpdate = LCDVIEW_CLEAR_CALL_REDRAW; lcd_implementation_init( // to maybe revive the LCD if static electricity killed it. #if ENABLED(LCD_PROGRESS_BAR)