From ecaa2bd778eb46fb4e9569f55bc07e693b6256cb Mon Sep 17 00:00:00 2001 From: "Earle F. Philhower, III" Date: Sat, 21 Jan 2023 01:38:15 -0800 Subject: [PATCH] Fix SerialUART::overflow reporting race condition (#1133) Fixes #1132 --- cores/rp2040/SerialUART.cpp | 17 +++++++++++++---- 1 file changed, 13 insertions(+), 4 deletions(-) diff --git a/cores/rp2040/SerialUART.cpp b/cores/rp2040/SerialUART.cpp index ebc12ddf..45be73bb 100644 --- a/cores/rp2040/SerialUART.cpp +++ b/cores/rp2040/SerialUART.cpp @@ -289,13 +289,22 @@ int SerialUART::read() { } bool SerialUART::overflow() { - CoreMutex m(&_mutex); - if (!_running || !m) { + if (!_running) { return false; } - bool hold = _overflow; + + if (_polling) { + _handleIRQ(false); + } else { + _pumpFIFO(); + } + + mutex_enter_blocking(&_fifoMutex); + bool ovf = _overflow; _overflow = false; - return hold; + mutex_exit(&_fifoMutex); + + return ovf; } int SerialUART::available() {