diff options
author | Alexander Wenzel <Alexander.AW.Wenzel@bmw.de> | 2012-06-27 16:41:34 +0200 |
---|---|---|
committer | Christian Muck <christian.muck@bmw.de> | 2012-09-04 13:03:53 +0200 |
commit | 725dc2e72b68f81ec23252b4d7a7483822f487b2 (patch) | |
tree | 6a6314b06c985cb8638bb7897bc07fe0d7395db4 | |
parent | a614806e7e5a6f7fbdf67b3624e0aec1877445b9 (diff) | |
download | DLT-daemon-725dc2e72b68f81ec23252b4d7a7483822f487b2.tar.gz |
Fix register app and register context was not stored in buffer when FIFO is full. Other controll messages still not saved in buffer.
Signed-off-by: Christian Muck <christian.muck@bmw.de>
-rwxr-xr-x | src/lib/dlt_user.c | 43 |
1 files changed, 41 insertions, 2 deletions
diff --git a/src/lib/dlt_user.c b/src/lib/dlt_user.c index 958c9eb..e259e46 100755 --- a/src/lib/dlt_user.c +++ b/src/lib/dlt_user.c @@ -2404,7 +2404,26 @@ int dlt_user_log_send_register_application(void) /* log to FIFO */ ret=dlt_user_log_out3(dlt_user.dlt_log_handle, &(userheader), sizeof(DltUserHeader), &(usercontext), sizeof(DltUserControlMsgRegisterApplication),dlt_user.application_description,usercontext.description_length); - return ((ret==DLT_RETURN_OK)?0:-1); + + /* store message in ringbuffer, if an error has occured */ + if (ret!=DLT_RETURN_OK) + { + DLT_SEM_LOCK(); + + if (dlt_buffer_push3(&(dlt_user.startup_buffer), + (unsigned char *)&(userheader), sizeof(DltUserHeader), + (const unsigned char*)&(usercontext), sizeof(DltUserControlMsgRegisterApplication), + (const unsigned char*)dlt_user.application_description, usercontext.description_length)==-1) + { + dlt_log(LOG_ERR,"Storing message to history buffer failed! Message discarded.\n"); + DLT_SEM_FREE(); + return -1; + } + + DLT_SEM_FREE(); + } + + return 0; } int dlt_user_log_send_unregister_application(void) @@ -2491,7 +2510,27 @@ int dlt_user_log_send_register_context(DltContextData *log) /* log to FIFO */ ret=dlt_user_log_out3(dlt_user.dlt_log_handle, &(userheader), sizeof(DltUserHeader), &(usercontext), sizeof(DltUserControlMsgRegisterContext),log->context_description,usercontext.description_length); - return ((ret==DLT_RETURN_OK)?0:-1); + + /* store message in ringbuffer, if an error has occured */ + if (ret!=DLT_RETURN_OK) + { + DLT_SEM_LOCK(); + + if (dlt_buffer_push3(&(dlt_user.startup_buffer), + (unsigned char *)&(userheader), sizeof(DltUserHeader), + (const unsigned char*)&(usercontext), sizeof(DltUserControlMsgRegisterContext), + (const unsigned char*)log->context_description, usercontext.description_length)==-1) + { + dlt_log(LOG_ERR,"Storing message to history buffer failed! Message discarded.\n"); + DLT_SEM_FREE(); + return -1; + } + + DLT_SEM_FREE(); + } + + return 0; + } int dlt_user_log_send_unregister_context(DltContextData *log) |