This is an automated email from the ASF dual-hosted git repository. xiaoxiang pushed a commit to branch master in repository https://gitbox.apache.org/repos/asf/nuttx.git
commit b990b25b8ecd2e73548ae54742637c451f2f0589 Author: YAMAMOTO Takashi <yamam...@midokura.com> AuthorDate: Wed Nov 13 18:33:58 2024 +0900 Reapply "SYSLOG_DEFAULT: wrap up_putc/up_nputs calls with critical section" This reverts commit 35240d77faa0b5e00d0bb3e9024ac2dde7c8362a. --- drivers/serial/serial.c | 4 ++++ drivers/syslog/syslog_channel.c | 23 +++++++++++++---------- 2 files changed, 17 insertions(+), 10 deletions(-) diff --git a/drivers/serial/serial.c b/drivers/serial/serial.c index 6915e8d1f3..d475f44d12 100644 --- a/drivers/serial/serial.c +++ b/drivers/serial/serial.c @@ -268,6 +268,10 @@ static int uart_putxmitchar(FAR uart_dev_t *dev, int ch, bool oktoblock) { /* The following steps must be atomic with respect to serial * interrupt handling. + * + * This critical section is also used for the serialization + * with the up_putc-based syslog channels. + * See https://github.com/apache/nuttx/issues/14662 */ flags = enter_critical_section(); diff --git a/drivers/syslog/syslog_channel.c b/drivers/syslog/syslog_channel.c index a7893359d7..8038271d59 100644 --- a/drivers/syslog/syslog_channel.c +++ b/drivers/syslog/syslog_channel.c @@ -33,7 +33,6 @@ #include <nuttx/syslog/syslog.h> #include <nuttx/compiler.h> -#include <nuttx/mutex.h> #ifdef CONFIG_RAMLOG_SYSLOG # include <nuttx/syslog/ramlog.h> @@ -72,10 +71,6 @@ static ssize_t syslog_default_write(FAR syslog_channel_t *channel, * Private Data ****************************************************************************/ -#if defined(CONFIG_SYSLOG_DEFAULT) && defined(CONFIG_ARCH_LOWPUTC) -static mutex_t g_lowputs_lock = NXMUTEX_INITIALIZER; -#endif - #ifdef CONFIG_RAMLOG_SYSLOG static const struct syslog_channel_ops_s g_ramlog_channel_ops = { @@ -234,11 +229,17 @@ g_syslog_channel[CONFIG_SYSLOG_MAX_CHANNELS] = #ifdef CONFIG_SYSLOG_DEFAULT static int syslog_default_putc(FAR syslog_channel_t *channel, int ch) { - UNUSED(channel); - # ifdef CONFIG_ARCH_LOWPUTC + /* See https://github.com/apache/nuttx/issues/14662 + * about what this critical section is for. + */ + + irqstate_t flags = enter_critical_section(); up_putc(ch); + leave_critical_section(flags); # endif + + UNUSED(channel); return ch; } @@ -246,11 +247,13 @@ static ssize_t syslog_default_write(FAR syslog_channel_t *channel, FAR const char *buffer, size_t buflen) { # ifdef CONFIG_ARCH_LOWPUTC - nxmutex_lock(&g_lowputs_lock); + /* See https://github.com/apache/nuttx/issues/14662 + * about what this critical section is for. + */ + irqstate_t flags = enter_critical_section(); up_nputs(buffer, buflen); - - nxmutex_unlock(&g_lowputs_lock); + leave_critical_section(flags); # endif UNUSED(channel);