From bba2a3b9067f5311b43bfc6c77a0557f5b855615 Mon Sep 17 00:00:00 2001 From: Scott Lahteine Date: Sun, 18 Mar 2018 18:51:56 -0500 Subject: [PATCH] Prevent lcd_update stack overflow on SD Card change --- Marlin/ultralcd.cpp | 8 +++++--- 1 file changed, 5 insertions(+), 3 deletions(-) diff --git a/Marlin/ultralcd.cpp b/Marlin/ultralcd.cpp index 05ea9a941..e061fc81d 100644 --- a/Marlin/ultralcd.cpp +++ b/Marlin/ultralcd.cpp @@ -5029,17 +5029,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)