fjpanag commented on a change in pull request #3050: URL: https://github.com/apache/incubator-nuttx/pull/3050#discussion_r599715309
########## File path: drivers/syslog/syslog_channel.c ########## @@ -135,14 +139,82 @@ static int syslog_default_putc(int ch) int syslog_channel(FAR const struct syslog_channel_s *channel) { +#if (CONFIG_SYSLOG_MAX_CHANNELS != 1) + int i; +#endif + DEBUGASSERT(channel != NULL); if (channel != NULL) { DEBUGASSERT(channel->sc_putc != NULL && channel->sc_force != NULL); - g_syslog_channel = channel; +#if (CONFIG_SYSLOG_MAX_CHANNELS == 1) + g_syslog_channel[0] = channel; return OK; +#else + for (i = 0; i < CONFIG_SYSLOG_MAX_CHANNELS; i++) + { + if (g_syslog_channel[i] == NULL) + { + g_syslog_channel[i] = channel; + return OK; + } + else if (g_syslog_channel[i] == channel) + { + return OK; + } + } +#endif + } + + return -EINVAL; +} + +/**************************************************************************** + * Name: syslog_channel_remove + * + * Description: + * Removes an already configured SYSLOG channel from the list of used + * channels. + * + * Input Parameters: + * channel - Provides the interface to the channel to be removed. + * + * Returned Value: + * Zero (OK) is returned on success. A negated errno value is returned + * on any failure. + * + ****************************************************************************/ + +int syslog_channel_remove(FAR const struct syslog_channel_s *channel) Review comment: I am not sure if this is now the issue, but the buffered syslog output is surely to have problem too. If the output string is longer than `CONFIG_IOB_BUFSIZE`, then the buffer will be outputed prematurely, causing the exact same race condition as without buffer. The fact that the buffer may be flushed before the whole syslog message has been written to it, defeats completely its puprose... -- This is an automated message from the Apache Git Service. To respond to the message, please log on to GitHub and use the URL above to go to the specific comment. For queries about this service, please contact Infrastructure at: us...@infra.apache.org