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-27 09:02:33 +0200 |
commit | e79829e9a65b0d1c7b371578278fef3f9e31fb54 (patch) | |
tree | 67fa0e84c60b3f4c0194ebcfce6c9f514759a930 | |
parent | 80462845a79f962493178722ee2fc439a62611e1 (diff) | |
download | DLT-daemon-e79829e9a65b0d1c7b371578278fef3f9e31fb54.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.
-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) |