diff --git a/src/servers/syslog_daemon/SyslogDaemon.cpp b/src/servers/syslog_daemon/SyslogDaemon.cpp index b6e13622a5..e569d28e5a 100644 --- a/src/servers/syslog_daemon/SyslogDaemon.cpp +++ b/src/servers/syslog_daemon/SyslogDaemon.cpp @@ -138,6 +138,11 @@ SyslogDaemon::Daemon() // add terminating null byte message.message[bytesRead - sizeof(syslog_message)] = '\0'; + if (!message.message[0]) { + // ignore empty messages + continue; + } + fHandlerLock.Lock(); for (int32 i = fHandlers.CountItems(); i-- > 0;) { diff --git a/src/servers/syslog_daemon/syslog_output.cpp b/src/servers/syslog_daemon/syslog_output.cpp index 1c3d1faa32..e76c18cc94 100644 --- a/src/servers/syslog_daemon/syslog_output.cpp +++ b/src/servers/syslog_daemon/syslog_output.cpp @@ -164,6 +164,8 @@ syslog_output(syslog_message &message) } else { length = strlcpy(buffer + headerLength, message.message + pos, sizeof(buffer) - headerLength); + if (length == 0) + break; } length += headerLength; diff --git a/src/system/kernel/debug/debug.c b/src/system/kernel/debug/debug.c index 512b9c2008..12f17d9349 100644 --- a/src/system/kernel/debug/debug.c +++ b/src/system/kernel/debug/debug.c @@ -431,6 +431,12 @@ syslog_sender(void *data) restore_interrupts(state); } + if (length == 0) { + // the buffer we came here for might have been sent already + bufferPending = false; + continue; + } + error = write_port_etc(port, SYSLOG_MESSAGE, sSyslogMessage, sizeof(struct syslog_message) + length, B_RELATIVE_TIMEOUT, 0);