From cf30c443064d28bfcdaa0f4c7bf799fd5d6fed99 Mon Sep 17 00:00:00 2001 From: Lutz Helwing Date: Tue, 22 Aug 2017 14:12:17 +0200 Subject: Data stuck in receiver buffer when dlt_daemon_user_send_log_level() fails (#21) - When dlt_daemon_user_send_log_level() called in dlt_daemon_process_user_message_register_context() fails -1 was returned which caused dlt_daemon_process_user_messages() to stop processing receiver buffer. Remaining data was stuck until new data arrived over FIFO. - Make debug output of dlt_daemon_user_send_log_level() more verbose. Signed-off-by: Lutz Helwing --- .gitignore | 4 ++-- src/daemon/dlt-daemon.c | 6 +----- src/daemon/dlt_daemon_common.c | 25 ++++++++++++++++++++----- 3 files changed, 23 insertions(+), 12 deletions(-) diff --git a/.gitignore b/.gitignore index 3e03b2d..4178bd7 100644 --- a/.gitignore +++ b/.gitignore @@ -7,6 +7,6 @@ config.h include/dlt/dlt_version.h .project .cproject - - .settings +.idea/ +cmake-build-debug/ diff --git a/src/daemon/dlt-daemon.c b/src/daemon/dlt-daemon.c index 9288d33..313935d 100644 --- a/src/daemon/dlt-daemon.c +++ b/src/daemon/dlt-daemon.c @@ -2423,14 +2423,10 @@ int dlt_daemon_process_user_message_register_context(DltDaemon *daemon, /* This call also replaces the default values with the values defined for default */ if (dlt_daemon_user_send_log_level(daemon, context, verbose)==-1) { - snprintf(local_str, - DLT_DAEMON_TEXTBUFSIZE, - "Can't send current log level as response to %s for (%.4s;%.4s)\n", + dlt_vlog(LOG_WARNING, "Can't send current log level as response to %s for (%.4s;%.4s)\n", __func__, context->apid, context->ctid); - dlt_log(LOG_WARNING, local_str); - return -1; } } diff --git a/src/daemon/dlt_daemon_common.c b/src/daemon/dlt_daemon_common.c index 988bd7b..096708c 100644 --- a/src/daemon/dlt_daemon_common.c +++ b/src/daemon/dlt_daemon_common.c @@ -1119,10 +1119,16 @@ int dlt_daemon_user_send_log_level(DltDaemon *daemon, DltDaemonContext *context, PRINT_FUNCTION_VERBOSE(verbose); if ((daemon == NULL) || (context == NULL)) + { + dlt_vlog(LOG_ERR, "NULL parameter in %s", __func__); return -1; + } if (dlt_user_set_userheader(&userheader, DLT_USER_MESSAGE_LOG_LEVEL) < DLT_RETURN_OK) + { + dlt_vlog(LOG_ERR, "Failed to set userheader in %s", __func__); return -1; + } if(context->storage_log_level != DLT_LOG_DEFAULT) { @@ -1137,22 +1143,31 @@ int dlt_daemon_user_send_log_level(DltDaemon *daemon, DltDaemonContext *context, usercontext.log_level_pos = context->log_level_pos; - snprintf(str,DLT_DAEMON_COMMON_TEXTBUFSIZE, "Send log-level to context: %.4s:%.4s [%i -> %i] [%i -> %i]\n", - context->apid, context->ctid, context->log_level, usercontext.log_level, context->trace_status, usercontext.trace_status); - dlt_log(LOG_NOTICE, str); + dlt_vlog(LOG_NOTICE, "Send log-level to context: %.4s:%.4s [%i -> %i] [%i -> %i]\n", + context->apid, + context->ctid, + context->log_level, + usercontext.log_level, + context->trace_status, + usercontext.trace_status); /* log to FIFO */ + errno = 0; ret = dlt_user_log_out2(context->user_handle, &(userheader), sizeof(DltUserHeader), &(usercontext), sizeof(DltUserControlMsgLogLevel)); if (ret < DLT_RETURN_OK) { - if (errno==EPIPE) + dlt_vlog(LOG_ERR, "Failed to send data to application in %s: %s", + __func__, + errno != 0 ? strerror(errno) : "Unknown error"); + + if (errno == EPIPE) { /* Close connection */ close(context->user_handle); - context->user_handle=DLT_FD_INIT; + context->user_handle = DLT_FD_INIT; } } -- cgit v1.2.1